在单个游戏中结合事件驱动和实时元素

时间:2013-12-19 01:03:47

标签: c# game-engine

我试图创造一个(非常基本的)游戏。游戏分为两个不同的部分,事件驱动的部分,除非玩家点击按钮,否则没有任何反应,以及用户点击按钮但响应实时事件的实时元素。

我能想到的最好的例子是罗马:全面战争系列。活动模式几乎完全由事件驱动,战斗模式是实时的。足球经理(管理模式/比赛模式)也类似。

我知道这是一个愚蠢的一般性问题,但是你如何编写这样的游戏呢?是否有关于此类事情的文档?

语言我想尽可能使用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次游戏,我只需要在按下按钮时更新。

我的问题是,是否有办法将两者结合起来,因为上述游戏显然已经完成了。

1 个答案:

答案 0 :(得分:0)

将所有实时操作放在运行“游戏循环”的单独线程中。

所有事件要么推送到游戏循环然后轮询的队列,要么设置标记游戏循环cn check。

这样,所有事件都以受控方式与持续运行的循环分开。

游戏循环将负责为所有对象调用“更新”方法,这会导致对象移动,射击或者它自己应该做的任何事情。

或者我误解了这个问题?