2017-06-21 24 views
0

我對python非常陌生,我一直在試圖製作遊戲。但我想讓背景不斷循環下去,我無法做到。 這裏是我的代碼:使用Pygame在Python中持續向下滾動的背景

import pygame 
pygame.init() 

width = 800 
height = 600 

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

ship_width = 35 
ship_height = 64 

disp = pygame.display.set_mode((width,height)) 

pygame.display.set_caption("Space Jump") 

clock = pygame.time.Clock() 

bg1 = pygame.image.load("Space.png") 
bg2 = pygame.image.load("Space.png") 

shipImg = pygame.image.load("Ship.png") 

def ship(x,y): 
    disp.blit(shipImg, (x,y)) 

def gameLoop(): 
    x = (width * 0.45) 
    y = (height * 0.8) 

x_ch = 0 
y_ch = 0 

x_bg = 0 
y_bg = bg1.get_height() 

gameExit = False 

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

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       x_ch = -5 
      elif event.key == pygame.K_RIGHT: 
       x_ch = 5 
      elif event.key == pygame.K_UP: 
       y_ch = -5 
      elif event.key == pygame.K_DOWN: 
       y_ch = 5 


     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
       x_ch = 0 
      if event.key == pygame.K_UP or event.key == pygame.K_DOWN: 
       y_ch = 0 

    x += x_ch 
    y += y_ch 

    if x > width - ship_width or x < 0: 
     x_ch = 0 

    if y > height - ship_height or y < 0: 
     y_ch = 0 

    disp.blit(bg1, (0,x_bg)) 
    disp.blit(bg2, (0,y_bg)) 

    ship(x,y) 

    pygame.display.update() 

    x_bg += 1 
    y_bg += 1 

    if x_bg == -1 * x_bg.get_height(): #This is the part I'm stuck on 
     x_bg = y_bg + y_bg.get_height() #When I run this i get and error: 
             #if x_bg == -1 * x_bg.get_height(): 
             #AttributeError: 'int' object has no 
             #attribute 'get_height' 
    if y_bg == -1 * y_bg.get_height(): 
     y_bg = x_bg + x_bg.get_height() 

    clock.tick(30) 

gameLoop() 
pygame.quit() 
quit() 

所以,當我運行這段代碼我得到一個錯誤,但是當我剛寫上一個新的文件,後臺代碼它的工作原理,但背景在某些時候它沒有循環結束。 我一直在嘗試做這個過去3天的循環背景,請幫助我。謝謝。

+0

我得到它的工作感謝瘋狂的meesh,但背景在某些時候結束可以有人告訴我如何循環它,所以它不會結束? –

回答

1

好,我不使用pygame的之前,但只需快速瀏覽一下你的代碼和文檔,它看起來像你打電話get_height()在一個數字(x_bgy_bg)不是,什麼pygame指作爲surface對象。

大致翻譯的錯誤是說數字沒有名稱爲get_height()的方法。

您的surface對象被定義爲bg1bg2所以我的猜測是那些會有方法。

只是將變量與正確的交換出來,錯誤應該消失。

+0

它現在的作品謝謝,但現在如何讓它循環?它在某個點結束。 –

+0

我相信有很多方法可以做到這一點,但這裏有一個關於 的簡短描述:我如何實現parallaxing平面: 假設(0,0)是左下角,並且您想將BG底部滾動到頂部: ' - 圖像 3份 - H = IMG高度 - 對齊副本在相同的x - img1.y =中心 - img2.y = H - img3.y = H * 3 * -1 - 限定兩個變量 'scroll_speed' 和「的距離= 0'' 每個幀 '上 - 每個IMG做img.y + = scroll_speed - 做距離+ = SCR oll_speed - 如果距離> h,將img2與img3交換y,將距離重設爲0' –

+0

對不起,我已經得到它的工作像一個小時以前謝謝 –

0

我不完全確定你的一些代碼試圖做什麼,但我可以讓你開始。

你可以看到錯誤說: 「AttributeError的:‘詮釋’對象有沒有屬性‘get_height’」

這是告訴你,x_bg是一個整數,而不是一個對象,所以它不能訪問任何屬性名爲'get_height'。我會推薦學習更多關於python中的對象和函數,以及它們是如何工作的。

if x_bg == -1 * x_bg: 
    x_bg = y_bg + y_bg 

另一個問題:

好像你已經使用x_bg和y_bg作爲底色的位置,所以沒有必要嘗試使用任何函數調用get_height,你可以將其替換爲這段代碼就是檢查x_bg的值是否爲,正好等於爲一個數字。雖然這有時可以起作用,特別是當你只處理整數時,通常是一個好主意來檢查你的變量是否大於/小於數字。例如,如果您的背景爲y = 99,並且您正在檢查y == 100,但是屏幕每移動2個像素,您的條件將永遠不會達到,而如果您要檢查y> 100,它應該始終被抓住。你可能想是這樣的:

if y_bg < 0: 
    y_bg = height 

這並不完美,但它不應該引起任何錯誤,應該可以幫助您在正確的軌道