2016-08-06 31 views
-2

Ich mache ein RPG in Python mit Pygame. Mein erster Schritt ist, meinen Hauptcharakter zu erschaffen und ihn bewegen zu lassen. Aber es ist nicht. Das ist mein Code:Warum bewegt sich mein Blitzer nicht in Pygame?

import pygame,random 
from pygame.locals import * 

pygame.init() 

black = (0,0,0) 
white = (255,255,255) 
red = (255,0,0) 
blue = (0,255,0) 
green = (0,0,255) 

global screen, size, winWidth, winHeight, gameExit, pressed, mainChar, x, y 
size = winWidth,winHeight = (1350,668) 
screen = pygame.display.set_mode(size) 
pygame.display.set_caption("RPG") 
gameExit = False 
pressed = pygame.key.get_pressed() 
mainChar = pygame.image.load("Main Character.png") 
x,y = 655,500 

def surroundings(): 
    stoneTile = pygame.image.load("Stone Tile.png") 
    stoneTileSize = stoneTile.get_rect() 

def move(): 
    if pressed[K_LEFT]: x -= 1 
    if pressed[K_RIGHT]: x += 1 
    if pressed[K_UP]: y -= 1 
    if pressed[K_DOWN]: y += 1 

def player(): 
    move() 

    screen.fill(black) 
    screen.blit(mainChar,(x,y)) 

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      gameExit = True 

    surroundings() 
    move() 
    player() 

    pygame.display.update() 

pygame.quit() 
quit() 

Bitte helfen Sie mir und erklären, warum es nicht funktioniert. Vielen Dank.

+0

Haben Sie versucht, diesen Code auszuführen? – Matthias

Antwort

1

Sie müssen Ihre gedrückt Variable in jedem Lauf aktualisieren

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      gameExit = True 

    pressed = pygame.key.get_pressed() 

    surroundings() 
    move() 
    player() 

    pygame.display.update() 

Die Werte x und y, die Sie innerhalb dieser Bewegung Funktion verwendet haben als lokale Variable behandelt werden, werden Sie den Interpreter zu sagen haben, dass sie sind globale Variablen

def move(): 
    global x,y 
    if pressed[K_LEFT]: x -= 1 
    if pressed[K_RIGHT]: x += 1 
    if pressed[K_UP]: y -= 1 
    if pressed[K_DOWN]: y += 1