我原本想做一个冒险游戏,但我发现关于子弹发射这里出了bug
from pygame import *
class Button(sprite.Sprite):
def __init__(self,start,angle,camera):
#继承父类Sprite
super().__init__()
#Sprite变量
self.rect=(start[0],start[1]+16)
self.image=image.load('./player/button/1.png')
#自定义变量
self.fps=1
self.wt=0 #如果一直运行样子会鬼畜,设置一个等待时间
self.speed=8*angle
self.c=camera #子弹也有相对位置
def update(self,camera):
self.c[0]+=self.speed
s=[self.c[0]-camera[0],self.c[1]-camera[1]+16]
k=((800-32)//2,(608-32)//2)
self.rect=(k[0]+s[0],k[1]+s[1])
self.wt+=1
self.image=image.load('./player/button/'+str(self.fps)+'.png')
if self.wt>40:
self.fps+=1
if self.fps>2:
self.fps=1
self.wt=0
if self.rect[0]<-500 or self.rect[0]>1300:
self.kill()
class Kid(sprite.Sprite):
def __init__(self):
#继承父类Sprite
super().__init__()
#Sprite的变量
self.image=image.load('./player/action/wait/right/1.png')
self.rect=((800-32)//2,(608-32)//2)
#自定义的变量
self.angle='right'
self.action='wait' #一共两个动作run和wait
self.fps=0
self.wt=0 #如果一直运行样子会鬼畜,设置一个等待时间
self.camera=[96,96] #人的位置不变,背景变;用列表方便读取
self.blood=100
self.before=self.camera
self.fire=False #避免一直发射
#子弹
self.KidButton=sprite.Group()
self.ButtonName=[]
#加载音效
self.shoot=mixer.Sound('./player/sound/shoot.wav')
self.wound=mixer.Sound('./player/sound/wounded.wav')
def move(self):
e=key.get_pressed()
self.before=self.camera
#射击
if e[K_z]:
self.fire=True
#实际开火
if self.fire and not e[K_z]:
self.fire=False
# 播放音效
self.shoot.play()
# 这时需要一个Button类
self.ButtonName.append(Button(self.rect,{'right':1,'left':-1}[self.angle],self.camera))
# 加入精灵组
self.ButtonName[len(self.ButtonName)-1].add(self.KidButton)
# 基础的移动代码
if e[K_RIGHT]:
self.camera[0]+=4
self.angle='right'
self.action='run'
if e[K_LEFT]:
self.camera[0]-=4
self.angle='left'
self.action='run'
if e[K_UP]:
self.camera[1]-=4
self.action='run'
if e[K_DOWN]:
self.camera[1]+=4
self.action=='run'
if not (e[K_RIGHT] or e[K_LEFT] or e[K_UP] or e[K_DOWN]):
#没有移动
self.action='wait'
def update(self,screen):
self.wt+=1
screen.blit(self.image,self.rect)
#等待是否刷新角色(防鬼畜)
if self.wt==10:
self.fps+=1
flip={'run':5,'wait':4}
if self.fps>flip[self.action]:
self.fps=1
self.wt=0
self.surface='./player/action/'+self.action+'/'+self.angle+'/'+str(self.fps)+'.png'
self.image=image.load(self.surface)
for sprite in self.KidButton.sprites():
sprite.update(self.camera)
self.KidButton.draw(screen)
问个问题,这里运行之后按一下z,camera就会无缘无故增加,有谁能指点一下bug在哪?谢了!
不知道你这个问题是否已经解决, 如果还没有解决的话: