如何将关键命令添加到精灵?

问题描述:

我如何将关键命令添加到雪碧管道工?以下是我迄今的尝试,但按下向上按钮时没有结果。我如何设置ud,并且当按钮向上按钮被按下时,ld改变10?如何将关键命令添加到精灵?

pink = (255, 64, 64) 
w = 640 
h = 480 
ld = 0 
ud = 0 
screen = pygame.display.set_mode((w, h)) 
running = 1 
def key_event(self, event): 

     if event.key == pygame.K_UP: 
      ud - 10 
      ld + 10 
def show_sprites(): 
    screen.blit(plumbers,(50+ld ,100+ud)) 
def setup_background(): 
    screen.fill((pink)) 
    screen.blit(cloud_background,(0,0)) 
    brick_width, brick_height = brick_tile.get_width(), brick_tile.get_height() 
    for x,y in itertools.product(range(0,640,brick_width), 
           range(390,480,brick_height)): 
     screen.blit(brick_tile, (x,y)) 

while running: 

    setup_background() 
    event = pygame.event.poll() 
    show_sprites() 
    pygame.display.flip() 

    if event.type == pygame.QUIT: 
     sys.exit() 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
     elif event.type == pygame.KEYDOWN: 
      w.key_event(event) 

删除线

event = pygame.event.poll() 

if event.type == pygame.QUIT: 
    sys.exit() 

问题第一次出现是,无论投票和得到采取事件关闭事件队列,所以你正在失去的关键了投票中的事件。

换句话说发生的事情是:

  1. 您按向上键
  2. 这就将keydown事件到队列
  3. 调用事件= pygame.event.poll()
  4. 这返回KEYDOWN事件
  5. 你检查看看这是否退出,它不是你继续
  6. 你调用pygame.event.get(),但队列是现在空的,所以for循环没有得到进入

示例代码:

import pygame 
pink = (255, 64, 64) 
w = 640 
h = 480 
ud = 0 
ld = 0 
screen = pygame.display.set_mode((w, h)) 
running = 1 
def key_event(event): 
    global ud 
    if event.key == pygame.K_UP: 
     ud -= 10 
     print 'ud',ud   

def setup_background(): 
    screen.fill((pink)) 

while running: 

    setup_background() 
    pygame.display.flip() 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
     elif event.type == pygame.KEYDOWN: 
      key_event(event) 
+0

我试过了,并得到: 'AttributeError的:“诠释”对象有没有属性“key_event''这是refrence到:'w.key_event(event)'我会用什么替换事件? – enrique2334 2012-03-31 20:32:23

+0

我认为这是因为在你的代码中,w是一个整数,但你试图将它作为key_event作为成员函数的对象使用。我已经添加了我用于答案的代码版本(它对key_event的调用方式进行了一些更改) – 2012-03-31 20:38:17

+0

因此,这给了我这个错误'TypeError:key_event()只需要2个参数(给出1)'我怎样才能添加第二个参数/第二个参数会做什么。 – enrique2334 2012-03-31 20:44:02