Python pygame中的角运动
我定义了一个函数,允许我沿对角线移动对象:Python pygame中的角运动,python,pygame,game-physics,Python,Pygame,Game Physics,我定义了一个函数,允许我沿对角线移动对象: if(myX > targetX): dx = myX - targetX else: dx = targetX - myX if(myY > targetY): dy = myY - targetY else: dy = targetY - myY if(dy == 0): dy = 1 if(dx == 0
if(myX > targetX):
dx = myX - targetX
else:
dx = targetX - myX
if(myY > targetY):
dy = myY - targetY
else:
dy = targetY - myY
if(dy == 0):
dy = 1
if(dx == 0):
dx = 1
#Calc Movement
if(dx < dy):
Speedy = dy/dx
Speedx = 1
if(dx > dy):
Speedy = 1
Speedx = dx/dy
elif(dx == dy):
Speedx = 1
Speedy = 1
if(myX < targetX):
Speedx = Speedx * -1
if(myY < targetY):
Speedy = Speedy * -1
return Speedx,Speedy
if(myX>targetX):
dx=myX-targetX
其他:
dx=targetX-myX
如果(myY>targetY):
dy=myY-targetY
其他:
dy=targetY-myY
如果(dy==0):
dy=1
如果(dx==0):
dx=1
#钙运动
如果(dxdy):
速度=1
速度x=dx/dy
elif(dx==dy):
Speedx=1
速度=1
如果(myX
代码是有效的,但问题是它不能满足我的要求。现在,如果我靠近它,物体会加速,这看起来很奇怪。我很清楚它为什么会这样做,但是有没有一种简单的方法来固定速度不变,而不是方向?如果你这样做,dx和dy是从你的人指向目标的向量的标量。然后除以它们的大小,这里用dz表示。现在dx和dy代表一个单位向量。一旦你把它们乘以速度,你会让你的物体以恒定的速度移动,但方向不同
import math
#set speed to how fast you want your guy to move
speed = 1
dx = myX - targetX
dy = myY - targetY
dz = math.sqrt(dx**2 + dy**2)
speedx = dx/dz * speed
speedy = dy/dz * speed
该学点三角了!你可以计算出它需要进入的角度,然后用sin和cos得到x和y。从这里你可以乘以你想要的速度。@placeybordeaux:虽然三角法可以工作,但这不是一个要求。或者,如果你想在
num_步数
中从点My
到target
,只需使用speedx=float(dx)/num_步数
和speedy=float(dy)/num_步数
。试过了,但是不起作用,所以我尝试了三元的版本。也不管用。原来我需要的速度高于1,否则它将不会移动:S得到了它的工作tho,谢谢你的帮助!