python - 我改变了速度以制作破折号,但想在这里添加一些破折号长度限制
问题描述
因此,如果我同时按“左键”或“右键”同时按“L shift”,我会让我的角色(玩家)更快地改变它的速度。问题是,我想让这个“破折号”在达到我设定的极限时停止。我希望我的角色不要一次冲刺超过 400 次。有什么可能的方法我可以用..吗?因为我尝试了很多,但我仍然找不到任何有效的方法。这是设置破折号的主循环的一部分。char 在循环之前定义。
运行时:
clock.tick(20)
for event in pygame.event.get():
keys = pygame.key.get_pressed()
mods = pygame.key.get_mods()
if event.type == pygame.QUIT:
run = False
elif keys[pygame.K_LEFT] and mods & pygame.KMOD_LSHIFT or keys[pygame.K_RIGHT] and mods & pygame.KMOD_LSHIFT:
print("pressed: SHIFT")
char.vel = 20
#I wanna set dash limit to 400px but evry try sitll is all failled..
else:
char.vel = 5
解决方案
对破折号使用实时毫秒限制相当容易。然后,您可以将时间校准到您希望破折号更长的时间。
在下面的代码中,我将此时间限制设置为DASH_TIME_LIMIT
. 播放器char
有一个名为 的新成员变量char.dash_finish
。当破折号开始时,我们将破折号的时间限制放在这里。然后在主循环中,我们检查每一帧以查看当前时间是否在此时间之后,这表明时间限制已过期。
要开始冲刺,首先我们检查它们是否已经冲刺。然后dash_finish
时间只是“现在”加上未来的几毫秒。
DASH_TIME_LIMIT = 700 # milliseconds
for event in pygame.event.get():
keys = pygame.key.get_pressed()
mods = pygame.key.get_mods()
if event.type == pygame.QUIT:
run = False
elif keys[pygame.K_LEFT] and mods & pygame.KMOD_LSHIFT or keys[pygame.K_RIGHT] and mods & pygame.KMOD_LSHIFT:
print("pressed: SHIFT")
if ( char.dash_finish == None ): # Not already dashing?
char.vel = 20
char.dash_finish = pygame.time.get_ticks() + DASH_TIME_LIMIT
# else:
# char.vel = 5
# has the dash-time expired?
time_now = pygame.time.get_ticks()
if ( char.dash_finish == None ):
char.vel = 5
elif ( time_now > char.dash_finish ):
# dash has now finished
char.dash_finish = None
char.vel = 5
clock.tick(20)
使用时间限制比计算玩家每帧遍历的像素数更容易。
推荐阅读
- reactjs - redux 工具包实体适配器和原子更新
- python - 如何将 Airflow ExternalTaskSensor 用作 SmartSensor?
- ethereum - 错误!无法生成合约字节码和 ABI
- webgl - Codename One BrowserComponent 可以显示 WebGL 吗?
- kubernetes - 如何增加 GKE 临时存储?
- javascript - Ajax POST 从 ashx 页面返回未定义的错误
- r - Windows上的R Plotly Orca问题没有将绘图保存为png
- typescript - 使用 @nomiclabs/hardhat-waffle 实现夹具
- json - 是否有允许用户编写转换有效负载的业务规则的工具/库
- javascript - Google Map Clusterer 大 gridSize 选项问题