问题如标题所述,代码运行显示如下错误:AttributeError: 'Ship' object has no attribute 'screen
代码如下:
分为三个文件:ship.py,alien_invasion.py,settings.py
# ship.py
import pygame
class Ship():
def __init__(self, screen):
# 初始化飞船并获取其初始位置
# 加载飞船图像并获取其外接矩形
self.image = pygame.image.load("images/ship.bmp") # 返回了飞船的surface,并存储到self.image
self.rect = self.image.get_rect() # 通过get_rect()活动相应surface的属性rect。(矩形即rect对象)
self.screen_rect = screen.get_rect() # 将矩形存储到self.screent_rect
# 将每艘新飞船放到屏幕底部中央
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
def blitme(self): # 定义此方法,让它根据self.rect的位置将图像绘制到屏幕上
# 在指定位置绘制飞船
self.screen.blit(self.image, self.rect)
# alien_invasion.py
import pygame
from settings import Settings
from ship import Ship
# 导入所需模块
def run_game():
# 初始化游戏并创建一个屏幕对象
pygame.init() # 初始化背景设置
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion") # 显示在屏幕的左上角
# 设置背景色
# bg_color = (230,230,230) # RGB(红绿蓝三色)
# 创建一艘飞船ship
ship = Ship(ai_settings, screen)
# 游戏的主循环
while True:
# 监视键盘和鼠标事件
for event in pygame.event.get(): # 事件循环
# pygame.event.get()方法,所有的键盘和鼠标事件都会促使for循环运行。
if event.type == pygame.QUIT:
# 若玩家单机游戏窗口的关闭按钮,将检测到pygame.QUIT事件,我们将调用sys.exit()来退出游戏
sys.exit()
# 每次循环都重绘屏幕
screen.fill(bg_color) # 用背景色填充屏幕,只接受一个实参,一种颜色
ship.blitme()
# 让最近绘制的屏幕可见
pygame.display.flip()
run_game()
# settings.py
class Settings():
# 存储alien_invasion的所有设置的类
def __init__(self):
# 初始化游戏设置
# 屏幕设置
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230, 230, 230)
个人觉得可能是由于screen的数据类型没有搞清楚,但是查了好久不知道那里错了。
谢谢大家的帮助!