我正在运行场景更新处理程序,以在触摸场景时增加精灵的比例。它应该在用户抬起手指时停止,但我的动作从未登记。精灵只是不断增加大小,直到再次触摸屏幕,此时旧精灵停止增长并且新精灵开始。有什么想法吗?
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;
}
答案 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中。如果没有前者,精灵会继续增长,直到再添一次。如果没有后者,你可以将手指从精灵上拖下来,它仍然会增长。