Где я могу добавить элементы управления клавиатурой к спрайту в Pygame? - PullRequest
0 голосов
/ 15 января 2012

Когда я пытаюсь запустить эту простую игру.он говорит:

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

это из нижеследующего кода:

import pygame
import os, sys
import itertools
import pygame
from pygame.sprite import Sprite

cloud_background = pygame.image.load('clouds.bmp')
brick_tile = pygame.image.load('brick_tile.png')
plumbers = pygame.image.load('Mario_sideways_sprite_2xL.png')

pink = (255, 64, 64)
w = 640
h = 480
screen = pygame.display.set_mode((w, h))
running = 1

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)):
        # print(x,y)
        screen.blit(brick_tile, (x,y))


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

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

Но когда я добавляю переменную над "screen.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

Что мне нужно добавить / изменить, чтобы заставить работать эти простые элементы управления?

1 Ответ

1 голос
/ 15 января 2012

Это означает, что у вас есть две проблемы.Python видит первый и останавливается с исключением.

In:

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

M и N все еще не существуют при вызове.
Попробуйте, например:

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

В

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

ни один event не был определен.

Вы должны проверить учебник об аргументах / параметрах функции и локальных переменных.

yourфункция должна выглядеть так (например):

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()

отметьте это например

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...