【问题标题】:How are game event lengths handled in 2D games如何在 2D 游戏中处理游戏事件长度
【发布时间】:2010-02-08 23:55:51
【问题描述】:

我知道我想如何解决这个问题,但我不确定它是否理想。 我所说的事件是指,例如,如果玩家获胜,一堆火花会飞 1 秒钟。我正在考虑创建我的游戏引擎类,然后创建一个具有 3 个 void 函数的游戏事件基类,更新、绘制、渲染。例如,可能有用于在 3 秒内收集 100 个硬币的火叉。我想要实现它的方式是在我的游戏引擎中有一个事件向量,我可以在其中推送 fireforks 动画。一旦将某些东西推送到向量中,游戏就会执行 event[i].render() 等...删除它我认为每个事件都可以有一个以帧为单位的事件长度,并且每个帧都会增加一个 uint,如果 uint 匹配长度,它就会从向量中弹出。我只是不确定这样做是否是最好的方法。

谢谢

【问题讨论】:

    标签: c++


    【解决方案1】:

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

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

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

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

    return this.endFrame >= game.currentFrame;
    

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

    【讨论】:

    • 我真的很喜欢这个!谢谢!,但是一直增加 currectframe 会导致溢出?
    • 假设32位架构,每秒60帧,828.5天后会溢出:(2**32)/60/60/60/24
    • 啊,我需要复习一下我的数学:-p,谢谢,我会以这种方式实现它,但我仍然认为我应该做一个 if 以便在 828.5 天后它重置为 0 ; -)
    【解决方案2】:

    有很多很多不同的方法可以给这只猫剥皮。例如,您的一个例程可以返回一个布尔值,指示该动画是否应该从动画队列中弹出。我不确定更新、绘制和渲染之间的区别是什么,但除此之外的一切......

    我的建议是阅读。阅读其他动画引擎正在做什么,去寻找一本好的图形编程宝石书,并从预先存在的和已建立的实现中收集想法和技术。更好的解决方案是使用其中一个,从而为您省去很多痛苦和痛苦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-21
      • 2011-07-06
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      相关资源
      最近更新 更多