我已经在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);
}
答案 0 :(得分:1)
好吧,我使用RevoluteJoint而不是WeldJoint,没有电机配置,现在工作正常。只需使用revoluteJointDef初始化两个实体,它们就像weldjoint一样被卡住。暂时我会使用revoluteJoint来制作两个身体。