【问题标题】:I want to make the character run faster if I press the key twice in a row in a game [closed]如果我在游戏中连续按两次键,我想让角色跑得更快[关闭]
【发布时间】:2020-10-12 12:55:49
【问题描述】:

这是我编写的代码的一部分。

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 坐标。 当我快速按两次左右键时,我想让我的角色跑得更快。 我不知道我的生活。如果你知道怎么做,我希望你告诉我。

【问题讨论】:

  • “快”是什么意思?什么规则可以告诉您按键是否足够靠近?然后什么?角色应该跑多快?角色应该一直以相同的速度奔跑直到……什么时候?您需要考虑实际需要发生什么的逻辑,然后它就会很简单:您只需要知道您必须记住哪些事情(例如“最后一次按键发生在多长时间前?”)以及什么处理这些信息。
  • 但这对 Stack Overflow 来说都不是一个好问题。如果您需要 design 方面的帮助,您可以尝试 gamedev.stackexchange.com,但您仍然需要更准确地了解您希望如何工作。
  • 很简单,(1)定义“快”; (2) 将按键状态保存到变量中; (3)研究如何获取系统时间;将其添加到您的按键处理程序中; (4) 当你得到左键或右键时,检查 (a) 是否与前一个相同; (b) 它是否与前一个“接近”?如果是这样,则酌情将运动参数增加到 10 或 -10。
  • 你可以找到一个例子here

标签: python pygame


【解决方案1】:

您必须使用键盘事件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()

【讨论】:

    猜你喜欢
    • 2013-10-30
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多