【发布时间】:2020-11-25 21:44:53
【问题描述】:
刚刚遇到太空侵略者游戏的问题。只需进行一些升级,并想让我的老板从中心向球员中心射击,而不是从角落。 游戏现在看起来:Game - 大部分时间,我得到了一个错误:
self.rect.left = bosss.rect.right
AttributeError: 'Group' object has no attribute 'rect'
- 老板也在上下移动。
我来自 Bullet 和 Boss 的代码:
class PociskBoss(Sprite):
def __init__(self, ai_settings, screen, bosss):
super(PociskBoss, self).__init__()
self.ai_settings = ai_settings
self.screen = screen
self.image = pygame.image.load('C:/Users/Kamil/Pictures/bossbullet.png').convert_alpha()
self.image = pygame.Surface([12, 4])
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
#self.rect.center = self.screen_rect.midright #this work ofc (screen)
self.rect.left = bosss.rect.right #GROUP RECT(?)
self.rect.y = random.randrange(0, 50)
rects = pygame.sprite.spritecollide(self, bosss, False)
for platform in rects:
self.rect.add_internal(platform) #like that?
self.rect.right = platform.rect.left
self.speed_factor = ai_settings.boss_bullet_speed_factor
self.x = float(self.rect.x)
def update(self, bosss):
self.x = self.speed_factor
self.rect.x += self.x
#self.rect.y += self.y
def draw_pocisk(self):
self.screen.blit(self.image, self.rect)
class boss(Sprite):
def __init__(self, ai_settings, screen):
super(boss, self).__init__()
self.screen = screen
self.ai_settings = ai_settings
self.image = pygame.image.load('C:/Users/Kamil/Pictures/boss.png').convert_alpha()
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
self.rect.right = self.screen_rect.right
#self.center = float(self.rect.centery)
self.y = self.rect.y
self.x = self.rect.x
self.y = float(self.rect.y)
#self.center = float(self.rect.centery)
def update(self):
self.y -= (self.ai_settings.boss_speed_factor *
self.ai_settings.fleet_direction)
self.rect.y = self.y
def check_edges(self):
screen_rect = self.screen.get_rect()
if self.rect.top <= screen_rect.top:
return True
elif self.rect.bottom >= screen_rect.bottom:
return True
def blitme(self):
self.screen.blit(self.image, self.rect)
Main loop of game:
def game():
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.SCREEN_WIDTH, ai_settings.SCREEN_HEIGHT))
clock = pygame.time.Clock()
pygame.display.set_caption("Shootin")
koloo = Character(ai_settings, screen)
# Utworzenie grupy przeznaczonej do przechowywania pocisków.
new_bullet = Group()
boss_bullet = Group()
all_sprites = Group()
aliens = Group()
starr = Group()
deszcz = Group()
bosss = Group()
enemyPlayer = Group()
gf.create_fleet(ai_settings, screen, koloo, aliens)
#gf.create_fleet_starss(ai_settings, screen, koloo, starr)
gf.create_fleet_drop(ai_settings, screen, koloo, deszcz)
gf.create_boss(ai_settings, screen, bosss)
gf.create_enemy(ai_settings, screen, enemyPlayer)
clock=pygame.time.Clock()
FPS = 60
#GŁÓWNA PĘTLA GRY
while True:
gf.check_events(ai_settings, screen, koloo, new_bullet, aliens, boss_bullet, bosss,all_sprites)
koloo.update()
new_bullet.update()
gf.update_bullets(ai_settings, screen, koloo, new_bullet, aliens, bosss, boss_bullet, enemyPlayer)
boss_bullet.update(bosss)
gf.boss_bullet_update(ai_settings, screen, bosss, boss_bullet)
gf.update_rain(ai_settings, deszcz)
gf.update_aliens(ai_settings, aliens)
gf.update_boss(ai_settings, bosss)
gf.update_screen(ai_settings, screen, koloo, bosss, deszcz, aliens, starr, new_bullet, boss_bullet,
enemyPlayer, all_sprites, sprites_list, bullet_list)
clock.tick(FPS)
【问题讨论】:
-
你想达到什么目的? Group 没有
rect属性。 Group 是 Sprites 的集合。 Group 中的每个 Sprite 都有一个矩形 (rect)。但是Group本身没有rect。 -
创建新组,添加到其中,然后以某种方式 blit?我只是想给 boss.rect.left 加上一个 bullet.rect.right。
-
但是
boss没有rect。bosss是一个Group,可能包含Sprites。 -
我怎样才能得到那个矩形?通过让老板类只是一个对象?或者只是从那个组中拉老板?但是如何?
-
谢谢! :) 它的工作已经。