2D 游戏中如何处理游戏事件的长度

5
我有一个想法,但不确定它是否理想。所谓事件是指例如,如果玩家获胜,则会有一堆火花飞舞1秒钟。我考虑创建我的游戏引擎类,然后创建一个游戏事件基类,其中包含3个void函数:更新、绘制和渲染。例如,收集100枚硬币可以获得烟花4 3秒钟。我想要实现的方式是,在我的游戏引擎中有一个事件向量,我可以将烟花动画推入其中。一旦向量中推入了某些东西,游戏就会执行event[i].render()等操作。对于删除它,我认为每个事件都可以有一个在帧中的事件长度,每个帧一个uint增加,如果uint匹配长度,则从向量中弹出。我只是不确定这样做是否是最好的方式。
谢谢
2个回答

1

我会让每个事件实例都有一个名为isDone的方法,或者类似于此的方法。然后,对于每一帧,遍历您的事件并执行以下操作:

if (event.isDone()) {
    //remove the event
} else {
    event.update();
}

这样做可以更容易地进行未来的更改。并非所有事件都将持续固定的时间(这可能不适用于您的游戏),某些事件甚至可能取决于当前帧以外的其他事情。

但是在您的 eventBaseClass 中,您可以将 isDone 定义为:

return this.endFrame >= game.currentFrame;

并在需要的任何事件中覆盖它。


我真的很喜欢这个!谢谢!但是一直增加当前帧会导致溢出吗? - jmasterx
1
假设是32位架构,每秒60帧,那么在828.5天后会溢出:(2**32)/60/60/60/24。 - Ponkadoodle
啊,我需要复习一下我的数学 :-p,谢谢,我会这样实现的,但我仍然认为我应该加一个if语句,以便在828.5天后重置为0 ;-) - jmasterx

1

有很多不同的方法来解决这个问题。例如,你的例程之一可以返回一个布尔值,指示是否应该将此动画从动画队列中弹出。我不确定update、draw和render之间的区别是什么,但这些都不重要...

我的建议是阅读。阅读其他动画引擎正在做什么,找到一本好的图形编程宝典,并从现有的和已经建立的实现中获取想法和技术。更好的解决方案是使用其中之一,这样可以节省您很多痛苦和烦恼。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接