2016-05-06 47 views
0

我正在嘗試做一個平臺,並在下面的代碼中,我試圖在背景上移動一個圖像('bird.png')。但是,每次嘗試啓動pygame時,它都會崩潰,甚至無法加載任何圖像。我查看了其他頁面,但仍未解決問題。代碼中可能存在一些錯誤,但我無法檢查它是否正常工作,因爲正如我所說的,pygame不斷崩潰。有什麼我可以解決它嗎?Python pygame崩潰,修復似乎並不工作

PS。很抱歉,如果這是一個有點亂,並且在代碼:)

import pygame 
from pygame import * 

pygame.init() 

TE=[] 

def perso(X): 
    X = [0,448] 
    while X != [640,0]: 
     w=int(input("Déplacement: ")) 
#Right# 
     if w==0: 
       if X[1] == 608: 
        print("You can't leave the map") 
       else:  
        X[1] += 32 
        print(X)  
#Left# 
     elif w==1: 
       if X[1] == 0: 
        print("You can't leave the map") 
       else: 
        X[1] -= 32 
        print(X)  
#Down# 
     elif w==2: 
       if X[0] == 456: 
        print("You can't leave the map") 
       else: 
        X[0] += 24 
        print(X)  
#Up# 
     elif w==3: 
       if X[0] == 0: 
        print("You can't leave the map") 
       else: 
        X[0] -= 24 
        print(X) 
     else: 
       print("non valable") 
    print("Bravo!") 

screen = pygame.display.set_mode((680, 488)) background_image = pygame.image.load("C:/Python34/Scripts/Images & Sounds/background(680x480).jpg").convert() 
screen.blit(background_image,[0,0]) 

character = pygame.image.load("C:/Python34/Scripts/Images & Sounds/bird(40x40).png").convert() 
screen.blit(character, (X[0],X[1])) 

perso(TE) 


flag 

法語單詞我運行代碼和pygame的窗口打開時,它是黑色的,幾秒鐘後,我得到了「沒有響應」消息(pygame窗口)。然而,w=int(input("Déplacement: "))部分似乎工作,因爲它要求輸入。也許這與圖像有關?

+1

你是什麼崩潰的意思是 - 你需要給遇到 – PyNEwbie

+0

特定異常的代碼,我運行代碼和pygame的窗口打開時,它是黑色的,幾秒鐘後,我得到了「沒有響應」消息(pygame窗口)。然而,「w = int(input(」Déplacement:「))」部分似乎在請求輸入時工作。也許這與圖像有關? – WildLlamas

+0

您有** while while循環可能未滿足條件。身份證懷疑。添加**而不是640的東西和cntr <100 **。然後在循環前有** cntr + = 1 **和** cntr = 0 **。 –

回答

1

其中一個最簡單的遊戲循環包含每次通過循環調用的「更新」序列和「渲染」序列。這兩個序列都需要很少的時間完成(越快越好)。這可能是因爲內建在input函數中的Python正在停止「更新」序列並導致遊戲崩潰,因爲它無法繼續循環。

解決這個問題最簡單的方法就是使用Pygame的內置鍵輸入方法。打破「渲染」和「更新」序列以幫助區分遊戲邏輯和圖像渲染也是一個好主意。

import pygame 
from pygame import * 

pygame.init() 

screen = pygame.display.set_mode((680, 488)) 
background_image = pygame.image.load("C:/Python34/Scripts/Images & Sounds/background(680x480).jpg").convert() 
character = pygame.image.load("C:/Python34/Scripts/Images & Sounds/bird(40x40).png").convert() 

def move(X): 
    keys = pygame.get_pressed() 
    #Right# 
    if keys[pygame.K_RIGHT] != 0: 
     if X[1] == 608: 
      print("You can't leave the map") 
     else:  
      X[1] += 32 
      print(X)  
    #Left# 
    elif keys[pygame.K_LEFT] != 0: 
     if X[1] == 0: 
      print("You can't leave the map") 
     else: 
      X[1] -= 32 
      print(X)  
    #Down# 
    elif keys[pygame.K_DOWN] != 0: 
     if X[0] == 456: 
      print("You can't leave the map") 
     else: 
      X[0] += 24 
      print(X)  
    #Up# 
    elif keys[pygame.K_UP] != 0: 
     if X[0] == 0: 
      print("You can't leave the map") 
     else: 
      X[0] -= 24 
      print(X) 
    else: 
     print("non valable") 

    return X 


def draw(X): 
    screen.blit(background_image,[0,0]) 
    screen.blit(character, (X[0],X[1])) 

Running = True 
X = [0,448] 
while Running: 

    # Updated and draw 
    X = move(X) 
    draw(X) 

    # Allow for the user to exit the game 
    for i in pygame.event.get(): 
     if i.type==QUIT: 
      Running = False 
      exit() 

    # End the game if 
    if X == [640, 0]: 
     Running = False 
     exit() 
+0

嗨,謝謝一堆。但是,我確實有一些關於你的代碼的問題(我對python很陌生)。 「X =移動(X)」似乎有錯誤,因爲它表示X未定義。我該如何解決?再次感謝。 – WildLlamas

+0

沒問題。我無法測試上面的代碼,所以我知道如果逐字使用它會有一些錯誤。你在那裏得到一個錯誤,因爲X在移動函數中使用之前還沒有被初始化。在while循環之上添加'X = [0,448]',該錯誤應該消失。 –