屏幕将不会记录精灵/身体被移除的位置(Box2D)?

时间:2012-07-11 06:15:35

标签: android touch box2d andengine

我正在使用AndEngine / Box2D来制作游戏。加载游戏时,会创建一个包含精灵和实体的类数组。当用户触摸屏幕时,按顺序将下一个精灵附加到场景,并将其正文设置为活动状态。精灵/身体以后可以被摧毁。为此,我分离精灵并将主体设置为非活动状态。但是,此时,场景不再记录触摸。将精灵/身体拖入路径时,它会停止。但是,场景中的其他实体不会与之交互。这让我相信它与触摸错误有关。这是我的代码:

private void destroyFiller(){ //Deletes filler
    if(filler[fillerNum].active){
        filler[fillerNum].active=false;
        mPhysicsWorld.unregisterPhysicsConnector(mPhysicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(filler[fillerNum].sprite));
        filler[fillerNum].body.setUserData("destroy");
        scene.detachChild(filler[fillerNum].sprite);
        fillerCount--;
        fillersLeftText.setText("Balls left: "+Integer.toString(fillerCount));

        if(fillerCount==0)
            gameOver();
    }
}

并将身体设置为无效

scene.registerUpdateHandler(new IUpdateHandler() {

            @Override
            public void reset() {         
            }

            @Override
            public void onUpdate(float pSecondsElapsed) {
                if(fillerNum>-1){
                    if(filler[fillerNum].body.getUserData().equals("destroy")){ //"Destroys" the body which can only be done on an update
                        filler[fillerNum].body.setActive(false);
                        filler[fillerNum].body.setUserData("destroyed");
                        if(soundOn)
                            popSound.play();
                    }

这是场景触摸事件:

public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
         if(this.mPhysicsWorld != null && mEngine != null) {
                if(pSceneTouchEvent.isActionDown()) {
                    Log.e("SceneTouchEvent","Touch"); //This line doesn't execute when touching a body that passed through destroyFiller
                    createFiller(pSceneTouchEvent.getX(), pSceneTouchEvent.getY());
                    return true;
                }
            }
        return false;
    }

如果需要,可以创建makeFiller:

private void createFiller(float x, float y) {
        fillerNum++;
        filler[fillerNum].active=true;
        filler[fillerNum].sprite.setPosition(x-fillerTR.getWidth()/2,y - fillerTR.getHeight()/2);
        scene.registerTouchArea(filler[fillerNum].sprite);
        filler[fillerNum].body.setUserData("fill");
        filler[fillerNum].body.setActive(true);
        mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(filler[fillerNum].sprite, filler[fillerNum].body, true, true));
        scene.attachChild(filler[fillerNum].sprite);
    }

1 个答案:

答案 0 :(得分:0)

尝试在删除方法中使用unregisterTouchArea

也尝试在onUpdateThread

中使用它