2011-05-04 80 views
1

问题出在这里:我有一个图形,它既有精灵也有正文。这个数字是可拖动的,并且在触摸事件的Action Down操作中,我需要断开连接,以便在被拖动时不会与其他物体发生碰撞。然后在Action Up身体应该连接到精灵。我已经定义了两种方法来解决这个问题。AndEngine:注册和取消注册物理连接器时出现问题

protected void connectBody() { 
      if (!bodyConnected) { 
        connector = new PhysicsConnector(mSprite, mBody, true, true); 
        mPhysicsWorld.registerPhysicsConnector(connector); 
        bodyConnected = true; 
      } 
    } 

protected void disconnectBody() { 
      if (bodyConnected) { 
        if (connector != null) { 
          mPhysicsWorld.unregisterPhysicsConnector(connector); 
        } 
        bodyConnected = false; 
      } 
    } 

但是,这是行不通的。当我拖动它时,它会与其他数字相撞。任何人都可以帮我解决这个问题吗?提前致谢。

回答

3

几天前我玩过它,这就是我所做的拖动对象。

public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final ITouchArea pTouchArea,final float pTouchAreaLocalX, final float pTouchAreaLocalY) { 
     if(pSceneTouchEvent.isActionDown()) { 
      final AnimatedSprite area = (AnimatedSprite) pTouchArea; 
      PhysicsConnector tPhysicsConnector; 
      tPhysicsConnector = physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(area); 
      physicsWorld.unregisterPhysicsConnector(tPhysicsConnector); 
      physicsWorld.destroyBody(tPhysicsConnector.getBody()); 

     } 
2

我遇到这个发帖面临着同样的问题,迷迷糊糊的,虽然lordraiders的回答让我在正确的轨道上,我发现了一个更好的解决方案,并决定将它张贴在这里。该解决方案不需要销毁/重新创建任何机构。只要做到以下几点:

if(pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN){ 
    physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(self).getBody().setActive(false); 
} 

if(pSceneTouchEvent.getAction() == MotionEvent.ACTION_UP){ 
    physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(self).getBody().setActive(true); 
} 

所以这样你只需设置对象的活动状态开/关和自由拖动对象没有物理力量打你拖动操作。您可能还想重置/清除所有施加在对象上的当前力,否则当您放下对象时,它将恢复先前从事的任何动作。例如,如果您拿起一个滚下山的球,当您释放它会开始移动,好像下山一样,因为这些力量在你残废肉体时被保存在物体的状态中。你可以这样做:

physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(self).getBody().setAngularVelocity(0); 

physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(self).getBody().setLinearVelocity(0, 0);