Py学习  »  问与答

[小白提问]关于射击外星人游戏中出现的错误

christy • 4 年前 • 2017 次点击  

显示一个外星人的时候没问题,但是用编组创建一排外星人的时候却报错,错误代码:

Traceback (most recent call last):
  File "alien_invasion.py", line 22, in <module> 
    File "alien_invasion.py", line 16, in run_game
    File "C:\Users\wjc19\Desktop\alien_invasion\game_functions.py", line 61, in creat_fleet
    File "C:\Users\wjc19\AppData\Local\Programs\Python\Python37\lib\site-packages\pygame\sprite.py", line 361, in add
    sprite.add_internal(self)
  File "C:\Users\wjc19\AppData\Local\Programs\Python\Python37\lib\site-packages\pygame\sprite.py", line 163, in add_internal
    self.__g[group] = 0
AttributeError: 'Alien' object has no attribute '_Sprite__g'

百度搜的时候有人说是因为函数中参数没有对应造成的,但是我仔细看过不是这个问题 附上部分代码,希望有大神能帮忙找下错误,还有就是想问下‘str’object has no attribute '....'这个错误出现的原因都有哪些

alien_invasion.py
import pygame#主程序,运行程序
from pygame.sprite import Group
from settings import Settings
from ship import Ship
from alien import Alien
import game_functions as gf
def run_game():
        pygame.init()
        ai_settings=Settings()
        screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
        pygame.display.set_caption("Alien Invasion")
        ship=Ship(ai_settings,screen)
        bullets=Group()
        aliens=Group()
        gf.creat_fleet(ai_settings,screen,aliens)
        while True:     
                gf.check_events(ai_settings,screen,ship,bullets)
                ship.update()
                gf.update_bullet(bullets)
                gf.update_screen(ai_settings,screen,ship,aliens,bullets)
run_game()
game_functions.py
import sys
import pygame
from bullet import Bullet
from alien import Alien
def update_screen(ai_settings,screen,ship,aliens,bullets):
            screen.fill(ai_settings.bg_color)
            for bullet in bullets.sprites():
                    bullet.draw_bullet()
            ship.blitme()
            aliens.draw(screen)
            pygame.display.flip()
def creat_fleet(ai_settings,screen,aliens):
            alien=Alien(ai_settings,screen)
            alien_width=alien.rect.width
            available_space_x=ai_settings.screen_width-2*alien_width
            number_aliens_x=int(available_space_x/(2*alien_width))
            for alien_number in range(number_aliens_x):
                    alien=Alien(ai_settings,screen)


    

                    alien.x=alien_width+2*alien_width*alien_number
                    alien.rect.x=alien.x
                    aliens.add(alien)
最后一次修改于 (2019-05-09 12:17)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/32717
 
2017 次点击  
文章 [ 2 ]  |  最新文章 4 年前
christy
Reply   •   1 楼
christy    4 年前

没错!在Alien类中使用super方法的时候少了个括号

matesir
Reply   •   2 楼
matesir    4 年前

检查Alien类