模拟WeldJoint的问题

时间:2011-08-04 03:18:04

标签: android andengine

我已经在Andengine论坛上发布了这个问题,但是已经有一些关于这个话题的问题,有些人有回复,但我想知道的还没有回复。

我正在尝试像超级马里奥兄弟一样模拟玩家跳跃。首先,我使用一个简单的联系人监听器,当接触发生时,布尔值为false,但是接触发生在墙壁上,一切都是。所以,我现在正尝试使用WeldJoint将另一个小身体作为脚传感器附加到玩家的底部。但我无法做到这一点。 WeldJoint根本不会坚持下去。我尝试在更新线程上创建WeldJoint,没有。我尝试使用setposition方法用播放器更新传感器位置,但它只是将传感器定位在地面以下。 任何建议,将不胜感激。以下是我试图创建WeldJoint的方法。

播放器和传感器

mPlayer = new AnimatedSprite(100, 150, PlayerTextureRegion);
PlayerBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld,mPlayer,BodyType.DynamicBody, PLAYER_FIXTURE_DEF);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(mPlayer, PlayerBody, true, true));
mScene.getLastChild().attachChild(mPlayer);

final Shape mSensor= new Rectangle(mPlayer.getX()+4,mPlayer.getY()+mPlayer.getHeight(),10,4);
final Body SensorBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld,mSensor,BodyType.DynamicBody, SENSOR_FIXTURE_DEF);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(mSensor, SensorBody, true, true));
mScene.getLastChild().attachChild(mSensor);

mScene.registerUpdateHandler(new IUpdateHandler() {

        @Override
        public void reset() { }

        @Override
        public void onUpdate(final float pSecondsElapsed) {
             this.createJoint(PlayerBody,SensorBody);
             .......

联合方法

private void createJoint(Body Anchor, Body Sensor){
    final WeldJointDef join = new WeldJointDef();
    join.initialize(Anchor,Sensor,Anchor.getWorldCenter());
    this.mPhysicsWorld.createJoint(join);
}

1 个答案:

答案 0 :(得分:1)

好吧,我使用RevoluteJoint而不是WeldJoint,没有电机配置,现在工作正常。只需使用revoluteJointDef初始化两个实体,它们就像weldjoint一样被卡住。暂时我会使用revoluteJoint来制作两个身体。