我正在尝试在我的 Android 游戏中实现“杠杆”,下面的图片显示了我想要什么,并显示了它是如何工作的:
1)
2)
我设法通过使用联合来完成它的基本操作:
final RevoluteJointDef revoluteJointDef = new RevoluteJointDef();
revoluteJointDef.initialize(anchorBody, movingBody, anchorBody.getWorldCenter());
revoluteJointDef.enableLimit = true;
revoluteJointDef.upperAngle = MathUtils.degToRad(40);
revoluteJointDef.lowerAngle = MathUtils.degToRad(-40);
physicsWorld.createJoint(revoluteJointDef);
它可以工作,我可以向左/右方向移动操纵杆,并且应该不能超过适当的角度,所以这部分已经完成。但现在我正在寻找一种方法,当移动此杠杆后执行操作时(例如打开一些门/大门)
这是我的基本想法,如何通过以下方式创建棍子的主体来检查玩家触摸了棍子的哪一部分(左或右):
所以解释一下,通过添加 2 个传感器,一个在左侧,一个在右侧,因此在接触监听器中我会检查哪一侧已被触摸。
但我仍然不知道如何检查是否应该执行操作,我知道如果摇杆角度是 40 或 -40,我可以检查每个更新,但这是有效的方法吗?或者也许有更好的?我将非常感谢任何提示!谢谢
最佳答案
这里你不需要担心效率,检查角度的性能损失绝对可以忽略不计。我使用以下代码 fragment 测量了获取 Sprite 和 Body 的角度所需的时间:
double testEnd;
double testStart;
testStart = System.nanoTime();
for (int i = 0; i<1000000; i++) {doStuff()}
testEnd = System.nanoTime();
Log.v("speed test", "it takes "+ (testEnd - testStart)/1000000 + " nanoseconds");
因此,在 Desire Z 上,只需 157 ns 即可找到 Sprite 的角度,而找到 Body 的角度只需 393 ns。它也比使用联系监听器简单得多。顺便说明一下,如果旋转 Sprite , Sprite 的角度可能会超出 (-360, +360) 度。
关于java - Android 游戏,0x104567910 - box2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10774415/