Java 安卓游戏&x27;杠杆&x27;-box2D

Java 安卓游戏&x27;杠杆&x27;-box2D,java,android,box2d,andengine,Java,Android,Box2d,Andengine,我正试图在我的android游戏中实现“杠杆”,下面的图片展示了我想要什么,展示了它是如何工作的: (一) (二) 我通过使用joint实现了它的基本功能: final RevoluteJointDef revoluteJointDef = new RevoluteJointDef(); revoluteJointDef.initialize(anchorBody, movingBody, anchorBody.getWorldCenter()); revoluteJointDef.enab

我正试图在我的android游戏中实现“杠杆”,下面的图片展示了我想要什么,展示了它是如何工作的:

(一)

(二)

我通过使用joint实现了它的基本功能:

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);   
它可以工作,我可以在左/右方向移动杠杆杆,而且应该不会超过适当的角度,所以这部分就完成了。但现在我在寻找一种方法,当移动这个杠杆后执行动作时(例如打开一些门)

下面是我的基本想法,如何通过创建棍子的身体来检查棍子的哪个部分被玩家(左或右)触摸过:

解释一下,通过添加两个传感器,一个在左侧,一个在右侧,所以在contact listener中,我会检查哪一侧被触碰过


但我仍然不知道如何检查是否应该执行操作,我知道我可以在每次更新时检查斗杆角度是否为40或-40,但这是有效的方法吗?或者有更好的?我将非常感谢任何提示!谢谢

你提到的两种方法都会奏效,只是你觉得哪个更方便而已。您似乎已经理解了实现,所以我认为没有人能比说“哪个更适合您”更好地回答这个问题

在杠杆范围的每一端放置一个传感器,并使用接触式监听器检测杠杆何时接触到传感器,这是最“正确”的方法。当操纵杆接触传感器和传感器停止接触时,它可以方便地为您提供事件,但设置起来需要做更多的工作


在每个时间步后检查关节角度也可以,但是如果要检测开始/结束触摸“事件”,则需要将角度与上一步中的值进行比较。如果你想要一个可以提供连续值的杠杆(例如,其他物体的速度控制),而不是一个简单的开/关开关,那么你最好使用这种方法。

你不必担心这里的效率,检查角度的性能损失是完全可以忽略的。我使用以下代码片段测量了获取精灵和身体角度所需的时间:

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");
双重测试;
双重测试启动;
testStart=System.nanoTime();
对于(int i=0;i