Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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中的角运动_Python_Pygame_Game Physics - Fatal编程技术网

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,谢谢你的帮助!