python - 如果我在游戏中连续按两次键,我想让角色跑得更快
问题描述
这是我编写的代码的一部分。
enter code here
import pygame
from pygame.locals import QUIT, KEYDOWN, KEYUP,\
K_LEFT, K_RIGHT, K_DOWN, K_SPACE, K_UP
pygame.init()
pygame.key.set_repeat(30, 30)
while True:
to_x1 = 0
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.quit()
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
to_x1 = -5
if keys[pygame.K_RIGHT]:
to_x1 = 5
CHARIC_1.xpos1 = CHARIC_1.xpos1 + to_x1
CHARIC_1.xpos1 是角色的 x 坐标。当我快速按两次左右键时,我想让我的角色跑得更快。我不知道我的生活。如果你知道怎么做,我想让你告诉我。
解决方案
您必须使用键盘事件KEYDOWN
(请参阅pygame.event
)而不是pygame.key.get_pressed()
. 用于pygame.time.get_ticks()
获取自pygame.init()
调用以来的毫秒数。存储按键被按下的时间。如果在一定时间内按两次按钮,则增加速度:
key_time = 0
fast_key_time = 500 # 0.5 seconds
while True:
current_time = pygame.time.get_ticks()
# [...]
for event in pygame.event.get():
# [...]
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
if to_x1 == -5 and current_time < key_time + fast_key_time:
to_x1 = -10
else:
to_x1 = -5
key_time = current_time
if event.key == pygame.K_RIGHT:
if to_x1 == 5 and current_time < key_time + fast_key_time:
to_x1 = 10
else:
to_x1 = 5
key_time = current_time
CHARIC_1.xpos1 = CHARIC_1.xpos1 + to_x1
# [...]
最小的例子:
import pygame
pygame.init()
window = pygame.display.set_mode((500, 500))
clock = pygame.time.Clock()
rect = pygame.Rect(0, 0, 20, 20)
rect.center = window.get_rect().center
to_x1 = 0
key_time = 0
fast_key_time = 500 # 0.5 seconds
run = True
while run:
current_time = pygame.time.get_ticks()
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
if to_x1 == -5 and current_time < key_time + fast_key_time:
to_x1 = -10
else:
to_x1 = -5
key_time = current_time
if event.key == pygame.K_RIGHT:
if to_x1 == 5 and current_time < key_time + fast_key_time:
to_x1 = 10
else:
to_x1 = 5
key_time = current_time
rect.x += to_x1
rect.centerx = rect.centerx % window.get_width()
rect.centery = rect.centery % window.get_height()
window.fill(0)
pygame.draw.rect(window, (255, 0, 0), rect)
pygame.display.flip()
推荐阅读
- python-3.x - python中的多处理问题[OSError:[WinError 6]无效的驱动程序]
- c# - 在 EnumDropDownListFor / ListBoxFor 上绑定多个值
- ios - Amazon iOS 应用程序如何实时搜索产品?
- sql-server - AWS DMS 复制实例无法连接本地机器 SQL Server 测试端点
- javascript - console.log returning undefined in for loop
- oracle - Spark Scala计数功能没有响应
- java - Tomcat 7 - 忽略数据库连接池参数 (DBCP)
- c++ - Optimizing OpenGL rendering
- android - 如何设置微小的通知图标徽章
- java - 为“团队工件”视图中的组件启用“属性”菜单选项