自学python的升级路 2022-01-18 19:04 采纳率: 66.7%
浏览 72
已结题

外星人入侵项目——飞船移动

问题遇到的现象和发生背景

我是完全复制书上的代码,在12.6.2 允许持续移动 一节中,更改代码以后运行,发现只要按一下方向右键,飞船就会持续向右移动,直至跑出屏幕之外。

问题相关代码

下面是alien_invasion.py中的代码:
def _check_events(self):

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                self.ship.moving_right = True
            elif event.key == pygame.K_LEFT:
                self.ship.moving_left = True
                
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                self.ship.moving_right == False
            elif event.key == pygame.K_LEFT:
                self.ship.moving_left = False

下面是ship.py中的代码:
def init(self, ai_game):

    self.screen = ai_game.screen
    self.settings = ai_game.settings
    self.screen_rect = ai_game.screen.get_rect()
    

    self.image = pygame.image.load('images/ship.bmp')
    self.rect = self.image.get_rect()
    
    #对于每艘新飞船,都将其放在屏幕底部的中央。
    self.rect.midbottom = self.screen_rect.midbottom
    
    #在飞船的属性x中存储小数值。
    self.x = float(self.rect.x)
    
    #移动标志
    self.moving_right = False
    self.moving_left = False
    
def update(self):

    #更新飞船而不是rect对象的x值。
    if self.moving_right:
        self.x += self.settings.ship_speed
    if self.moving_left:
        self.x -=self.settings.ship_speed
    
    #根据self.x更新rect对象。
    self.rect.x = self.x
运行结果及报错内容

运行结果是:按下右键一下,飞船持续向右移动直至跑出屏幕之外,按下左键既可以只动一下,又可以持续移动。

我想要达到的结果

```

```帮忙解答,有小福利。

  • 写回答

1条回答 默认 最新

  • Castle Yeager 2022-01-18 19:39
    关注

    ”下面是alien_invasion.py中的代码:
    def _check_events(self)“

    这段代码的第12行。应该是 一个=,写成判断相等的 双== 了,目测粗心写错了
    导致松开右键时没能将 moving_right 设置成 False,但左方向的操作是写对的,所以没有这个问题
    建议修改后再次尝试

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月26日
  • 已采纳回答 1月18日
  • 创建了问题 1月18日

悬赏问题

  • ¥15 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂