五9 2021-03-30 16:18 采纳率: 0%
浏览 98
已结题

初学 这个报错怎么解决呀

Traceback (most recent call last):
  File "C:\Users\辛巴\PycharmProjects\pythonProject3\venv\测试\feiji\精灵飞机.py", line 225, in <module>
    main()
  File "C:\Users\辛巴\PycharmProjects\pythonProject3\venv\测试\feiji\精灵飞机.py", line 182, in main
    sound = GameSound()
pygame 2.0.1 (SDL 2.0.14, Python 3.9.2)
Hello from the pygame community. https://www.pygame.org/contribute.html
TypeError: __init__() missing 1 required positional argument: 'palyer'









import pygame
import time
import random
from pygame.constants import *

class HorePlane(pygame.sprite.Sprite):
    def __init__(self,screen,rect):
        #初始化精灵类
        pygame.sprite.Sprite.__init__(self)

        # 创建飞机
        self.palyer = pygame.image.load("hero1.png")

        #根据图片image获取矩形对象
        self.rect = self.image.get_rect()
        self.rect.topleft = [480 / 2 - 100 / 2, 600]


        # 飞机速度
        self.speed = 5
        #记录窗口对象
        self.screen = screen
        #装子弹精灵对象
        self.bullets = pygame.sprite.Group()

    def key_control(self):
        # 监听键盘事件(连续)
        key_pressed = pygame.key.get_pressed()

        if key_pressed[K_a] or key_pressed[K_LEFT]:

            self.rect.left -= self.speed
        if key_pressed[K_s] or key_pressed[K_DOWN]:

            self.rect.bottom += self.speed
        if key_pressed[K_d] or key_pressed[K_RIGHT]:

            self.rect.right += self.speed
        if key_pressed[K_w] or key_pressed[K_UP]:

            self.rect.top -= self.speed
        if key_pressed[K_SPACE]:
            #按下空格发射子弹
            bullet = Bullet(self.screen,self.rect.left,self.rect.top)
            #把子弹放在列表里
            self.bullets.add(bullet)

    def update(self):
        self.key_control()
        self.dispaly()

    def dispaly(self):
        # 将飞机贴到窗口
        self.screen.blit(self.palyer, self.rect)

        #更新子弹坐标
        self.bullets.update()

        #把子弹添加到屏幕
        self.bullets.draw(self.screen)

class EnemyPlane(pygame.sprite.Sprite):
    def __init__(self, screen):
        # 初始化精灵类
        pygame.sprite.Sprite.__init__(self)

        # 创建飞机
        self.palyer = pygame.image.load("enemy0.png")

        # 根据图片image获取矩形对象
        self.rect = self.image.get_rect()
        self.rect.topleft = [0,0]

        # 飞机速度
        self.speed = 10
        # 记录窗口对象
        self.screen = screen
        # 装子弹精灵对象
        self.bullets = pygame.sprite.Group()
        #飞机移动方向
        self.direction = 'right'


    def dispaly(self):
        # 将飞机贴到窗口
        self.screen.blit(self.palyer, self.rect)

        #子弹自动移动 修改子弹y坐标
        self.bullets.update()

        #子弹显示窗口
        self.bullets.draw(self.screen)

    def update(self):
        self.auto_move()
        self.auto_fire()
        self.dispaly()

    def auto_move(self):
        if self.direction == 'right':
            self.rect.right += self.speed
        elif self.direction == 'left':
            self.rect.right -= self.speed

        if self.rect.right > 480-51:
            self.direction ='left'
        elif self.rect.right < 0:
            self.direction ='right'
    def auto_fire(self):
        """自动开火"""
        random_num = random.randint(1, 25)
        if random_num == 5:
            bullet = EmemyBullet(self.screen, self.rect.left, self.rect.top)
            self.bullets.add(bullet)


#子弹类
#属性
class Bullet(pygame.sprite.Sprite):
    def __init__(self,screen, x, y):
        #精灵类初始化
        pygame.sprite.Sprite.__init__(self)

        #创建图片
        self.image = pygame.image.load('./bullet.png')

        #获取矩形对象
        self.rect =self.image.get_rect()
        self.rect.topleft = [x+100/2-22/2,y-22/2]

        #窗口
        self.screen = screen
        #子弹速度
        self.speed =6

    def update(self):
        #修改子弹坐标
        self.rect.top -= self.speed
        #子弹移除屏幕销毁
        if self.rect.top < -22:
            self.kill()



#敌方子弹类
#属性
class EmemyBullet(pygame.sprite.Sprite):
    def __init__(self,screen,x,y):
        # 精灵类初始化
        pygame.sprite.Sprite.__init__(self)

        # 创建图片
        self.image = pygame.image.load('./bullet1.png')

        # 获取矩形对象
        self.rect = self.image.get_rect()
        self.rect.topleft = [x+50/2-8/2, y+39]

        #窗口
        self.screen = screen
        self.speed =6

    def update(self):
        # 修改子弹坐标
        self.rect.top += self.speed
        # 子弹移除屏幕销毁
        if self.rect.top < 852:
            self.kill()


class GameSound(object):
    def __init__(self,palyer):
        pygame.mixer.init()  # 音乐版块初始化
        pygame.mixer.music.load('suoyou.ogg.ogg')
        pygame.mixer.music.set_volume(0.5)

    def palyBackgroundMusic(self):
        pygame.mixer.music.play(-1)  # 播放音乐

def main():
    """完成整个程序的控制 """
    sound = GameSound()
    sound.palyBackgroundMusic()

    #创建一个窗口
    screen =pygame.display.set_mode((480,852),0,32)
    #创建一个图片
    background =pygame.image.load("background.png")
    #创建玩家飞机
    palyer = HorePlane(screen)
    #创建敌方飞机
    enemplane = EnemyPlane(screen)

    while True:
           # 将背景图片贴到窗口AD
           screen.blit(background, (0, 0))

           #获取事件
           for event in pygame.event.get():
              #判断事件类型
               if event.type == QUIT:
                   #执行PY退出
                   pygame.quit()
                   #py程序退出
                   exit()

           # 执行按键监听
           palyer.key_control()
           # 显示飞机
           palyer.dispaly()
           #显示敌方飞机
           enemplane.dispaly()
           #敌方飞机自动移动
           enemplane.auto_move()
           # 敌方飞机自动开关
           enemplane.auto_fire()


           #显示窗口内容
           pygame.display.update()
           sleep(0.01)


if __name__ == '__main__':
    main()
  • 写回答

1条回答 默认 最新

  • liqiang94 2021-03-30 16:33
    关注

    这个报错很明显啊,初始化GameSound的时候没有给参数。不过我看你的GameSound类也没有用到palyer,你就先把GameSound的__init__里的player参数删掉。

    评论

报告相同问题?

悬赏问题

  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿