我的身体必须在触摸时旋转。不需要线性运动,它们只需要沿轴点旋转。
我正在使用setTransform在onAreaTouched事件中旋转主体。像这样:
body.setTransform(body.getPosition(),((float)Math.atan2(-(pSceneTouchEvent.getX() - startX), (pSceneTouchEvent.getY() - startY))));
这是在“移动”动作中完成的。 StartX和StartY表示起始X和Y点。在上面的代码行之后重置它们,如:
startX = pSceneTouchEvent.getX();
startY = pSceneTouchEvent.getY();
如果触摸移动的速度很慢,代码会旋转身体,但在旋转时身体会抖动。通过更快的触摸移动,身体旋转顺畅。
如何使身体旋转平滑(触摸动作是否缓慢)?
答案 0 :(得分:0)
使用触摸事件设置目标角度。然后使用onUpdate来缓解目标角度。
这是一段代码,可以简化你的轮换。我可能有错误,因为我在这里的框中输入了它,但你应该能够看到我的方法。作为额外的奖励,Math.atan()的东西将确保它总是转向触摸事件的最短方向跳过一点:
// SET THIS IN YOUR TOUCH EVENT
// Rotate towards Touch.
Float RADIANS_TO_DEGREES = 57.2957795;
Float DEGREES_TO_RADIANS = 0.0174532925;
Float EASE_AMOUNT = 0.05;
PointF p = new PointF(body.x, body.y); // Save this as instance var so it persists.
p.x -= pSceneTouchEvent.getX();
p.y -= pSceneTouchEvent.getX();
// THIS PART GOES IN THE ON UPDATE
Float originalrotation = body.getRotation() * DEGREES_TO_RADIANS;
Float targetrotation = Math.atan2(p.y, p.x);
Float rotationdifference = Math.atan2(Math.sin(targetrotation-originalrotation),Math.cos(targetrotation-originalrotation));
// To ease, we apply only a percentage of the rotation needed.
circle.rotation += rotationdifference*RADIANS_TO_DEGREES* EASE_AMOUNT;