2017-09-16 5 views
0

J'ai suivi le tutoriel Pygame par Meloonatic Melons sur youtube (j'ai changé une partie du code mais ça a fonctionné pour le mieux jusqu'à présent), et j'ai couru dans un problème. J'ai fait 2 fichiers supplémentaires à implémenter appelés globals et textureLoader. L'erreur est ici:Erreurs Chargement de l'image Python 3.6.2, Pygame 1.9.3

import pygame, sys, time, random 
from scripts.textureLoader import * 
from scripts.globals import * 

pygame.init() 

#Important Stuff 

#Variables 
clock = pygame.time.Clock() 
FPS = 120 
tileSize = 32 

#Colours 
white = (0, 0, 0) 
black = (255, 255, 255) 
red = (255, 0, 0) 
green = (0, 255, 0) 
blue = (0, 0, 255) 
orange = (255, 165, 0) 

#Fonts 
fpsFont = pygame.font.Font("C:\\Windows\\Fonts\\Verdana.ttf", 20) 

#Display 

def display(): 
    global displayHeight, displayWidth, gameDisplay, gameCaption 

    displayHeight, displayWidth = 600, 800 

    gameDisplay = pygame.display.set_mode((displayWidth, displayHeight), 
    pygame.HWSURFACE | pygame.DOUBLEBUF) 
    gameCaption = pygame.display.set_caption("Testy RPG") 

run = True 
while run: 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      run = False 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_UP: 
       Globals.cameraMove = 1 
      elif event.key == pygame.K_DOWN: 
       Globals.cameraMove = 2 
      elif event.key == pygame.K_LEFT: 
       Globals.cameraMove = 3 
      elif event.key == pygame.K_RIGHT: 
       Globals.cameraMove = 4 
     elif event.type == pygame.KEYUP: 
      Globals.cameraMove = 0 

    #Logic 

    # - FPS Counter 
    FPSColour = black 
    cFPS = int(clock.get_fps()) 
    if cFPS < 10: 
     FPSColour = red 
    elif cFPS > 10 and cFPS < 60: 
     FPSColour = orange 
    else: 
     FPSColour = green 

    # - Camera 
    if Globals.cameraMove == 1: 
     Globals.cameraY -= 1 
    elif Globals.cameraMove == 2: 
     Globals.cameraY += 1 
    elif Globals.cameraMove == 3: 
     Globals.cameraX -= 1 
    elif Globals.cameraMove == 4: 
     Globals.cameraX += 1 

    # - Player 

    #Render Graphics 
    gameDisplay.blit(Background.NightSky, (0, 0)) #this is where the error is 

    # - Render Tiles 
    for x in range(0, 640, tileSize): 
     for y in range(0, 480, tileSize): 
      gameDisplay.blit(Tiles.Grass, (x + Globals.cameraX, y + 
    Globals.cameraY)) 

    gameDisplay.blit(fpsFont.render("FPS: " + str(cFPS), True, FPSColour), 
    (0, 0)) 
    gameDisplay.blit(PlayerFrontBack.PlayerFront, (0, 0)) 
    pygame.display.update() 
    clock.tick(120) 

pygame.quit() 
sys.exit() 

Ceci est mon fichier TextureLoader:

import pygame 

pygame.init() 

class Tiles: 

    global Size 
    Size = 32 

    def loadTexture(file, size): 
     bitmap = pygame.image.load(file) 
     bitmap = pygame.transform.scale(bitmap, (Size, Size)) 
     surface = pygame.Surface((Size, Size), pygame.HWSURFACE | pygame.SRCALPHA) 
     surface.blit(bitmap, (0, 0)) 
     return surface 

    Grass = loadTexture("Graphics\\grass.png", Size) 
    Stone = loadTexture("Graphics\\stone.png", Size) 
    Water = loadTexture("Graphics\\water.png", Size) 

class Background: 

    global backgroundWidth, backgroundHeight 
    backgroundWidth = 800 
    backgroundHeight = 600 

    def loadBackground(file, size): 
     backgroundImg = pygame.image.load(file) 
     backgroundImg = pygame.transform.scale(backgroundImg, (backgroundWidth, backgroundHeight)) 
     backgroundSurf = pygame.Surface((backgroundWidth, backgroundHeight), pygame.HWSURFACE | pygame.SRCALPHA) 
     backgroundSurf.blit(backgroundImg, (0, 0)) 
     return backgroundSurf 

    NightSky = loadBackground("Graphics\\sky.png", (backgroundWidth, backgroundHeight)) 

class PlayerFrontBack: 

    global playerWidth, playerHeight 
    playerWidth = 19 
    playerHeight = 55 

    def loadPlayerFrontBack(file, size): 
     playerImg = pygame.image.load(file) 
     playerImg = pygame.transform.scale(playerImg, (playerWidth, playerHeight)) 
     playerSurf = pygame.Surface((playerWidth, playerHeight), pygame.HWSURFACE | pygame.SRCALPHA) 
     playerSurf.blit(playerImg, (0, 0)) 
     return playerSurf 

    PlayerFront = loadPlayerFrontBack("Graphics\\manStill.png", (19, 55)) 

class PlayerLeftRight: 

    global playerWidth2 
    playerWidth2 = 15 

    def loadPlayerLeftRight(file, size): 
     playerImg = pygame.image.load(file) 
     playerImg = pygame.transform.scale(playerImg, (playerWidth2, playerHeight)) 
     playerSurf = pygame.Surface((playerWidth2, playerHeight), pygame.HWSURFACE | pygame.SRCALPHA) 
     playerSurf.blit(playerImg, (0, 0)) 
     return playerSurf 

Et voici mon fichier globals:

class Globals: 
    cameraX = 0 
    cameraY = 0 
    cameraMove = 0 

Le retraçage est:

"D:\Programming\Python\Python 3.6.2\python.exe" 
D:/Programming/Python/Assets/Projects/Games/rpg.py 
Traceback (most recent call last): 
    File "D:/Programming/Python/Assets/Projects/Games/rpg.py", line 81, in 
<module> 
    gameDisplay.blit(Background.NightSky, (0, 0)) 
NameError: name 'gameDisplay' is not defined 

Merci d'avoir révisé mon code et je vous souhaite la bonne chance de trouver une solution!

+0

Vous n'avez pas dit ce qu'est l'erreur. Quelle est l'erreur complète avec la trace de la pile? Et quel débogage as-tu fait? – Carcigenicate

+0

@Carcigenicate J'ai inclus la traceback maintenant et j'ai regardé à travers ce forum pour quelque chose sur ma situation et n'ai rien trouvé. Comme pour le débogage, j'ai utilisé le débogueur intégré PyGame –

+0

Les erreurs assez claires, lisez la dernière ligne. Où déclarez-vous 'gameDisplay'? – Carcigenicate

Répondre

0

Vous avez juste besoin d'appeler display() pour déclarer et initialiser les variables globales dans la fonction.

Votre code semble assez étrange et il y a beaucoup de choses que je refactoriserais. Je recommande de poster sur codereview.stackexchange.com.

+0

oh ok. je vais essayer la révision du code, merci pour une réponse! –

+1

Je veux dire en particulier les nombreuses variables globales et les classes qui semblent être utilisées uniquement pour charger et stocker des images. Assurez-vous que le programme fonctionne correctement avant de l'afficher sur codereview. – skrx