问题描述
外星人入侵
这是主程序,它有一个名为ai_settings
的实例,其宽度,高度和背景色为属性。创建了Screen(surface),然后在主while循环中检查关键事件(gf。 check_events),然后更新飞船位置和子弹位置,最后绘制屏幕。
import pygame
import sys
from Settings import Settings
from pygame.sprite import Group
from Ship import Ship
import game_functions as gf
def run_game():
ai_settings=Settings(1200,800,(230,230,230))
screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
pygame.display.set_caption('left spacecrafr')
ship=Ship(screen,ai_settings)
bullets=Group()
while (True):
gf.check_events(ai_settings,screen,ship,bullets)
ship.update()
gf.update_bullets(bullets,ship)
gf.update_screen(ai_settings,bullets)
run_game()
船
它有一个初始化器来创建实例,然后设置其当前位置和坐标。Update函数根据关键事件更新船舶的位置,不允许船舶从屏幕上消失。
blitme
函数吸引飞船。
import sys
import pygame
class Ship():
def __init__(self,ai_settings):
self.screen=screen
self.ai_settings=ai_settings
self.image=pygame.image.load('/Users/WIN-10/Desktop/alien
invasion/spacecraft.bmp')
self.rect=self.image.get_rect()
self.screen_rect=self.screen.get_rect()
self.speed_factor=self.ai_settings.ship_speed
'initializes the location of the ship and its coordinates'
self.rect.left=0
self.rect.centery=self.screen_rect.centery
self.centerx=float(self.rect.centerx)
self.centery=float(self.rect.centery)
'flags for key events'
self.moving_left=False
self.moving_right=False
self.moving_up=False
self.moving_down=False
def update(self):
'sets new location for ship,it never disappears from the screen'
if self.moving_left and self.rect.left>0:
self.centerx-=self.speed_factor
if self.moving_right and self.rect.right<self.screen_rect.right:
self.centerx+=self.speed_factor
if self.moving_down and self.rect.bottom<self.screen_rect.bottom:
self.centery+=self.speed_factor
if self.moving_up and self.rect.top>self.screen_rect.top:
self.centery-=self.speed_factor
self.rect.centerx=self.centerx
self.rect.centery=self.centery
def blitme(self):
'''draws the ship'''
self.screen.blit(self.image,self.rect)
解决方法
Pygame具有transform
方法,可让您旋转图像
rotated_image = pygame.transform.rotate(self.image,-self.heading)
self.heading
是旋转图像的角度。
如果您是初学者,可能会发现“ Pygame Zero”使事情变得简单一些。 Pygame Zero的Actor
类具有angle
属性,它将为您完成所有艰苦的工作。