我是pygame(和编码)的新手,无法弄清楚如何让我的图像(xwing)离开屏幕的一侧并进入屏幕的另一侧。我的当前代码说错了。 。 。
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 :(得分:0)
检查第75-78行,您尝试将整数分配给player_rect
,之后,player_rect.x += change_x
会返回此错误:
'int' object has no attribute 'x'
我想你想要改变player_rect.x
和player_rect.y
,所以你可以试试这个,它运作良好。
if player_rect.x > display_width:
player_rect.x = 0
if player_rect.y < display_width:
player_rect.y= display_width