前面我們看過了怎麼實現子彈類,今天我們就來看下怎麼將外星人顯示在螢幕。
import pygame
from pygame.sprite import sprite
import random
class
alien
(sprite):
def__init__
(self, screen, settings):
super().__init__()
# 將要繪製的螢幕
self.screen = screen
# 設定飛船路徑
self.alien_image_path = 'images/alien.png'
# 建立外星人
self.alien = pygame.image.load(self.alien_image_path)
# 重新設定外星人su***ce大小,如果製作的沒有問題,這一步可以省略,我是不擅長作圖,只能自己處理一下了
self.alien = pygame.transform.scale(self.alien, (48, 36))
# 獲取外星人su***ce外接矩形
self.rect = self.alien.get_rect()
# 外星人初始位置,間隔座標原點乙個外星人的寬度
row = random.randint(1, int(settings.screen_width / self.rect.width)-1)
self.rect.x = self.rect.width * row
# 外星人初始位置,間隔座標原點乙個外星人的高度
self.rect.y = self.rect.height
# 儲存精確位置
self.alien_y = float(self.rect.y)
# 外星人移動速度
self.speed_factor = 0.1
defupdate
(self):
self.alien_y += self.speed_factor
self.rect.y = self.alien_y
defblitme
(self):
""" 繪製外星人
"""self.screen.blit(self.alien, self.rect)
這裡繪製函式和前面飛船,子彈類的實現沒什麼區別。解釋一下:
# 外星人初始位置,間隔座標原點乙個外星人的寬度
row = random.randint(1, int(settings.screen_width / self.rect
.width)-1)
self.rect
.x = self.rect
.width * row
這裡我們根據螢幕寬度和外星人的寬度,計算出螢幕最多可容納多少個外星人,然後在使用隨機數確定這個外星人的x座標位置。當然了,使用隨機數會出現在幾個外星人重疊的現象。
同樣我們在更新螢幕的函式裡新增外星人的繪製操作:
# 繪製外星人
for alien in self.aliens
.sprites():
alien.blitme()
最後,我們在修改一下更新操作:
def
update_aliens
(self):
""" 更新外星人
"""self.aliens.update()
# 檢測是否飛出底部
for alien in self.aliens.copy():
if alien.rect.bottom > self.screen.get_rect().bottom:
self.aliens.remove(alien)
# 限制同時出現的外星人數目
if len(self.aliens) < 8:
self.aliens.add(alien(self.screen, self.settings))
# spritecollideany返回發生碰撞的精靈
collision = pygame.sprite.spritecollideany(self.air_ship, self.aliens)
# 如果外星人和飛船發生碰撞,刪除外星人
if collision:
print(collision)
self.aliens.remove(collision)
執行效果:
外星人大戰
coding utf 8 created on tue sep 11 15 06 19 2018 author rain import pygame from pygame.sprite import group from alien import alien from game stats imp...
Pygame 外星人入侵(7)外星人壓境
二 更加合理地移動 三 小結 在之前的博文中,實現了在螢幕上繪製一大群外星人,現在我們想讓這群外星人動起來,它們的移動遵循著一定的規律。我們首先要實現的是,如何讓一群外星人一起向螢幕右側移動。遊戲引數性質的變數統一存放在 設定模組中的設定類中 6 外星人的屬性 6。1 外星人移動的速度 self.a...
外星人入侵 外星人群整體移動
import pygame,sys from pygame.sprite import group from settings import settings class alien pygame.sprite.sprite def init self,screen,ai settings supe...