2017-05-03 51 views
0

我是pygame(和編碼)的新手,無法弄清楚如何讓我的圖像(xwing)從屏幕的一側走到屏幕的另一側。我的當前代碼出現錯誤。 。 。如何讓我的圖像在pygame中的一側移動到屏幕的另一側?

Traceback (most recent call last): 
    File "/Users/Grant/Documents/xwingexample.py", line 85, in <module> 
    main() 
    File "/Users/Grant/Documents/xwingexample.py", line 61, in main 
    player_rect.x += change_x 
AttributeError: 'int' object has no attribute 'x' 

謝謝!

下面是代碼

import sys 
import random 
import pygame as pg 


pg.init() 
screen = pg.display.set_mode((1280, 800)) 
display_width = 1280 
display_height= 800 

black= (0,0,0) 
white= (255,255,255) 
red = (255,0,0) 
blue_violet = (138,43,226) 

xwingImg = pg.image.load('X-Wing.bmp').convert() 
tieImg= pg.image.load('tiefighter.png').convert() 
space=pg.image.load('space.jpg').convert() 

BG_image = pg.image.load('space.jpg').convert() 


def main(): 
    clock = pg.time.Clock() 
    # Surfaces/images have a `get_rect` method which 
    # returns a rect with the dimensions of the image. 
    player_rect = xwingImg.get_rect() 
    player_rect.center = (800,400) 
    change_x = 0 
    change_y = 0 
    enemies = [] 
    spawn_counter = 30 

    done = False 

    while not done: 
     for event in pg.event.get(): 
      if event.type == pg.QUIT: 
       done = True 
      if event.type == pg.KEYDOWN: 
       if event.key == pg.K_d: 
        change_x = 5 
       if event.key == pg.K_a: 
        change_x = -5 
      if event.type == pg.KEYUP: 
       if event.key == pg.K_d and change_x > 0: 
        change_x = 0 
       if event.key == pg.K_a and change_x < 0: 
        change_x = 0 


     # Spawn enemies if counter <= 0 then reset it. 
     spawn_counter -= 1 
     if spawn_counter <= 0: 
      # Append an enemy rect. You can pass the position directly as an argument. 
      enemies.append(tieImg.get_rect(topleft=(random.randrange(1280), -800))) 
      spawn_counter = 30 


     # Update player_rect and enemies. 
     player_rect.x += change_x 
     player_rect.y += change_y 
     for enemy_rect in enemies: 
      enemy_rect.y += 5 
      # Collision detection with pygame.Rect.colliderect. 
      if player_rect.colliderect(enemy_rect): 
       print('Collision!') 

     # Draw everything. 
     screen.blit(BG_image, (0,0)) 
     for enemy_rect in enemies: 
      screen.blit(tieImg, enemy_rect) 
     screen.blit(xwingImg, player_rect) 

     if player_rect.x > display_width: 
      player_rect = 0 
     if player_rect.y < display_width: 
      player_rect= display_width 

     pg.display.flip() 
     clock.tick(40) 


if __name__ == '__main__': 
    main() 
    pg.quit() 
    sys.exit() 

回答

0

退房線75-78,你嘗試分配整數player_rect,所以在這之後,player_rect.x += change_x返回此錯誤:

'int' object has no attribute 'x' 

我猜想你想改變player_rect.xplayer_rect.y,所以你可以嘗試這個,它運作良好。

if player_rect.x > display_width: 
    player_rect.x = 0 
if player_rect.y < display_width: 
    player_rect.y= display_width 
相關問題