虾仁A 2022-09-01 09:36 采纳率: 78.8%
浏览 39
已结题

pygame飞机大战超过最大的递归深度

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

pygame飞机大战超过最大的递归深度

问题相关代码,请勿粘贴截图

主函数

import pygame
from GameSprite import *
# 初始化pygame
pygame.init()
# 创建游戏画面
screen=pygame.display.set_mode((480,700))
# 加载背景图片到游戏画面
bg=pygame.image.load("./pygame/images/background.png")
# 绘制图像
screen.blit(bg,(0,0))

# 加载飞机图片到游戏画面
fly1=pygame.image.load("./pygame/images/me1.png")
# screen.blit(fly1,(200,600))
# 创建敌机
# enemy=GameSprite("./pygame/images/enemy1.png",2)
enemy2=GameSprite("./pygame/images/enemy2.png")
# enemy3=GameSprite("./pygame/images/enemy3.png",3)
# 创建敌机组
enemy_group=pygame.sprite.Group(enemy2)

# 定义游戏的时钟
clock=pygame.time.Clock()
# 飞机的初始位置
fly_position_init=pygame.Rect(200,500,102,126)
# 游戏循环开始
while True:
    # 定义游戏的刷新频率
    clock.tick(30)
    # 定义每秒变化的位置
    # fly_position_init.x -=1
    fly_position_init.y -=10
    # 判断飞机位置是否小于0,是就回到原来位置
    if fly_position_init.bottom<0:
        fly_position_init.y=700
    # 绘制图像  
    screen.blit(bg,(0,0))
    screen.blit(fly1,fly_position_init)
# 用户点击关闭按钮退出程序
# 监听用户事件
    for event  in pygame.event.get():
        if event.type == pygame.QUIT:
            print("退出游戏")
            # 卸载游戏模块
            pygame.quit()
            # 退出系统
            exit()
    # 更新敌机    
    enemy_group.update()
    # 渲染敌机
    enemy_group.draw(screen)   

    pygame.display.update()

# 结束pygame
    pygame.quit()



子函数(定义精灵组)


import pygame

class GameSprite(pygame.sprite.Sprite):
    
    # 定义GameSorite的方法
    def _init_(self,images,speed=1):
        # 继承pygame.sprite的方法
        super().__init__()
        # 加载图片
        self.image=pygame.image.load(images)
        # 拿到图像的尺寸
        self.rect=self.image.get_rect()
        # 设置初始速度
        self.speed=speed
    #定义更新图像的方法 
    def update(self):
        # 更新y轴移动的位置
        self.rect.y+=self.speed
        


  • 写回答

2条回答 默认 最新

  • 小嗷犬 人工智能领域优质创作者 2022-09-01 11:51
    关注

    定义类的init方法前后都是双下划线
    子函数应改为:

    import pygame
    
    
    class GameSprite(pygame.sprite.Sprite):
    
        # 定义GameSorite的方法
        def __init__(self, images, speed=1):
            # 继承pygame.sprite的方法
            super().__init__()
            # 加载图片
            self.image = pygame.image.load(images)
            # 拿到图像的尺寸
            self.rect = self.image.get_rect()
            # 设置初始速度
            self.speed = speed
        # 定义更新图像的方法
    
        def update(self):
            # 更新y轴移动的位置
            self.rect.y += self.speed
    

    同时你主函数的大循环里写了pygame.quit(),
    这样一次循环就退出了,这句应该删去:

    import pygame
    from GameSprite import *
    # 初始化pygame
    pygame.init()
    # 创建游戏画面
    screen=pygame.display.set_mode((480,700))
    # 加载背景图片到游戏画面
    bg=pygame.image.load("./pygame/images/background.png")
    # 绘制图像
    screen.blit(bg,(0,0))
    
    # 加载飞机图片到游戏画面
    fly1=pygame.image.load("./pygame/images/me1.png")
    # screen.blit(fly1,(200,600))
    # 创建敌机
    # enemy=GameSprite("./pygame/images/enemy1.png",2)
    enemy2=GameSprite("./pygame/images/enemy2.png")
    # enemy3=GameSprite("./pygame/images/enemy3.png",3)
    # 创建敌机组
    enemy_group=pygame.sprite.Group(enemy2)
    
    # 定义游戏的时钟
    clock=pygame.time.Clock()
    # 飞机的初始位置
    fly_position_init=pygame.Rect(200,500,102,126)
    # 游戏循环开始
    while True:
        # 定义游戏的刷新频率
        clock.tick(30)
        # 定义每秒变化的位置
        # fly_position_init.x -=1
        fly_position_init.y -=10
        # 判断飞机位置是否小于0,是就回到原来位置
        if fly_position_init.bottom<0:
            fly_position_init.y=700
        # 绘制图像  
        screen.blit(bg,(0,0))
        screen.blit(fly1,fly_position_init)
    # 用户点击关闭按钮退出程序
    # 监听用户事件
        for event  in pygame.event.get():
            if event.type == pygame.QUIT:
                print("退出游戏")
                # 卸载游戏模块
                pygame.quit()
                # 退出系统
                exit()
        # 更新敌机    
        enemy_group.update()
        # 渲染敌机
        enemy_group.draw(screen)   
    
        pygame.display.update()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示