我试图用一个角色射出一个射弹,那个射弹就是泥球形象。我引用了我的类MUDBALL以包含在all_sprites中。在我的第一种方法中,我得到一个错误:AttributeError:' TRUMP'对象没有属性' rect'当我尝试在all_sprites中包含MUDBALL时。该方法在下面的代码中与Game类定义一起使用。在第二种方法中,我尝试将all_sprites语句编码为TRUMP类的shoot方法。我知道我只需要这两段代码中的一条就可以了。我试图包含必要的代码,同时省略其他所有内容以尽量减少混淆。
import pygame as pg
class Game:
def __init__(self):
# initialize game window, etc
pg.init()
pg.mixer.init()
self.screen = pg.display.set_mode((WIDTH, HEIGHT))
pg.display.set_caption(TITLE)
self.clock = pg.time.Clock()
self.running = True
self.font_name = pg.font.match_font(FONT_NAME)
self.load_data()
def load_data(self):
# load high score
self.dir = path.dirname(__file__)
img_dir = path.join(self.dir, 'img')
with open(path.join(self.dir, HS_FILE), 'r') as f:
try:
self.highscore = int(f.read())
except:
self.highscore = 0
# load spritesheet image
self.spritesheet = Spritesheet(path.join(img_dir, SPRITESHEET))
def new(self):
# start a new game
self.score = 0
self.all_sprites = pg.sprite.Group()
self.platforms = pg.sprite.Group()
self.player = Player(self)
#ME: TRUMP added to all sprites!!!
self.trump = TRUMP(self)
self.all_sprites.add(self.trump)
#***First attempt at adding mudball to all_sprites
self.mudball = MUDBALL(TRUMP.rect.centerx, TRUMP.rect.centery)
self.all_sprites.add(self.mudball)
#game class continues...
class TRUMP(pg.sprite.Sprite):
def __init__(self, game):
pg.sprite.Sprite.__init__(self)
self.game = game
self.current_frame2 = 0
self.last_update2 = 0
self.load_images()
#TRUMP class continued etc... Second attempt with shoot def is below.
def shoot(self):
mudball = MUDBALL(self.rect.centerx, self.rect.centery)
Game.all_sprites.add(mudball)
mudballs.add(mudball)
class MUDBALL(pg.sprite.Sprite):
def __init__(self, x, y):
pg.sprite.Sprite.__init__(self)
self.image = pg.image.load("MUDBALL.png")
self.rect = self.image.get_rect()
self.rect.bottom = y
self.rect.centerx = x
self.speedx = -10
def update(self):
self.rect.x += self.speedx
# kill if moves off screen
if self.rect.centerx < 0:
self.kill
拍摄是TRUMP类的一种方法!在第二次尝试中,我尝试将MUDBALL添加到TRUMP类的拍摄定义中的所有精灵中。这不起作用。再次在这种方法中,我从前一种方法中取出代码。该尝试(仅在下面)返回:NameError:name&#39; Game&#39;没有定义。我不知道如何继续。
答案 0 :(得分:0)
问题可能在于您的行
self.mudball = MUDBALL(self)
MUDBALL的 __ init __ 方法需要x,y参数;相反,你传递了一个对象而没有。这足以导致您所看到的错误。
对OP更新的回应:
这是正确的:游戏未定义。这一行是您发布的代码中唯一出现符号的位置。正如您对此进行了编码,您将向后添加附件: all_sprites 是游戏的属性(可变字段)。换句话说, all_sprites 附加到游戏,而不是相反。进入 all_sprites 的唯一方法是通过游戏 ...除了游戏没有在任何地方定义。
答案 1 :(得分:0)
我的一个朋友帮助了我。他说“TRUMP是你的类......它没有rect作为属性,只有TRUMP的一个实例才会有rect作为属性。”我还不明白这一点。但是要感谢所有帮助过我的人。
self.mudball = MUDBALL(self.trump.rect.centerx,self.trump.rect.centery) self.all_sprites.add(self.mudball)