我按照书上的代码编写,已经生成多行多列的外星人飞船,静止没问题,但是让飞船动起来的时候,却变成了只有一列飞船在移动,其他的都消失了,这是为什么呢?求指点。。。
图片如下:
![图片说明](https://img-ask.csdn.net/upload/201811/01/1541061266_597866.png)
![图片说明](https://img-ask.csdn.net/upload/201811/01/1541061280_149064.png)
代码如下:
主循环:
while True:
# 监视键盘和鼠标事件
gf.check_events(ai_settings, screen, ship, bullets)
ship.update()
gf.update_bullets(bullets)
gf.update_aliens(ai_settings, aliens)
# 每次循环都重绘屏幕,最近绘制的屏幕展示
gf.update_screen(ai_settings, screen, ship, bullets, aliens)
更新函数
def update_aliens(ai_settings, aliens):
'''更新所有外星人'''
check_fleet_edges(ai_settings, aliens)
aliens.update()
def check_fleet_edges(ai_settings, aliens):
for alien in aliens.sprites():
if alien.check_edge():
change_fleet_direction(ai_settings , aliens)
break
def change_fleet_direction(ai_settings, aliens):
for alien in aliens.sprites():
alien.rect.y += ai_settings.fleet_drop_speed
ai_settings.fleet_direction *= -1
def update_screen(ai_settings, screen, ship, bullets, aliens):
# 更新屏幕上的图像,并切换到新屏幕
screen.fill(ai_settings.bg_color)
ship.blitme()
testnum = 0
# 在飞船和外星人后面重绘所有子弹
for bullet in bullets.sprites():
bullet.draw_bullet()
# 让最新绘制的屏幕可见
print ("外星人数量= " + str(len(aliens)))
for alien in aliens.sprites():
alien.blitme()
testnum += 1
print("绘制外星人" + str(testnum))
pygame.display.flip()
外星人类
class Alien(Sprite):
def __init__(self, ai_settings, screen):
super().__init__()
self.screen = screen
self.ai_settings = ai_settings
self.screen_rect = self.screen.get_rect()
self.image = pygame.image.load('image/alien.png')
self.image = pygame.transform.scale(self.image, (40,40))
self.rect = self.image.get_rect()
self.rect.x = self.rect.width
self.rect.y = self.rect.height
self.x = float(self.rect.x)
self.edge_station = 1
print("alien init 完成")
def blitme(self):
self.screen.blit(self.image, self.rect)
print('alien draw 完成')
def check_edge(self):
screen_rect = self.screen.get_rect()
if self.rect.right >= screen_rect.right:
return True
elif self.rect.left <= 0:
return True
def update(self):
'''
if self.rect.right >= self.screen_rect.right:
self.edge_station = -1
self.rect.y += self.rect.height
elif self.rect.left < self.screen_rect.left:
self.edge_station = 1
self.rect.y += self.rect.height
'''
self.x += (self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction)
self.rect.x = self.x