【问题标题】:AndEngine Game Loop. Where is it?AndEngine 游戏循环。它在哪里?
【发布时间】:2012-03-25 20:34:53
【问题描述】:

我有使用 Cocos2d 和 Box2d 编写游戏的经验。现在我正在玩 AndEngine,我有点迷路了。这听起来像是一个愚蠢的问题,但 AndEngine 的游戏循环在哪里?通常在其他引擎上可以找到的 update() 函数在哪里?我已经浏览了示例,但我找不到它。我看到了这个例子http://www.andengine.org/forums/development/where-is-the-game-loop-t12.html 但这并没有多大帮助。

如果您能对此有所了解,我将不胜感激。

【问题讨论】:

  • 我在您的链接中看到的答案是“没有游戏循环”。但是每个对象都有某种事件处理程序,因此您必须为每个游戏对象执行 update()。
  • @user1419184 提供的答案是您问题的正确答案,OP。请接受。

标签: android box2d andengine game-engine


【解决方案1】:

//一个简单的方法是在onLoadScene方法上创建游戏循环

public Scene onLoadScene() {     
            Scene scene = new Scene();                     
            scene.registerUpdateHandler(new IUpdateHandler() {                    
                public void reset() {        
                }             
                public void onUpdate(float pSecondsElapsed) {
                    //HERE IS THE GAME LOOP
                }
            });
            return scene;
}

【讨论】:

  • 注意,在AndEngine-AnchorCenter中,基于OpenGL2.0,registerUpdateHandler(...)方法也可以在onCreateScene()内部调用。游戏循环也将在 onUpdate(...) 方法中。
【解决方案2】:

我认为您正在寻找Engine

见:

【讨论】:

  • Gedankenexperiment:与Engine相比,这两个子类几乎没有代码。你能想象什么样的设计改变来摆脱子类?扩展EngineOptions 以支持设置更新行为?委托?
  • 我不会使用委托,因为引擎不是接口。如果我真的想摆脱子类,那么我要么使用策略模式,要么只是根据你描述的 EngineOptions.UPDATE_STRATEGY 切换更新方法。
【解决方案3】:

你也可以在你的Activity类中实现接口IUpdateHandler:

public class YourActivityClass extends BaseGameActivity implements IUpdateHandler
{
    @Override
    public void onUpdate(float pSecondsElapsed)
    {
        //Game loop
    }

    @Override
    public void reset() 
    {   
    }
}

并注册更新处理程序:

mEngine.registerUpdateHandler(this);

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 2014-01-21
    • 2011-08-23
    • 2020-03-23
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多