为了账号安全,请及时绑定邮箱和手机立即绑定

Python中出现AttributeError: 'Ship' object has no attribute 'update'

Python中出现AttributeError: 'Ship' object has no attribute 'update'

慕标5832272 2019-02-17 18:45:36
当在alien_invasion.py中添加ship.update() 'Ship' object has no attribute 'update',代码都是按照书上写得,求大佬解答一下出现错误题目描述 《Python编程从入门到实践》中外星人入侵的游戏编写题目来源及自己的思路 ### alien_invasion.py import pygame import sys from settings import Settings from ship import Ship import game_functions as gf 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") # 创建飞船 ship = Ship(screen) # 开始游戏的主循环 while True: gf.check_events(ship) ship.update() gf.update_screen(ai_settings,screen,ship) # 监视键盘和鼠标事件 for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() run_game() ship.py import pygame class Ship(): def __init__(self,screen): '''初始化飞船并设置其初始位置''' self.screen = screen # 加载飞船图像并获取其外接矩形 self.image = pygame.image.load('images/ship.bmp') self.rect = self.image.get_rect() self.screen_rect = screen.get_rect() # 将每艘新飞船放在屏幕底部中央 self.rect.centerx = self.screen_rect.centerx self.rect.bpttom = self.screen_rect.bottom # 移动标志 self.moving_right = False self.moving_right = False def update(self): '''根据移动标志调整飞船的位置''' if self.moving_right: self.rect.centerx += 1 if self.moving_left: self.rect.centerx -= 1 def blitme(self): '''在指定位置绘制飞船''' self.screen.blit(self.image,self.rect) settings.py class Settings(): '''存储《外星人入侵》的所有设置的类''' def __init__(self): '''初始化游戏的设置''' # 屏幕设置 self.screen_width = 1200 self.screen_height = 800 self.bg_color = (0,128,255) import sys import pygame def check_events(ship): '''响应按键和鼠标事件''' for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: ship.moving_right = True elif event.key == pygame.K_LEFT: ship.moving_left = True elif event.type == pygame.KEYUP: if event.key == pygame.K_RIGHT: ship.moving_right = False elif event.key == pygame.K_LEFT: ship.moving_left = False game_functions.py def update_screen(ai_settings,screen,ship): '''更新屏幕上的图像,并切换到新屏幕''' # 每次循环时都重绘屏幕 screen.fill(ai_settings.bg_color) ship.blitme() # 让最近绘制的屏幕可见 pygame.display.flip() 以上是全部代码。 Ps: 我还有一个疑问就是为什么在game_functions.py 中并没有import Ship,但是我自己尝试调用Ship 中的方法,却没有报错,反而 alien_invasion.py import Ship, 但在调用update 的时候却会报错,求大佬
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 1720 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信