外星人大战 飞船不能动了是什么原因?

#alien_invasion

import sys
import pygame
from settings import Settings
from ship import Ship
class AlienInvasion:

 #管理游戏资源和行为的类
def __init__(self):
  #初始化游戏并创建游戏资源
   pygame.init()
   self.settings = Settings()

   self.screen = pygame.display.set_mode((0, 0),pygame.FULLSCREEN)
   self.settings.screen_width = self.screen.get_rect().width
   self.settings.screen_height = self.screen.get_rect().height
   pygame.display.set_caption("Alien Invasion")

   self.ship = Ship(self)

   #设置背景色
   self.bg_color = (230,230.230)

def run_game(self):
  #开始游戏的主循环
    while  True:
        self._check_events()
        self.ship.update()
        self._update_screen()


def _check_events(self):
        #响应按键和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

            elif event.type == pygame.KEYDOWN:
                self._check_keydown_events(event)
            elif event.type == pygame.KEYUP:
                self._check_keyup_events(event)


def _check_keydown_events(self, event):
  #响应按下
              if event.key == pygame.K_RIGHT:
                  self.ship.moving_right = True

              elif event.key == pygame.K_LEFT:
                  self.ship.moving_left = True

              elif event.key == pygame.K_q:
                  sys.exit()


def _check_keyup_events(self, event):
  #响应松开
              if event.key == pygame.K_RIGHT:
                  self.ship.moving_right = False
              elif event.key == pygame.K_LEFT:
                  self.ship.moving_left = False

def _update_screen(self):
        #更新屏幕图像,换上新屏幕
        self.screen.fill(self.settings.bg_color)
        self.ship.blitme()

    #让最近绘制的屏幕可见
        pygame.display.flip()

if name == ‘main‘:

#创建游戏实例并运行游戏
ai = AlienInvasion()
ai.run_game()

#ship

import pygame
class Ship:
“””管理飞船的类”””
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 and self.rect.right < self.screen_rect.right:
        self.rect.x += self.settings.ship_speed
    if self.moving_left and self.rect.left > 0:
        self.rect.x -= self.settings.ship_speed

    #根据self.x更新rect对象
    self.rect.x = self.x

def blitme(self):
    #在指定位置绘制飞船
    self.screen.blit(self.image,self.rect)

#settings

class Settings:
“””储存游戏设置”””

def __init__(self):
    #初始化游戏设置
    #屏幕设置
    self.screen_width    =    1200
    self.screen_height    =    800
    self.bg_color    =    (230,230,230)

    #飞船设置
    self.ship_speed = 1.5
Jason990420
最佳答案

你把飞船的位置又更新回去了, 等于没动

    def update(self):
        #根据移动标志调整飞船位置
        #更新飞船而不是rect对象的x值
        if self.moving_right and self.rect.right < self.screen_rect.right:
            self.x += self.settings.ship_speed
        if self.moving_left and self.rect.left > 0:
            self.x -= self.settings.ship_speed

        #根据self.x更新rect对象
        self.rect.x = self.x
3年前 评论
讨论数量: 4
Jason990420

你把飞船的位置又更新回去了, 等于没动

    def update(self):
        #根据移动标志调整飞船位置
        #更新飞船而不是rect对象的x值
        if self.moving_right and self.rect.right < self.screen_rect.right:
            self.x += self.settings.ship_speed
        if self.moving_left and self.rect.left > 0:
            self.x -= self.settings.ship_speed

        #根据self.x更新rect对象
        self.rect.x = self.x
3年前 评论
Jason990420

你的代码乱了, 代码要放在

这里至少空一行
``` python
# 你的代码
```
3年前 评论

@Jason990420 原来如此谢谢麻烦了

3年前 评论

错因:代码顺序错 file

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!