Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/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 pygame一个敌人向玩家的二维移动,如何计算x和y速度?_Python_Vector_Pygame - Fatal编程技术网

Python pygame一个敌人向玩家的二维移动,如何计算x和y速度?

Python pygame一个敌人向玩家的二维移动,如何计算x和y速度?,python,vector,pygame,Python,Vector,Pygame,在我目前正在制作的游戏中,我需要向一名玩家进行一次十周年移动(这里的敌人是一个blob),为了做到这一点,我已经创建了一个函数:def calculate\u敌军\u movement(敌人):,在该函数中我放置了该函数需要执行的操作: 计算每帧需要添加的x值(x速度),以及每帧需要添加的y值(y速度)到敌方.x和敌方.y中,向玩家.x和玩家.y走去,然后返回x速度和y速度。 这里调用这个函数:将x速度和y速度添加到每帧的x和y位置 敌方blob.x,敌方blob.y+=计算敌方移动(敌方blo

在我目前正在制作的游戏中,我需要向一名玩家进行一次十周年移动(这里的敌人是一个blob),为了做到这一点,我已经创建了一个函数:
def calculate\u敌军\u movement(敌人):
,在该函数中我放置了该函数需要执行的操作:

计算每帧需要添加的x值(x速度),以及每帧需要添加的y值(y速度)到
敌方.x
敌方.y
中,向
玩家.x
玩家.y
走去,然后返回x速度和y速度。
这里调用这个函数:将x速度和y速度添加到每帧的x和y位置
敌方blob.x,敌方blob.y+=计算敌方移动(敌方blob)

现在我只需要有人帮我创建这个函数。我已经研究过它了,我知道它和向量数学有关,但我不确定它到底是如何工作的,所以如果有人能写这个函数并向我解释它是如何工作的,我会非常高兴

如果您需要代码的其余部分:

导入pygame
导入操作系统
导入系统
从数学导入*
输入数学
从输入导入元组开始
从pygame.locals导入*
运行=错误
类游戏():
定义初始化(自):
main()
pygame.init()
FPS=60
ani=4
def对角线x水平(速度):
对角线x=int((math.pi/4)*速度)
返回对角线x
def对角线y水平(速度):
对角线y=int(sin(math.pi/4)*速度)
返回对角线y
def移动(矩形,移动):
全球玩家
矩形x+=移动[0]
矩形y+=移动[1]
返回矩形
宽度,高度=19201080
player\u action=“空闲”
player\u frame=0
类播放器():
定义初始化(自):
self.main字符高度,self.main字符宽度=35*4,35*4
self.main\u char\u x=宽度/2-self.main\u char\u宽度/2
self.main\u char\u y=高度/2-self.main\u char\u高度/2
self.current_health=80
自身最大健康=100
自我健康条长度=500
self.health\u比率=self.maximum\u health/self.health\u条长度
self.moving\u right,self.moving\u left,self.moving\u down,self.moving\u up,self.idle=False,False,False,False,True
self.player_rect=pygame.rect(self.main_char_x,self.main_char_y,self.main_char_宽度,self.main_char高度)
self.player\u flip=False
self.VEL=8
def update():
通过
def提取dmg(自身,数量):
如果self.current_health>0:
self.current_health-=金额
如果self.current\u health=self.maximum\u health:
self.current\u health=self.maximum\u health
类敌人():
定义初始(自我、健康、攻击伤害、原始速度、x、y、高度、宽度、动作、对角线水平、对角水平):
self.x=x
self.y=y
自我健康
自攻伤害=攻击伤害
self.speed=原始速度
self.敌军_rect=pygame.rect(x,y,宽度,高度)
行动
WIN=pygame.display.set_模式([宽度,高度],pygame.FULLSCREEN)
pygame.display.set_标题(“第一场游戏”)
player=player()
动画_帧={}
def加载动画(路径、图像名称、帧持续时间、缩放宽度、缩放高度):
全局动画帧
动画\帧\数据=[]
n=0
对于帧中帧的持续时间:
动画\u帧\u id=图像\u名称+“\u”+str(n)
img\u loc=path+“/”+动画\u帧\u id+“.png”
animation\u image=pygame.transform.scale(pygame.image.load(img\u loc)),
(缩放宽度、缩放高度)).convert_alpha()
动画_image.convert()
动画\u帧[动画\u帧\u id]=动画\u图像.copy()
对于范围内的i(帧):
动画帧数据。附加(动画帧id)
n+=1
返回动画\帧\数据
def更改动作(动作变量、帧、新值):
如果操作_var!=新值:
动作变量=新值
返回动作变量,帧
动画_数据库={}
动画库[“空闲”]=加载动画(“资源”,“暗色调空闲”,[8,8,8,8],player.main\u字符宽度,
播放器。主屏幕(字符高度)
动画数据库[“运行顶部”]=加载动画(“资源”,“暗曲线运行起来”,[8,8,8,8,8],
player.main\u char\u宽度,
播放器。主屏幕(字符高度)
动画数据库[“运行机器人”]=加载动画(“资源”,“暗色调”运行机器人“,[8,8,8,8,8],
player.main\u char\u宽度,player.main\u char\u高度)
动画数据库[“运行”]=加载动画(“资源”,“暗曲线运行”,[8,8,8,8,8,8,8],player.main\u字符宽度,
播放器。主屏幕(字符高度)
滚动=[0,0]
水滴高度=17
水滴宽度=25
blob_帧=0
敌方=敌方(50,10,5,1000,1000,17,25,“blob\U idle”,0,0)
动画库[“blob_idle”]=加载动画(“资源”,“blob_idle”,[30,30],blob_宽度*4,blob_高度*4)
clock=pygame.time.clock()
def冲突(rectA、rectB):
如果rectB.rightrectA.right:
#直发岩
返回错误
如果rectB.top>rectA.bottom:
#直肌
返回错误
elif rectB.right>rectA.left:
#这是一个很好的例子
返回真值
elif rectB.bottomrectA.right:
#直接碰撞法
返回真值
elif rectB.top>rectA.bottom:
#直接碰撞