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()
初学 这个报错怎么解决呀
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- liqiang94 2021-03-30 16:33关注
这个报错很明显啊,初始化GameSound的时候没有给参数。不过我看你的GameSound类也没有用到palyer,你就先把GameSound的__init__里的player参数删掉。
解决 1无用
悬赏问题
- ¥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代码,有偿