我正在使用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);
}
答案 0 :(得分:0)
尝试在删除方法中使用unregisterTouchArea
也尝试在onUpdateThread
中使用它