飞机动不了 不知道问题在哪 也没报错
来源: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即可。

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

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