Pygame中的角度运动

0 投票
1 回答
1579 浏览
提问于 2025-04-17 16:06

我定义了一个函数,可以让我让一个物体斜着移动:

    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

撰写回答