我是andengine甚至是Android游戏开发的新手。我已经创建了精灵作为一个盒子。现在可以使用此编码来拖动此框。它工作正常。
但我想要多点触控,我想在那个盒子里用2个手指旋转一个精灵,甚至它应该是可拖动的。 .... PLZ帮助某人...
我正在尝试这么多天,但不知道。
final float centerX = (CAMERA_WIDTH - this.mBox.getWidth()) / 2;
final float centerY = (CAMERA_HEIGHT - this.mBox.getHeight()) / 2;
Box= new Sprite(centerX, centerY, this.mBox,
this.getVertexBufferObjectManager()) {
public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
float pTouchAreaLocalX, float pTouchAreaLocalY) {
this.setPosition(pSceneTouchEvent.getX() - this.getWidth()/ 2,
pSceneTouchEvent.getY() - this.getHeight() / 2);
float pValueX = pSceneTouchEvent.getX();
float pValueY = CAMERA_HEIGHT-pSceneTouchEvent.getY();
float dx = pValueX - gun.getX();
float dy = pValueY - gun.getY();
double Radius = Math.atan2(dy,dx);
double Angle = Radius * 360 ;
Box.setRotation((float)Math.toDegrees(Angle));
return true;
}
答案 0 :(得分:1)
确保您在游戏中启用了多点触控功能。您可以使用onLoadEngine
方法中MultiTouchExample中使用的相同代码。
该算法非常简单,类似于您在此处发布的内容。
onAreaTouched
方法中最多2个指针ID。 (您可以通过调用pSceneTouchEvent.getPointerID()
获取指针ID。)pTouchAreaLocalX
和pTouchAreaLocalY
)。ACTION_DOWN
),保存初始角度。 (Math.tan2(pointer1Y - pointer2Y, pointer1X - pointer2X)
)。ACTION_UP
,就在指针的每个ACTION_MOVE
事件中更新新角度,并获得角度delta(delta = currentAngle - initialAngle
)。然后拨打setRotation(Math.toDegrees(delta))
。要使用2个指针拖动精灵,你需要移动你的精灵,每个指针移动的距离越小。例如,如果:
pointer1.dX = 50;
pointer1.dY = -20;
pointer2.dX = 40;
pointer2.dY = -10;
精灵应该在X轴上移动+40个单位,在Y轴上移动-10个单位。