【问题标题】:How do I make a game object move continuously as long as the key is pressed?只要按下键,如何使游戏对象连续移动?
【发布时间】:2016-01-20 04:25:34
【问题描述】:

我正在尝试让游戏object(这里是欢迎文本)移动,只要按下键盘上的key。但在我的这段代码中,

import pygame , sys
from pygame.locals import *

pygame.init()

WHITE = (255 , 255 , 255)
RED   = (255 , 0 , 0)

DISPLAYSURF = pygame.display.set_mode((800 , 400))
pygame.display.set_caption('Welcome Tanks')

#render(text, antialias, color, background=None)
fontObj = pygame.font.SysFont('serif' , 40)
text = fontObj.render('Welcome Folks' , True , RED )

x = 150
y = 29

while True:
    DISPLAYSURF.fill(WHITE)
    DISPLAYSURF.blit(text ,(x , y))   
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit(0)
        elif event.type == KEYDOWN or event.type == KEYUP:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit(0)
            elif event.key == K_DOWN:               
                y += 15
            elif event.key == K_UP:
                y -= 15
            elif event.key == K_RIGHT:
                x += 14
            elif event.key == K_LEFT:
                x -= 15
            else:
                x = 150
                y = 29
    pygame.display.update()

即使长时间连续按下key,对象也只会移动一次。换句话说,对象仅在按下键盘按钮时改变其位置一次。我希望它在我按住键时连续移动。

我应该寻找哪个事件而不是event.KEYDOWN

【问题讨论】:

    标签: python python-2.7 pygame


    【解决方案1】:
     keyState = pygame.key.get_pressed()
    

    声明,然后你使用keystate:

     if KeyState()[K_DOWN]:
             y += 15
    

    你可以试试:

    if key.get_pressed()
        down = True
    
    while down = True:
        y+= 15
    

    然后获取FPS 时钟,这样它就不会只流过screen

    【讨论】:

      【解决方案2】:

      我建议你使用key.get_pressed(),例如

      while True:
          DISPLAYSURF.fill(WHITE)
          DISPLAYSURF.blit(text ,(x , y))   
          for event in pygame.event.get():
              if event.type == QUIT:
                  pygame.quit()
                  sys.exit(0)
              elif event.type == KEYDOWN or event.type == KEYUP:
                  if event.key == K_ESCAPE:
                      pygame.quit()
                      sys.exit(0)
      
          if  pygame.key.get_pressed()[K_LEFT]:
              x -= 15
      
          if  pygame.key.get_pressed()[K_RIGHT]:
              x += 14
      
          if  pygame.key.get_pressed()[K_UP]:
              y -= 15
      
          if  pygame.key.get_pressed()[K_DOWN]:
              y += 15
          pygame.display.update()
      

      pygame.key.get_pressed()

      返回代表每个状态的布尔值序列 键盘上的键。使用键常量值来索引数组。一种 真值表示该按钮被按下。

      用这个函数获取按钮列表不是 处理来自用户的文本输入的正确方法。你没有办法知道 按键的顺序,快速按键可以完全 在两次调用 pygame.key.get_pressed() 之间没有被注意到。还有 无法将这些推送的键翻译成完全翻译的 字符值。查看事件队列上的 pygame.KEYDOWN 事件 这个功能。

      你也可以看看doc

      【讨论】:

      • 谢谢兄弟!!但是你能解释一下 get_pressed() 函数,它还告诉我没有定义关键变量。
      • 试试这个from pygame.locals import *,或pygame.key.get_pressed()
      • 哦,是的!我现在清楚地明白了一切。谢谢老兄!
      • 不客气 :) 查看文档,它非常清晰有用
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多