如何将关键命令添加到精灵?
问题描述:
我如何将关键命令添加到雪碧管道工?以下是我迄今的尝试,但按下向上按钮时没有结果。我如何设置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()
问题第一次出现是,无论投票和得到采取事件关闭事件队列,所以你正在失去的关键了投票中的事件。
换句话说发生的事情是:
- 您按向上键
- 这就将keydown事件到队列
- 调用事件= pygame.event.poll()
- 这返回KEYDOWN事件
- 你检查看看这是否退出,它不是你继续
- 你调用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)
我试过了,并得到: 'AttributeError的:“诠释”对象有没有属性“key_event''这是refrence到:'w.key_event(event)'我会用什么替换事件? – enrique2334 2012-03-31 20:32:23
我认为这是因为在你的代码中,w是一个整数,但你试图将它作为key_event作为成员函数的对象使用。我已经添加了我用于答案的代码版本(它对key_event的调用方式进行了一些更改) – 2012-03-31 20:38:17
因此,这给了我这个错误'TypeError:key_event()只需要2个参数(给出1)'我怎样才能添加第二个参数/第二个参数会做什么。 – enrique2334 2012-03-31 20:44:02