Just got problem with a'la Space Invaders game. Just make some upgrades, and wanna to my boss shoot to player centraly from center, not from corner. Game looks now:Game - For mostly time, i got a error:
self.rect.left = bosss.rect.right
AttributeError: 'Group' object has no attribute 'rect'
My code from Bullet and 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)
You can get a list of the Sprties in a pygame.sprite.Group
with the method sprites()
. The sprites in the list cam be accessed by subscription.
If bosss
contains exactly 1 Sprite, you can get the rect
attribute of the Sprite with:
rect = bosss.sprites()[0].rect