我试图创造一个(非常基本的)游戏。游戏分为两个不同的部分,事件驱动的部分,除非玩家点击按钮,否则没有任何反应,以及用户点击按钮但响应实时事件的实时元素。
我能想到的最好的例子是罗马:全面战争系列。活动模式几乎完全由事件驱动,战斗模式是实时的。足球经理(管理模式/比赛模式)也类似。
我知道这是一个愚蠢的一般性问题,但是你如何编写这样的游戏呢?是否有关于此类事情的文档?
语言我想尽可能使用C#
编辑:
代码段示例:
void UpdateCar1(GameTime gameTime, float speed)
{
a = (float)gameTime.TotalGameTime.TotalSeconds * speed * (float)(90 * Math.PI / (180*2.5));
X = Math.Cos(a)*100;
Y = Math.Sin(a)*100;
Car1Position.X = 100+(int)X;
Car1Position.Y = 100+(int)Y;
}
这使得Car
"驱动器"围成一圈。
有一些代码用于检测"按钮"上的鼠标按钮点击 - 它们只是让Car
变得更快或更慢(为了清晰起见,编辑为伪代码)。
if (mouse.LeftButton == ButtonState.Released && previousButtonState == ButtonState.Pressed)
{
if ("button click occured within faster button rectangle") { "go faster" }
if ("button click occured within slower button rectangle") { "go slower" }
}
以上对游戏的实时元素都很好。然而,对于事件驱动的东西,它看起来很笨拙,我不需要每秒更新60次游戏,我只需要在按下按钮时更新。
我的问题是,是否有办法将两者结合起来,因为上述游戏显然已经完成了。
答案 0 :(得分:0)
将所有实时操作放在运行“游戏循环”的单独线程中。
所有事件要么推送到游戏循环然后轮询的队列,要么设置标记游戏循环cn check。
这样,所有事件都以受控方式与持续运行的循环分开。
游戏循环将负责为所有对象调用“更新”方法,这会导致对象移动,射击或者它自己应该做的任何事情。
或者我误解了这个问题?