0

我正在运行一个场景更新处理程序以在触摸场景时增加我的精灵的比例。它应该在用户抬起手指时停止,但我的动作从未注册。精灵的大小不断增加,直到再次触摸屏幕,此时旧精灵停止生长,新精灵开始。任何想法为什么?

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

4 回答 4

0

您正在注册一个更新处理程序!这意味着只要您的场景已向 Engine 注册,就会持续调用此 onUpdate 方法。它只会在您的 FillerNum 小于 -1 时停止。您需要查看填充数的行为。

于 2012-06-27T20:27:25.977 回答
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;
        }
    });
于 2012-06-28T01:13:57.693 回答
0

很多人都为这个问题头破血流!当你犯错时,你会打自己!检查你的onSceneTouchEvent()方法。你return false到底。该方法的返回值 false 告诉 TouchListener 用户正在执行的 TouchEvent(action down) 是无效的!因此 TouchListener 将停止注册所有后续事件(动作移动,动作向上......等)!

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

如此愚蠢的问题却如此令人沮丧!

于 2012-06-28T04:37:12.790 回答
-1

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

于 2012-06-28T03:24:51.573 回答