Pygame中的角度运动
我定义了一个函数,可以让我让一个物体斜着移动:
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
这个代码是能运行的,但问题是它没有达到我想要的效果。现在,如果我靠近这个物体,它的速度会加快,这看起来有点奇怪。我知道为什么会这样,但有没有简单的方法可以让速度保持不变,而方向可以自由变化呢?
1 个回答
2
如果你这样做,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