Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何围绕一个位置创建精灵?_Python_Pygame - Fatal编程技术网

Python 如何围绕一个位置创建精灵?

Python 如何围绕一个位置创建精灵?,python,pygame,Python,Pygame,对于我正在创建的一个游戏,我有敌舰,它们可以向玩家精灵发射激光。 这些敌人为了面对玩家而旋转,然后发射一枚旨在与玩家飞船相撞的射弹 然而,这些激光精灵目前在一个固定的位置产卵,因此,当玩家四处移动时,可以与敌舰攻击箱重叠,如你所见 我怎样才能使产卵位置在敌人精灵的边缘移动,从而使激光在敌人精灵之外产生 相关部分在第146行的无人机类和第44行的激光类的放炮方法中 以下是简化的代码,如果需要可以复制: 导入pygame 导入系统 导入时间 输入数学 pygame.init() 宽度=750 高度=

对于我正在创建的一个游戏,我有敌舰,它们可以向玩家精灵发射激光。 这些敌人为了面对玩家而旋转,然后发射一枚旨在与玩家飞船相撞的射弹

然而,这些激光精灵目前在一个固定的位置产卵,因此,当玩家四处移动时,可以与敌舰攻击箱重叠,如你所见

我怎样才能使产卵位置在敌人精灵的边缘移动,从而使激光在敌人精灵之外产生

相关部分在第146行的无人机类和第44行的激光类的放炮方法中

以下是简化的代码,如果需要可以复制:

导入pygame
导入系统
导入时间
输入数学
pygame.init()
宽度=750
高度=750
尺寸=宽度、高度
CLOCK=pygame.time.CLOCK()
screen=pygame.display.set_模式(大小)
FPS=120
def在游戏()中:
运行=真
全球玩家
玩家=主船(310600)
全球敌人
敌人=[无人机弧(50,50,(50,50),0),无人机弧(50650,(50,50),0)]
运行时:
屏幕填充(0)
player.x,player.y=pygame.mouse.get_pos()
player.draw()
敌人中的敌人[:]:
角度=90数学度(数学角2((player.y+player.get_height()/2-(敌方.y+敌方.get_height()/2)),(player.x+player.get_width()/2-(敌方.x+敌方.get_width()/2)))
敌方。旋转船(角度)
敌人,抽签
敌人,射击(角度)
敌人,移动激光(玩家)
如果发生碰撞(敌人、玩家):
敌人。移开(敌人)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
时钟滴答声(FPS)
def碰撞(obj1、obj2):
偏移量_x=obj2.x-obj1.x
偏移量_y=obj2.y-obj1.y
返回obj1.mask.overlap(obj2.mask,((int(offset_x)),((int(offset_yЮЮ)'))
激光类(pygame.sprite.sprite):
定义初始化(self,x,y,w,h,dx,dy):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.original_image=pygame.Surface([w,h],pygame.SRCALPHA)
self.color=(255,0,0)
self.original_image.fill(self.color)
self.image=self.original\u图像
self.mask=pygame.mask.from_surface(self.image)
self.dx=dx
self.dy=dy
self.x=x
self.y=y
self.rect=self.image.get_rect(中心=(self.x,self.y))
def提取(自身,屏幕):
screen.blit(self.image,self.rect)
def旋转_激光器(自身、角度):
self.image=pygame.transform.rotate(self.original\u图像,角度)
self.rect=self.image.get_rect(中心=(self.x,self.y))
self.mask=pygame.mask.from_surface(self.image)
def移动(自身、速度):
self.x+=self.dx*速度
self.y+=self.dy*速度
self.rect=self.image.get_rect(中心=(self.x,self.y))
def碰撞(自身、obj):
返回碰撞(自身,obj)
等级船(pygame.sprite.sprite):
定义初始化(self,x,y):
self.x=x
self.y=y
self.ship\u img=无
self.laser\u img=无
self.lasers=[]
自我冷却\计数器=0
def冷却(自):
如果self.cooldown\u计数器>=self.cooldown:
自我冷却\计数器=0
elif自我冷却\u计数器>0:
自我冷却计数器+=1
def get_宽度(自身):
返回self.image.get_width()
def get_高度(自身):
返回self.image.get_height()
def旋转(自身、角度):
w、 h=self.original\u image.get\u size()
box=[pygame.math.Vector2(p)表示[(0,0),(w,0),(w,-h),(0,-h)]]
box_rotate=[p.rotate(角度)表示框中的p]
min_box=(min(box_rotate,key=lambda p:p[0])[0],min(box_rotate,key=lambda p:p[1])[1])
max_box=(max(box_rotate,key=lambda p:p[0])[0],max(box_rotate,key=lambda p:p[1])[1])
pivot=pygame.math.Vector2(w/2,-h/2)
枢轴旋转=枢轴旋转(角度)
枢轴移动=枢轴旋转-枢轴
原点=(self.x-w/2+最小框[0]-枢轴移动[0],self.y-h/2-最大框[1]+枢轴移动[1])
self.image=pygame.transform.rotate(self.original\u图像,角度)
self.mask=pygame.mask.from_surface(self.image)
主船(船)级:
冷却时间=15
定义初始化(self,x,y):
super().\uuuu init\uuuu(x,y)
self.original_image=pygame.Surface([36,62],pygame.SRCALPHA)
self.color=(255255)
self.original_image.fill(self.color)
self.image=self.original\u图像
self.mask=pygame.mask.from_surface(self.image)
def牵引(自):
blit(self.image,(self.x,self.y))
无人机等级(船):
冷却时间=50
定义初始(自身、x、y、路径、速度):
super().\uuuu init\uuuu(x,y)
self.original_image=pygame.Surface([36,36],pygame.SRCALPHA)
self.color=(255255)
self.original_image.fill(self.color)
self.image=self.original\u图像
self.mask=pygame.mask.from_surface(self.image)
自身激光速度=3
自转角=0
def喷射(自身、角度):
如果self.cooldown_计数器==0:
弧度=math.atan2((player.y+player.get_height()/2-(self.y+self.get_height()/2)),(player.x+player.get_width()/2-(self.x+self.get_width()/2)))
dx=数学cos(弧度)
dy=数学sin(弧度)
cx,cy=self.x+self.get_height()/2,self.y+self.get_width()/2
lx,ly=cx+dx*(self.get\u height()/2+11),cy+dy*(self.get\u height()/2+11)
打印(dx,dy)
激光_1=激光(lx,ly,81,22,dx,dy)
激光器1.旋转激光器(角度)
self.lasers.append(激光1)
自我冷却\u计数器=1
def m