我正在尝试在PyBox2D中实现前轮转向,目前,我能够使其向左/右转动,但当角度达到零时(使汽车直行)时,无法停止它。
我的目标是在轮子的角度达到零或接近零的值时停止转向,而不是在开始时(有时当角度为零时,它们根本不会移动,并且如果可能,我希望它独立于按键盘上的键(将这两个嵌套的if语句从if keyboard_is_pressed(hotkey)部分移出并没有帮助)。
我希望我已经表达清楚了,非常感谢任何帮助
编辑 我尝试了答案中给出的解决方案,它有点起作用,但我试图改进它,现在我又卡住了,车轮转动,但当它们返回初始位置时就停止移动了。 问题之一可能是当我按“a”或“d”键时,我的变量self.ticking的变化量超过了1,因为我无法按键这么短的时间。
变量self.on_the_beginning等同于下面答案中的on_starting_race:
def control(self): # This makes control independent from visualisation
#Front left suspension: index 2
#Front right suspension: index 3
print(self.ticking)
if keyboard.is_pressed("a"):
self.suspensions[2].motorSpeed = -5
self.suspensions[3].motorSpeed = -5
self.ticking -= 1
if keyboard.is_pressed("d"):
self.suspensions[2].motorSpeed = 5
self.suspensions[3].motorSpeed = 5
self.ticking += 1
if self.ticking <= -3:
self.ticking = -3
self.on_the_beginning = True
elif self.ticking >= 3:
self.ticking = 3
self.on_the_beginning = True
if np.radians(-5) <= self.tires[2].wheel.angle <= np.radians(5) and self.on_the_beginning == True and self.ticking !=0:
self.suspensions[2].motorSpeed = 0
self.suspensions[3].motorSpeed = 0
self.tires[2].SetAngularVelocity = 0
self.tires[3].SetAngularVelocity = 0
self.ticking = 0
on_the_beginning = False