【问题标题】:Killing a Sprite in AndEngine在 AndEngine 中杀死一个精灵
【发布时间】:2013-09-02 20:47:01
【问题描述】:

嗨,我在让我的精灵淡入时遇到了一些问题。我使用并行实体修改器、缩放和淡入淡出,之后精灵获得新的 X 和 Y 坐标并淡入和缩放。它不起作用,我认为它可能与 onUpdate 方法有关。

XOsprite = new Sprite(x, y, XO, engine.getVertexBufferObjectManager()) {

        @Override
        public boolean onAreaTouched(final TouchEvent te, final float xVal,
                final float yVal) {




            XOsprite.registerEntityModifier(downOut);  //kill sprite
            isKilled = true;
            XOsprite.registerUpdateHandler(new IUpdateHandler() {

                @Override
                public void reset() {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onUpdate(float pSecondsElapsed) {
                    // TODO Auto-generated method stub

                    totalElapsedTime += pSecondsElapsed;
                    if(totalElapsedTime >= 3.0f){

                        BaseGameActivity gameActivity = (BaseGameActivity) activity;
                        gameActivity.runOnUpdateThread(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                if(isKilled){
                                    reviveSprite();
                                    isKilled = false;
                                }
                            }
                        });

                    }
                    //reset();
                }
            });

            return true;

        }
    };





    XOsprite.registerEntityModifier(inUp);



    gameScene.attachChild(XOsprite);
    gameScene.registerTouchArea(XOsprite);

    return gameScene;
}

-编辑-更多代码

public void reviveSprite(){

    setSprites();
    XOsprite.unregisterEntityModifier(downOut);
    XOsprite.registerEntityModifier(inUp);
}
public void setSprites(){

    if (rand.nextInt(2) == 0) {
        XO = X;
    } else {
        XO = O;
    }

        x = rand.nextInt(MainActivity.CAM_WIDTH);
        y = rand.nextInt(MainActivity.CAM_HEIGHT);

}

【问题讨论】:

  • 您在这方面犯了很多错误,所以请明确说明您要做什么?

标签: android entity andengine modifier


【解决方案1】:

您已经在 UpdateThread 上,因此无需这样做

gameActivity.runOnUpdateThread(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            if(isKilled){
                                reviveSprite();
                                isKilled = false;
                            }
                        }
                    });

就这样做

                            if(isKilled){
                                reviveSprite();
                                isKilled = false;
                            }

【讨论】:

  • 我尝试了你所说的,但我的精灵仍然没有消失我包含了更多我的代码也许问题是实体修饰符?
  • 您确定正在呼叫reviveSprite() 吗?也许添加一个日志条目以确保
  • 是的,我调试了它并且它被明显地调用了..当我尝试在那里敬酒时,由于某种原因它给了我一个错误
猜你喜欢
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多