飞机动不了 不知道问题在哪 也没报错

来源:3-5 飞机大战项目飞机移动控制

慕莱坞5098839

2019-10-24 21:59:02


import pygame
import constans


class Plane(pygame.sprite.Sprite):
   """ 设置飞机的基础类 """
   # 飞机的图片
   plane_image = []
   # 飞机的爆炸图片
   plane_destroy = []
   # 飞机坠毁的音效
   plane_destroy_sound = None
   # 飞机的状态
   active = True
   # 子弹
   bullets = pygame.sprite.Group()

   def __init__(self, screen, speed=None):
       super().__init__()
       self.screen = screen
       self._img_list = []
       self._destroy_list = []
       self.down_sound = None
       self.load_src()

       # 设置飞机速度
       self.speed = 10 or speed
       # 设置飞机图片
       self.rect = self._img_list[0].get_rect()
       # 飞机的高度和宽度
       self.plane_w, self.plane_h = self._img_list[0].get_size()
       # 游戏窗口的高度和宽度
       self.width, self.height = self.screen.get_size()

   def load_src(self):
       """ 加载静态资源 """
       # 加载音乐
       for img in self.plane_image:
           self._img_list.append(pygame.image.load(img))
       # 加载坠毁图片
       for img in self.plane_destroy:
           self._destroy_list.append(pygame.image.load(img))
       # 加载坠毁音乐
       if self.plane_destroy_sound:
           self.down_sound = pygame.mixer.Sound(self.plane_destroy_sound)

   @property
   def image(self):
       return self._img_list[0]

   def blit_img(self):
       """ 绘制飞机 """
       return self.screen.blit(self.image, self.rect)

   def move_up(self):
       """ 飞机up """
       self.rect.top -= self.speed

   def move_down(self):
       """ 飞机下移动 """
       self.rect.top += self.speed

   def move_left(self):
       """ 飞机左移 """
       self.rect.left -= self.speed

   def move_right(self):
       """ 飞机右移 """
       self.rect.left += self.speed

   def broken_down(self):
       """ 飞机坠毁 """
       # 播放坠毁图片
       for img in self._destroy_list:
           self.screen.blit(img, self.rect)
       # 播放坠毁音乐
       if self.down_sound:
           self.down_sound.play()
       # 坠毁后
       self.active = False

   def shoot(self):
       """ 飞机发射子弹 """
       pass


class Our_Plane(Plane):
   """ 我方飞机 """
   plane_image = constans.OUR_PLANE_IMG_LIST
   # 飞机的爆炸图片
   plane_destroy = constans.OUR_DESTROY_IMG_LIST
   # 飞机坠毁的音效
   plane_destroy_sound = None

   def update(self, frame):
       """ 更新飞机的动画效果 """
       if frame % 5:
           self.screen.blit(self._img_list[0], self.rect)
       else:
           self.screen.blit(self._img_list[1], self.rect)

   def move_up(self):
       super().move_up()
       if self.rect.top <= 0:
           self.rect.top = 0

   def move_down(self):
       super().move_down()
       if self.rect.top >= self.height - self.plane_h:
           self.rect.top = self.height - self.plane_h

   def move_left(self):
       super().move_left()
       if self.rect.left <= 0:
           self.rect.left = 0

   def move_right(self):
       super().move_right()
       if self.rect.left <= self.width - self.plane_w:
           self.rect.left = self.width - self.plane_w

-------------------------------------------------------------------------

import sys
import pygame
import constans
from game.plane import Our_Plane


def main():
   """ 设置游戏入口 """
   # 初始化
   pygame.init()
   # 设置屏幕
   width, height = 480, 850
   screen = pygame.display.set_mode((width, height))
   # 加载背景音乐
   bgm = pygame.mixer.music.load(constans.BGM)
   # 循环播放bgm
   pygame.mixer.music.play(-1)
   # 设置bgm音量
   pygame.mixer.music.set_volume(0.3)
   # 加载背景图片
   bg_image = pygame.image.load(constans.BG_IMAGE)
   # 加载游戏标题
   bg_image_title = pygame.image.load(constans.BG_IMAGE_TITLE)
   bg_image_title_rect = bg_image_title.get_rect()
   t_width, t_height = bg_image_title.get_size()
   bg_image_title_topleft = (int((width-t_width)/2),
                             int((height-t_height)/2 - t_height))
   # 加载游戏开始按键
   bg_image_start = pygame.image.load(constans.BG_IMAGE_START)
   bg_image_start_rect = bg_image_start.get_rect()
   s_width, s_height = bg_image_start.get_size()
   bg_image_start_topleft = (int((width-s_width)/2),
                             int((height-s_height)/2 + s_height))
   # 设置标题
   topic = pygame.display.set_caption("飞机大战")
   # 设置游戏状态  0 准备中 1 游戏中 2游戏结束
   stats = 0
   # 设置播放帧数
   frame = 0
   # 获得帧速率控制对象
   clock = pygame.time.Clock()
   # 实例化我们的飞机
   our_plane = Our_Plane(screen)
   while True:
       """ 游戏主循环 """
       clock.tick(60)
       frame += 1
       if frame >= 60:
           frame = 0
       for event in pygame.event.get():
           if event.type == pygame.QUIT:
               pygame.quit()
               sys.exit()
           elif event.type == pygame.MOUSEBUTTONDOWN:
               if stats == 0:
                   stats = 1
           elif event.type == pygame.KEYDOWN:
               if stats == 1:
                   if event.type == pygame.K_w or event.type == pygame.K_UP:
                       our_plane.move_up()
                   elif event.type == pygame.K_s or event.type == pygame.K_DOWN:
                       our_plane.move_down()
                   elif event.type == pygame.K_a or event.type == pygame.K_LEFT:
                       our_plane.move_left()
                   elif event.type == pygame.K_d or event.type == pygame.K_RIGHT:
                       our_plane.move_right()

       # 更新游戏状态
       if stats == 0:
           # 绘制游戏准备的状态
           screen.blit(bg_image, bg_image.get_rect())
           screen.blit(bg_image_title, bg_image_title_topleft)
           screen.blit(bg_image_start, bg_image_start_topleft)
       elif stats == 1:
           # 绘制游戏进行的状态
           screen.blit(bg_image, bg_image.get_rect())
           our_plane.update(frame)
       # 更新屏幕
       pygame.display.flip()


if __name__ == '__main__':
   main()

写回答

1回答

好帮手乔木

2019-10-25

同学你好:

飞机不移动,首先定位到处理飞机移动的代码。同学的key写为type,因此无法移动。

修改:将type改为key即可。

http://img.mukewang.com/climg/5db268eb095f607607330298.jpg

同学的向右移动,大于等于写为小于等于,导致向右移动飞机直接移动到最右边。

http://img.mukewang.com/climg/5db2695009376ffc06120162.jpg

如果我解决了同学的问题,请采纳!学习愉快^_^。

0

0 学习 · 8160 问题

查看课程