2017-09-16 69 views
0

我一直在YouTube上關注Meloonatic Melons的Pygame教程(我改變了一些代碼,但直到現在它的工作效果都不錯),並且我遇到了問題。我製作了2個額外的文件來實現,名爲全局變量textureLoader。該錯誤是在這裏:錯誤正在加載圖片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() 

這是我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 

這是我的全局文件:

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

回溯是:

"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 

感謝您閱讀我的代碼並祝願您祝你好運找到解決方案!

+0

你沒有說錯誤是什麼。堆棧跟蹤有什麼錯誤?你做了什麼調試? – Carcigenicate

+0

@Carcigenicate我已經包括了追蹤現在,我已經通過這個論壇看了一些關於我的情況,並沒有找到任何東西。至於調試我已經使用了PyGame內置的調試器 –

+0

這個錯誤很清楚,請閱讀最後一行。你在哪裏聲明'gameDisplay'? – Carcigenicate

回答

0

你只需要調用display()來聲明和初始化函數中的全局變量。

你的代碼看起來很奇怪,我會重構很多東西。我建議將其張貼在codereview.stackexchange.com上。

+0

哦。我會嘗試代碼審查,謝謝你的答案! –

+1

我的意思是特別是許多全局變量和似乎只用於加載和存儲圖像的類。在將代碼發佈到codereview之前,請確保程序正常工作。 – skrx