如何在pygame中为精灵添加键盘控制?

2024-05-18 23:07:52 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试着运行这个简单的游戏。上面写着:

    screen.blit(plumbers,(50 + M ,337 + N))
UnboundLocalError: local variable 'M' referenced before assignment

以下代码为:

^{pr2}$

但当我在上面加上变量时”屏幕.blit“所以看起来是这样的:

def show_sprites():
    if event.key == pygame.K_UP:
        M = 1
        N = 0
    screen.blit(plumbers,(50 + M ,337 + N))

我得到这个错误:

Traceback (most recent call last):
  File "C:\Users\Enrique\Dropbox\GAMEZ_PYGAME\gamez.py", line 36, in <module>
    show_sprites()
  File "C:\Users\Enrique\Dropbox\GAMEZ_PYGAME\gamez.py", line 28, in show_sprites
    if event.key == pygame.K_UP:
NameError: global name 'event' is not defined

要使这些简单的控件正常工作,我需要添加/更改什么?在


Tags: keyeventifshowscreenpygameusersfile
1条回答
网友
1楼 · 发布于 2024-05-18 23:07:52

这意味着你有两个问题。Python首先看到一个异常。在

在:

def show_sprites():
    screen.blit(plumbers,(50 + M ,337 + N))
    .......

M和N在调用时仍然不存在。
例如:

^{pr2}$

def show_sprites():
    if event.key == pygame.K_UP:

未定义event。在

您应该查看有关函数参数/参数和局部变量的教程。在

您的函数应该如下所示(例如):

def show_sprites(M, N, event):

或者最有可能:

def show_sprites(event):
    if event.key == pygame.K_UP:
        M = 1
        N = 0
    else:
        M = 0  # ? up to you
        N = 0  # ?
    screen.blit(plumbers,(50 + M ,337 + N))

有:

while running:
    setup_background()
    event = pygame.event.poll()
    if event.type == pygame.QUIT: sys.exit()
    show_sprites(event)
    move()

最后,此代码将向函数发送所有类型的事件,因此您应该筛选它们:

if event.type == pygame.QUIT:
    sys.exit()
elif event.type == pygame.KEYDOWN:
    show_sprites(event)
    move()

例如,选中this

相关问题 更多 >

    热门问题