hge源码注释 3 hge引擎的启动(3)

最后调用System_Start,程序就进入游戏循环了,不断执行消息处理、游戏逻辑、游戏渲染,直到游戏结束跳出循环。


//system.cpp
bool CALL HGE_Impl::System_Start()
{
	MSG		msg;

	if(!hwnd) //必须创建窗口
	{
		_PostError("System_Start: System_Initiate wasn't called");
		return false;
	}

	if(!procFrameFunc) {//必须指定游戏逻辑函数
		_PostError("System_Start: No frame function defined");
		return false;
	}

	bActive=true;

	// MAIN LOOP 主循环

	for(;;)
	{
		
		// Process window messages if not in "child mode"
		// (if in "child mode" the parent application will do this for us)
		
		if(!hwndParent) //窗口消息获取
		{
			if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
			{ 
				if (msg.message == WM_QUIT)	break;
				// TranslateMessage(&msg);
				DispatchMessage(&msg);
				continue;
			}
		}

		// Check if mouse is over HGE window for Input_IsMouseOver

		_UpdateMouse(); //更新鼠标信息

		// If HGE window is focused or we have the "don't suspend" state - process the main loop

		if(bActive || bDontSuspend) //如果窗口被激活或者设置了窗口失去焦点不挂起
		{
			// Ensure we have at least 1ms time step
			// to not confuse user's code with 0

			do { dt=timeGetTime() - t0; } while(dt < 1); //延时1ms,确保相邻两帧至少间隔1ms

			// If we reached the time for the next frame 如果到了下一帧的时间
			// or we just run in unlimited FPS mode, then  或者fps无限制
			// do the stuff 开始执行

			if(dt >= nFixedDelta)  //如果间隔时间大于等于规定帧间隔时间
			{
				// fDeltaTime = time step in seconds returned by Timer_GetDelta 
				
				fDeltaTime=dt/1000.0f; //更新帧时间

				// Cap too large time steps usually caused by lost focus to avoid jerks
				//屏蔽由窗口失去焦点造成的过大的帧时间,避免混乱
				if(fDeltaTime > 0.2f)  //如果帧时间过大,将它改小
				{
					fDeltaTime = nFixedDelta ? nFixedDelta/1000.0f : 0.01f;
				}

				// Update time counter returned Timer_GetTime 更新运行时间

				fTime += fDeltaTime;

				// Store current time for the next frame 为下一帧保存当前时间
				// and count FPS  计算刷新率

				t0=timeGetTime();
				if(t0-t0fps <= 1000) cfps++;
				else
				{
					nFPS=cfps; cfps=0; t0fps=t0;
					_UpdatePowerStatus();
				}

				// Do user's stuff 调用逻辑函数和渲染函数

				if(procFrameFunc()) break;   //如果proFrameFunc 返回true,跳出循环
				if(procRenderFunc) procRenderFunc();
				
				// If if "child mode" - return after processing single frame 
				//如果有父窗口,本帧结束
				if(hwndParent) break;

				// Clean up input events that were generated by
				// WindowProc and weren't handled by user's code
				//清除剩下不能被处理的输入事件
				_ClearQueue();

				// If we use VSYNC - we could afford a little
				// sleep to lower CPU usage

				// if(!bWindowed && nHGEFPS==HGEFPS_VSYNC) Sleep(1);
			}

			// If we have a fixed frame rate and the time
			// for the next frame isn't too close, sleep a bit
			//如果离下一帧还不是很近,延时一下,可以降低CPU占用
			else
			{
				if(nFixedDelta && dt+3 < nFixedDelta) Sleep(1);
			}
		}

		// If main loop is suspended - just sleep a bit
		// (though not too much to allow instant window
		// redraw if requested by OS)  
		//如果窗口被挂起
		else Sleep(1);
	}

	_ClearQueue();

	bActive=false;

	return true;
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基本功能和翎风的一样。 ------------------------------------------------------------------ [2016.09.30] 更新M2功能 ------------------------------------------------------------------ 1.增加脚本命令:InSafeZone //检测人物是否在安全区 ------------------------------------------------------------------ 2.修改程序防止最新僵尸攻击 3.增加脚本命令:SETRANDOMNO //产生一个随机数字 [@main] #IF #ACT SETRANDOMNO //产生一个随机数字 #SAY : //将显示出产生的随机数 [@@CHECKNO] #IF CHECKRANDOMNO //检测输入的验证码是否正确 #ELSEACT MESSAGEBOX 验证码错误! CLOSE BREAK 4.增加脚本命令:ISONMAP MAP //检测当前人是否在MAP地图上 5.增加脚本命令:DELAYCALL 作用:延时执行同一个NPC脚本中指定的标签内容 格式:DELAYCALL S LABEL 其中S是延时秒数(毫秒),Label是执行的脚本标签 示例:DelayCall 3000 @DELAYCALLTEST --- 3秒后自动跳到@DELAYCALLTEST节执行 6.增加脚本命令:KILLBYMON //是否被怪杀 7.增加脚本命令:KILLBYHUM //是否被人杀 地图增加一参数:KILLFUNC(X) //X可以随意数字 说明: 人物在该地图杀人,将触发QFunction-0.txt的[@KillPlay数字]节 人物在该地图杀怪,将触发QFunction-0.txt的[@KillPlayMon数字]节 注:宝宝杀人杀怪有效(秒杀除外) 8. //杀人的怪物名字 9. //杀人的人物名字 #IF KILLBYMON SENDMSG 5 在:%m(%x:%y)把干掉了! #IF KILLBYHUM SENDMSG 5 在:%m(%x:%y)把干掉了! 10.增加人物S变量:(0~99个) 11.解决地图标记 NoHUMNoMon 有人刷怪不能用的问题! 12.增加NPC命令:REPAIRALL //特修身上所有装备 13.增加数据库(修复神水)设置:3 14 //特修身上所有装备 14.增加脚本命令:ISGROUPMASTER //检测是否组长,加入编组后组长会触发QFunction-0.txt 15.增加挂机泡点功能。 ===================================== OFFLINE S EXP S是时间,单位秒 EXP为每S秒得到的经验值 默认必须在安全区域有效 脚本示意: (******************************************************************) (@@offlinemsg) [@main] 一、点击开始脱机泡点后,可输入一段留言信息给你的朋友。\ \ \ \ [@@offlinemsg] #IF CHECKLEVEL > 0 #ACT OFFLINE 5 500 //每5秒增加500经验 --------------------------------------------------------------------------- 16.;检测是否组长 [@MAIN] #IF ISGROUPMASTER #ACT GroupMoveMap 3 330 330 #elsesay 你不是组长. 加入编组后组长会触发QFunction-0.txt [@GroupCreate] #if #say 加入编组 --------------------------------------------------------------------------- 17.增加脱机泡点功能 18.增加地图标记有人刷怪 [0 比奇] NoHUMNoMon ;有人才开始刷怪 19.增加地图标记禁止仍背包物品 [1 沃玛森林] NOTHROWITEM ;禁止仍背包物品 20.增加地图标记死后不爆背包物品 [2 毒蛇山谷] NODR
### 回答1: 3k引擎是一款较为古老的游戏引擎,而hge引擎(Hiroshima Game Engine)则是一款采用C++编写的轻量级游戏引擎。如果要将一个基于3k引擎的项目转换为hge引擎,以下是一些基本的教程步骤: 1. 首先,了解hge引擎的基本特性和使用方式。可以参考官方文档和教程以及在线论坛来获取相关信息。 2. 分析3k引擎项目的代码结构和功能。了解项目中使用的主要功能和类,以便在转换过程中进行相应的调整和修改。 3. 在hge引擎中创建一个新项目。根据自己的需求和项目的特性来设置项目的相关参数,例如窗口大小、显示模式等。 4. 将3k引擎项目中的资源文件(例如图片、音频等)复制到hge引擎项目中的相应目录下。确保资源文件的路径和名称在hge引擎中能够正确访问。 5. 逐个转换和调整3k引擎项目的功能和代码。根据hge引擎的语法和功能进行相应的修改,包括更新事件循环、渲染、碰撞检测等相关代码。 6. 调试和测试hge引擎项目。在转换过程中会遇到一些问题和bug,使用调试工具和测试用例来排查和修复这些问题。 7. 最后,将hge引擎项目打包和发布。根据平台的要求和项目的需求来生成可执行文件或者库文件,准备发布给用户使用。 总之,从3k引擎转换到hge引擎需要一定的工作量和代码调整。需要熟悉hge引擎的使用方法和特性,并对原始项目的代码结构和功能有一定的理解和分析能力。只有在转换的过程中不断学习和调试,才能顺利将3k引擎的项目转换到hge引擎上。 ### 回答2: 3K引擎HGE引擎的教程可以分为以下几个步骤: 1.了解HGE引擎:首先,需要对HGE引擎有一定的了解,包括其概念、功能和特点。可以阅读官方文档或者在线教程,掌握HGE引擎的基本知识。 2.分析3K引擎代码:将3K引擎的代码进行仔细分析,了解其架构、功能模块和代码结构。这样可以更好地理解3K引擎的代码,并为接下来的转换工作做好准备。 3.选择合适的工具:在转换过程中,可以选择一些合适的工具来辅助完成。例如,可以使用代码编辑器来修改和转换代码,使用调试工具来排查错误等。 4.修改代码适配HGE引擎:根据HGE引擎的要求和特性,对3K引擎的代码进行修改和调整,以使其能够适配HGE引擎的规范和接口。可能需要对输入输出、图形渲染、声音播放等方面进行修改。 5.测试和调试:在代码修改完成后,需要进行测试和调试,以确保转换后的代码能够正常运行并达到预期的效果。可以使用HGE引擎提供的调试工具,对代码进行逐行调试,检查和修复可能存在的问题。 6.优化和完善:转换完成后,还可以对代码进行优化和完善。可以使用一些优化技巧来提高游戏的性能和用户体验,包括资源管理、内存优化、算法优化等方面。 总之,将3K引擎转换为HGE引擎需要深入了解两个引擎的特点和代码结构,并进行相应的修改和调整。同时,还需要进行测试和调试,优化和完善代码,确保转换后的游戏能够在HGE引擎上正常运行。 ### 回答3: 转换3k引擎hge引擎的教程如下: 首先,确保你对3k引擎hge引擎有一定的了解和使用经验。了解两者的基本概念和结构对于转换工作非常重要。 第一步是了解3k引擎的主要特点和功能。3k引擎是一个开源的2D游戏引擎,它提供了丰富的功能和工具来帮助开发者创建2D游戏。熟悉3k引擎的API和工具将为你转换到hge引擎提供必要的基础知识。 接下来,了解hge引擎的主要特点和功能。hge引擎是一个用于Windows平台的2D游戏引擎,提供了高效的渲染和输入处理功能。了解hge引擎的API和工具是你成功转换的关键。 一旦你对两个引擎都有了一定的了解,你可以开始将你的项目从3k引擎转换到hge引擎。 首先,创建一个新的hge引擎项目。确保你按照hge引擎的项目结构来组织你的代码和资源文件。 接下来,逐个将3k引擎中的功能和代码迁移到hge引擎中。这可能涉及到修改你的代码逻辑、重新组织你的资源文件,以及使用hge引擎的API来实现你之前在3k引擎中使用的功能。 在转换过程中,你可能会遇到一些挑战和问题。这时,你可以参考hge引擎的官方文档和开发者社区来获取帮助和支持。 最后,测试和调试你的转换后的hge引擎项目。确保所有的功能都正常运行,并且没有出现任何错误或异常。 总结起来,将3k引擎转换到hge引擎需要你对两者有一定的了解和熟悉。然后,你需要逐步迁移你的代码和资源文件,并在转换过程中解决可能出现的问题。最后,测试和调试你的转换后的hge引擎项目,确保一切工作正常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值