禁用2秒Pygame的密钥

时间:2018-04-27 08:35:46

标签: python pygame

我在pygame中编写游戏,我需要尝试并禁用三个输入键中的一个,持续2秒,每隔一段时间。现在我遇到了很多麻烦,并花了很多时间在互联网上寻找方法。这是' key_disable'代码到目前为止:

def key_disable(self):
    disabled_period = 2000
    timer = 0
    alarm = alert_font.render("ALERT", False, (255, 0, 0))
    x = randint(0, 2500)
    if x < 25:
        timer += 1
        if timer <= disabled_period:
            screen.blit(alarm, (74, 100))
            return False
    elif self.damage > 100:
        return False
    elif x > 26:
        return True

这在主事件循环中使用,如下所示:

keys_pressed = pg.key.get_pressed()
if rover.fuel > 0:
    MarsRover.key_disable(rover)
    if keys_pressed[pg.K_LEFT] and MarsRover.key_disable(rover) is True:
        rover.move_left()
    if keys_pressed[pg.K_RIGHT] and MarsRover.key_disable(rover) is True:
        rover.move_right()
    if keys_pressed[pg.K_SPACE] and MarsRover.key_disable(rover) is True:
        thrust = Thrust('thrust.png', rover.rect.left + 31, rover.rect.bottom - 12)
        thrust.rotated()
        rover.Start_Engine()
        screen.blit(thrust.image_rotated, thrust.rect)
        pg.display.update()

这个想法是,如果函数返回False,那么它将禁用控件2秒。但它只有在我禁用所有控件时才会工作,这似乎只是几毫秒,这不是我想要的。 我已经尝试了各种计时方法,例如模块(抱歉拼写)时间保持,例如:if (current_time - start_time) % 2 == 0。我尝试的方法似乎都没有用,我总是得到相同的结果。我能得到任何帮助吗? 感谢

注意:这是第一年的项目,要求这是最后的手段。

1 个答案:

答案 0 :(得分:3)

您目前正在函数内部定义timer。因此,每次调用函数时都会被遗忘并重新设置为0timer的值似乎也与实际时间无关:它是循环的0到4倍的随机更新,其中循环在繁忙时段可能需要超过1毫秒。更好的实施可能是:

class MarsRover(object):
    time_left_disabled = 0

    def disable(self):
        self.time_left_disabled = 2000

    def update_disabled(self, time_taken):
        # There are several ways to implement this, including if-statements
        self.time_left_disabled = max(self.time_left_disabled - time_taken, 0)

    def is_enabled(self):
        return (self.time_left_disabled <= 0)

    # your other code here

主循环的一部分如下:

# Check if the rover should be disabled again
if randint(0, 2500)  < 25:
    rover.disable()
else:
    rover.update_disabled(dt)

# Do some other stuff

# Check the keyboard input
if keys_pressed[pg.K_LEFT] and rover.is_enabled():
    rover.move_left()
if keys_pressed[pg.K_RIGHT] and rover.is_enabled():
    rover.move_right()
if keys_pressed[pg.K_SPACE] and rover.is_enabled():
    rover.thrust()

# some other stuff

# Ensure the FPS is not going crazy
dt = clock.tick(framerate)