为什么不采取行动登记?

时间:2012-06-27 20:02:32

标签: android andengine

我正在运行场景更新处理程序,以在触摸场景时增加精灵的比例。它应该在用户抬起手指时停止,但我的动作从未登记。精灵只是不断增加大小,直到再次触摸屏幕,此时旧精灵停止增长并且新精灵开始。有什么想法吗?

scene.registerUpdateHandler(new IUpdateHandler() {

        @Override
        public void reset() {         
        }

        @Override
        public void onUpdate(float pSecondsElapsed) {
            if(fillerNum>-1){
                if(filler[fillerNum].active){
                    mPhysicsWorld.unregisterPhysicsConnector(mPhysicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(filler[fillerNum].sprite));
                    mPhysicsWorld.destroyBody(filler[fillerNum].body);

                    filler[fillerNum].sprite.setScale(filler[fillerNum].scale+=pSecondsElapsed*.5);

                    filler[fillerNum].body = PhysicsFactory.createCircleBody(mPhysicsWorld, filler[fillerNum].sprite, BodyType.DynamicBody, FIXTURE_DEF);
                    mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(filler[fillerNum].sprite, filler[fillerNum].body, true, true));
                }
            }               
        }
    });






@Override
    public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
         if(this.mPhysicsWorld != null) {
                if(pSceneTouchEvent.isActionDown()) {
                    createFiller(pSceneTouchEvent.getX(), pSceneTouchEvent.getY());
                    return true;
                }
                if(pSceneTouchEvent.isActionUp()){
//Never executed
                    Log.e("Action UP", Boolean.toString(filler[fillerNum].active));
                    createStationaryFiller();
                }
            }
        return false;
    }

4 个答案:

答案 0 :(得分:0)

您正在注册更新处理程序!这意味着只要您的场景在Engine中注册,就会连续调用此onUpdate方法。它只会在你的fillerNum变得小于-1时停止。您需要查看填充编号的行为。

答案 1 :(得分:0)

您可以使用ZoomExample作为参考,当您触摸场景时,相机将平滑放大,您只需要使用代码替换缩放部分以放大精灵:

scene.setOnSceneTouchListener(new IOnSceneTouchListener() {
        @Override
        public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) {
            switch(pSceneTouchEvent.getAction()) {
                case TouchEvent.ACTION_DOWN:
                    //sprite.setScale() code
                    break;
                case TouchEvent.ACTION_UP:
                    //sprite.setScale() code
                    break;
            }
            return true;
        }
    });

答案 2 :(得分:0)

很多人都对这个问题感到失望!当你犯错误时,你会咂嘴! 检查您的onSceneTouchEvent()方法。你最后return false。 方法的返回值false告诉TouchListener用户正在执行的TouchEvent(向下操作)是INVALID!因此,TouchListener将停止注册所有以下事件(动作移动,动作......等等)!

这就是为什么永远不会执行第二个if语句中的代码! 您要做的就是将return false更改为return true,告诉touchlistener您希望注册以下事件。

这样一个愚蠢的问题却令人沮丧!

答案 3 :(得分:-1)

事实证明,我需要在创建我的精灵的onAreaTouched方法中添加一个isActionUp方法,并将其放在onSceneTouchEvent中。如果没有前者,精灵会继续增长,直到再添一次。如果没有后者,你可以将手指从精灵上拖下来,它仍然会增长。

相关问题