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
        


定义类的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()