python - 如何将值更改为零但不在循环的第一次迭代中
问题描述
我正在尝试在 PyBox2D 中实现前轮的转动,目前,我能够使其向左/向右转动,但当角度达到零时我无法停止它(使汽车直行)
我的目标是在车轮的角度达到零或接近于零的值时停止转动,但不是在开始时(有时当角度为零时,它们根本不会移动,如果可能的话,我想让它独立于按下键盘上的键(将这两个嵌套的 if 语句移出 if keyboard_is_pressed(hotkey) 部分没有帮助
我希望我说清楚了,非常感谢你的帮助
编辑我试图实施答案中给出的解决方案,它有点工作,但我试图改进它,现在我又被卡住了,轮子转动,但是当它们返回到初始位置时,它们停止移动。问题之一可能是当我按下“a”或“d”键时,我的变量 self.ticking 变化不止一个,因为我无法在这么短的时间内按下该键。
变量 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
解决方案
如果我理解正确,你可以有一个变量,比如 on_starting_race,设置为 false,然后检查它是否高于设定的数字(比如,当它高于 10 时,你知道比赛已经开始并且汽车移动到至少几秒钟),然后将该值更改为 True,现在添加一条 if 语句以确定该值是否接近 0(例如 val<5)并且 on_starting_race 为 True。可能有一种更优雅的方式,但这非常简单(假设您每帧或一段时间检查汽车的状态)。
推荐阅读
- html - 我设置了背景图像,但除非我以像素或 vh 为单位指定高度,否则它不会显示
- java - 完成场景后如何自定义 Allure 报告以分别创建诱惑结果(XML)(黄瓜 - java)
- r - R Plotly hooverinfo - 调整数字格式以显示千位分隔符
- sql - 在 PostgreSQL 中将 JSONB 列展平为字符串
- javascript - 如果我更新 svg 类型的文件,那么如何从中获取 svg 字符串?
- angular - 即使我滚动出视图,如何覆盖离子虚拟滚动以始终保持初始值设置
- c++ - cmake target_link_libraries 导致目标中的编译器错误
- javascript - 单击按钮 AJAX 方式获取 ID
- mule - 如何创建键值对窗口以在 mule 自定义连接器中添加动态属性,目前使用 mule 3
- reactjs - 如何设置本地环境以在 https 上运行