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

コードは機能しますが、問題は、私が望むことをしないことです。現在、オブジェクトに近づくと速度が上がりますが、これはかなり奇妙に見えます。なぜこれを行うのかはよく知っていますが、速度を一定に修正する簡単な方法はありますが、方向は修正できませんか?

4

1 に答える 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
于 2013-02-16T16:51:30.443 に答える