1

问题是:我有一个图,它既有精灵又有身体。这个数字是可拖动的,在触摸事件的 Action Down 上,我需要断开主体,以便在拖动时不会与其他主体发生碰撞。然后在 Action Up 身体应该连接到精灵。我定义了两种方法来解决这个问题。

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;
            }
    }

但是,这不起作用。当我拖动图形时,它会与其他图形发生碰撞。谁能帮我解决这个问题?提前非常感谢。

4

2 回答 2

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()); 

        }
于 2011-05-05T22:05:15.907 回答
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);
于 2011-07-21T08:19:29.343 回答