1.1 设置开发环境
集成开发环境(IDE):集成开发环境的优点是,除了提供文本编辑功能,还能提供代码自动完成和调试功能。
windows:visual Studio
macOS:Apple Xcode
1.4 . 游戏循环和Game类
游戏程序和其他程序之间的最大不同在与:只要游戏程序在运行中,每一秒都需要对游戏进行多次更新。游戏循环是用于控制整个游戏程序整体流程的一个循环。像其他循环一样,游戏循环具有在每次循环时要执行的代码,并且游戏循环具有循环条件。对于游戏循环,只要玩家没有退出游戏程序,循环就得持续运行。
游戏循环的每一次迭代就是一帧。如果游戏以60帧/秒(FPS)的帧率运行,则意味着,每一秒,游戏循环都会完成60此迭代。许多实时游戏都是以30帧/秒(FPS)或60 帧/秒(FPS)的帧率运行。通过每秒运行多次迭代,即使只是定时更新,游戏仍会给人一种连续运动的错觉。术语“帧速率”可与帧频(FPS)互换使用,即“60帧速率”跟“60帧/秒(FPS)”所表达的意思相同。
1.41 关于 “ 帧 “ 的理解
在较高层面上,游戏会在每一帧执行一下步骤:
1. 处理任何输入:
清除的表明要检测来自各种设备的任何输入,包括键盘、鼠标或控制器等,但这些输入可能并不是游戏的唯一输入,考虑一个支持多玩家在线模式的游戏,在这种情况下,通过互联网接收的数据作为游戏输入。在某些类型的手机游戏中,另外的一种输入可能是相机所能拍摄到的内容,或者也可能是全球定位系统(GPS)信息。最终,游戏的输入取决于游戏的类型和其所运行的平台。
2. 更新游戏世界:
指的是仔细检查游戏世界中的每个对象,并根据需要对其进行更新。这可能会涉及数百甚至数千个对象,包括游戏世界中的人物、用户界面部分,以及影响游戏的其他对象——即使这些对象是不可见的。
3. 生成任何输出:
最明显的输出是图形。但是还有其他输出。例如音频(包括音效、音乐和人物对话)。
/*
《吃豆人》游戏循环伪代码
*/
void Game::Runloop()
{
while (!mShouIdQuit)
{
JoystickData j = GetJoystickData();
UpdatePlayerPosition(j);
for (Ghost& g : mGhost)
{
if (g.Collides(player))
{
}
else
{
g.Update();
}
}
RenderGraphics();
RenderAudio();
}
}