2016-07-06 8 views
1

Ich bin noch neu in Python und habe mit Pygame gestartet. Ich mache ein endloses Läuferspiel, aber ich habe ein Problem mit meinem Laufzyklus. Hier ist mein Code:Basic Running Cycle Nicht funktioniert

import pygame 
import sys 
from pygame.locals import * 
pygame.init() 
clock = pygame.time.Clock() 
clock2 = pygame.time.get_ticks() 
screen = pygame.display.set_mode((640, 575)) 
bgx = 0 
bgx2 = -800 
scroll = 10 
pose = 1 
background = pygame.image.load("images/background2.png").convert_alpha(); 
player = pygame.image.load("images/character1.png").convert_alpha(); 
screen.blit(background, (0, 0)) 
def draw_screen(x): 
screen.blit(background, (x, 0)) 
def draw_screen2(x2): 
screen.blit(background, (x2, 0)) 
def draw_player(pose): 
    if pose == 1: 
     player = pygame.image.load("images/character1.png").convert_alpha(); 
     screen.blit(player, (0, 0)) 
    elif pose == 2: 
     player = pygame.image.load("images/character2.png").convert_alpha(); 
     screen.blit(player, (0, 0)) 
    elif pose == 3: 
     player = pygame.image.load("images/character3.png").convert_alpha(); 
     screen.blit(player, (0, 0)) 
    elif pose == 4: 
     player = pygame.image.load("images/character2.png").convert_alpha(); 
     screen.blit(player, (0, 0)) 
def set_poses(pose): 
    if pose == 1: 
     pose = 2 
    if pose == 2: 
     pose = 3 
    if pose == 3: 
     pose = 4 
    if pose == 4: 
     pose = 1 

while True: #Loop 
    clock2 = pygame.time.get_ticks() 
    #Quitting Function 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
      quit() 
    clock.tick(50) 
    #Screen Scrolling 
    if bgx != 800: 
     bgx += scroll 
    else: 
     bgx = 0 
    if bgx2 != 0: 
     bgx2 += scroll 
    else: 
     bgx2 = -800 
    #Drawing Items 
    draw_screen2(bgx2) 
    draw_screen(bgx) 
    draw_player(pose) 
    if clock2%6 == 0: 
     set_poses(pose) 
    pygame.display.update() 

So wird der Bildschirm scrollen, und mein Charakter erscheint, aber er bleibt in seiner ersten Position (Frame, denke ich.) An der Stelle, wo es set_poses(pose) läuft Ich habe versucht, die es auch etwas drucken direkt vor Einstellung der Pose, die es getan hat, aber es stellt nicht die Pose ein. Ich habe versucht, die Pose zu drucken, und es hat sich gezeigt, dass sich die Posen nicht geändert haben. Also, ja, ich habe mein Problem gefunden, aber ich kann nicht für das Leben von mir eine Lösung finden.

+0

Btw. lerne mehr über [MCVE], _nicht das Setzen der Pose_ kann ohne Pygame und all deine Code Logik reproduziert werden. –

Antwort

1

Anstatt durch Verweis übergeben versuchen - das ist, was Sie tun, versuchen, etwas wie folgt aus:

def set_pose(pose): 
    if pose >= 4: 
     return 1 
    else: 
     return pose + 1 

Dann, wenn Sie versuchen, die pose Variable aktualisieren an anderer Stelle:

pose = set_pose(pose)

Würden Sie zustimmen, dass Sie die Argumente für Ihre Funktion aufrufen können, was immer Sie wollen? Zum Beispiel könnte set_pose wie folgt aussehen und tun genau das Gleiche:

def set_pose(foo): 
    if foo >= 4: 
     return 1 
    else: 
     return foo + 1 

Mit anderen Worten, nur weil es pose innerhalb der Funktion genannt wird, bedeutet nicht, es außerhalb die Funktion darstellen beziehen .

+0

Danke! Es funktioniert und ich sehe was du meinst. –