gpt4 book ai didi

python - 属性错误: 'Alien' object has no attribute 'image' (I am calling for a Group object)

转载 作者:行者123 更新时间:2023-12-01 07:39:59 25 4
gpt4 key购买 nike

使用一本书来学习如何制作一个简单的pygame外星人入侵。我到达了需要绘制外星人舰队的部分,但是当我试图在x级别上绘制整个舰队并要求一个组时对象,它给了我错误(完整回溯):

回溯(最近一次调用最后一次):

File "alien_invasion.py", line 35, in <module>

run_game()

File "alien_invasion.py", line 34, in run_game

gf.update_screen(our_settings,screen,ship,bullets,aliens)

File "C:\Users\root\Desktop\python_work\alien_invasion\game_functions.py", line 53, in update_screen

aliens.draw(screen) #Make the drawn screen visible

File "C:\Users\root\AppData\Local\Programs\Python\Python37-32\lib\site-
packages\pygame\sprite.py", line 476, in draw

self.spritedict[spr] = surface_blit(spr.image, spr.rect)

AttributeError: 'Alien' object has no attribute 'image'

我真的不认为错误在那行代码中,这就是为什么我检查了整个代码,但即使在坐了一个多小时后,我也找不到任何错误,这会导致这样的错误错误。属性已正确分配,其他所有内容都按顺序工作,除了这一行。希望您能提供帮助。提供我认为理解代码所需的信息以及可能与错误相关的信息。

import pygame
from pygame.sprite import Group
...
import game_functions as gf
from alien import Alien

def run_game():
...
pygame.init()
our_settings = Settings()
screen = pygame.display.set_mode((our_settings.screen_width ,
our_settings.screen_high))
pygame.display.set_caption('Alien Invasion')

ship = Ship(our_settings,screen)
bullets = Group()
aliens = Group()

gf.create_fleet(our_settings,screen,aliens)
while True:
gf.ckeck_events(our_settings,screen,ship,bullets)
ship.cotinuos_update() #updates ship`s position through each passing
gf.update_bullets(bullets)
gf.update_screen(our_settings,screen,ship,bullets,aliens)
run_game()
...

game_functions.py:

...
import pygame
from alien import Alien
...
def update_screen(our_settings,screen,ship,bullets,aliens):
'''Updates images at the display.'''
#Redraw the screen each time
#Value of the background(red,green,blue)
screen.fill(our_settings.screen_color)
#Redraw all bullets before the ship and aliens
for bullet in bullets.sprites():
bullet.draw_bullet()
#Crate ship on the background
ship.draw()
aliens.draw(screen) #ERROR HERE!!!
#Make the drawn screen visible
pygame.display.flip()
...
def create_fleet(our_settings,screen,aliens):
'''Create fleet of aliens'''
alien = Alien(our_settings,screen)
alien_width = alien.rectangle_alien.width
x_we_can_use = our_settings.screen_width - (2 * alien_width)
#at the left and at the right we have empy space = 2 aliens width
alien_in_row = int(x_we_can_use / (2 * alien_width))
#each alien has empty space with the size of 1 alien
for number_of_the_alien in range(alien_in_row):
alien = Alien(our_settings,screen)
alien.x = alien_width + 2*alien_width * number_of_the_alien
alien.rectangle_alien.x = alien.x
aliens.add(alien)
...

如果需要的话,外星人.py:

...
import pygame
from pygame.sprite import Sprite

class Alien(Sprite):
'''Defines the single alien of the fleet'''
def __init__(self,our_settings,screen):
'''Initialize alien and create the starting position'''
super().__init__()
self.our_settings = our_settings
self.screen = screen

#Create the image of the alien and make him rect.
self.alien_image = pygame.image.load('images/alien.bmp')
self.rectangle_alien = self.alien_image.get_rect()

#New alien near top left of the screen
self.rectangle_alien.x = self.rectangle_alien.width
self.rectangle_alien.y = self.rectangle_alien.height

#Store exact postiion
self.x = float(self.rectangle_alien.x)

def create_alien(self):
'''Draw the alien at the current location'''
self.screen.blit(self.alien_image, self.rectangle_alien)

其他一切都应该按顺序进行,因为自上次创建 1 个外星人以来我没有更改任何内容。我预计现在在 x 线顶部只会看到一支外星人舰队,但它现在正在工作并给出错误。

我是堆栈溢出的新手,这就是为什么在帖子中可能会有一些不便。对此深表歉意。尽力尽我所能。已经在那里坐了一小时了:O

最佳答案

问题来自于您的 Alien 类:

self.alien_image = pygame.image.load('images/alien.bmp')

draw() 方法要求您设置 image 属性,但您将其命名为 alien_image。尝试将此行替换为:

self.image = pygame.image.load('images/alien.bmp')

编辑:

您在 rectangle 属性上也遇到了类似的问题:您将其命名为 rectangle_alien。将 Alien 类中的所有 self.rectangle_alien 替换为 self.rectangle

关于python - 属性错误: 'Alien' object has no attribute 'image' (I am calling for a Group object),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56773670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com