我正在尝试在我的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,但这是有效的方法吗?也许有更好的选择?我将非常感谢您提供的任何提示!谢谢

最佳答案

您无需担心效率,检查角度的性能损失绝对可以忽略不计。我使用以下代码段测量了获取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的角度,而用393 ns即可获得与Body相同的角度。它也比使用联系侦听器简单得多。请注意,如果旋转精灵,则精灵的角度可以在(-360,+360)度之外。

10-01 22:39