我目前正在关注一些教程来介绍 andEngine 和 box2d,我想拖动一个对象(附加到身体的精灵),同时它正在弹跳(它已注册到物理世界)。
我想拖动,这样我就可以看到我的角色在移动。只有当我将代码注释如下(我正在注册物理连接器的部分)时,它才有效。如果我取消注释,一切都会正常工作(例如,即使我设置了其他属性),除了 setPosition!- 我确定代码正在进入 ACTION_MOVE 案例
问题1:为什么这种方法不起作用?- 也许我必须拖动身体而不是精灵?
问题 2:如何在 onAreaTouched 内引用 body 并在其中进行操作?- 我尝试了许多不同的方法,但它似乎只在声明精灵时必须创建 onAreaTouch。
参考:http : //stuartmct.co.uk/2012/07/18/andengine-touch-events-with-sprites-and-shapes/和AndEngine Book
Sprite sPlayer = new Sprite(CAMERA_WIDTH / 2, CAMERA_HEIGHT / 2,
playerTextureRegion,
this.mEngine.getVertexBufferObjectManager()) {
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
Log.i(this.getClass().getName(), "area touched");
switch (pSceneTouchEvent.getAction()) {
case TouchEvent.ACTION_DOWN:
break;
case TouchEvent.ACTION_UP:
break;
case TouchEvent.ACTION_MOVE:
this.setPosition(pSceneTouchEvent.getX() - this.getWidth()
/ 2, pSceneTouchEvent.getY() - this.getHeight() / 2);
break;
}
return true;
}
};
FixtureDef PLAYER_FIX = PhysicsFactory.createFixtureDef(10.0f, 0.75f,
0.0f);
// apply all forces, collisions to body - Dynamic
Body body = PhysicsFactory.createCircleBody(physicsWorld, sPlayer,
BodyType.DynamicBody, PLAYER_FIX);
以下代码不允许我设置 Sprite 的位置:
/*
// relate to collisions after adding to scene
physicsWorld.registerPhysicsConnector(new PhysicsConnector(sPlayer,
body, true, true));
*/
this.scene.registerTouchArea(sPlayer);
this.scene.setTouchAreaBindingOnActionDownEnabled(true);
this.scene.attachChild(sPlayer);