画面上の 2 点間の滑らかな動きをアニメーション化しようとしています。現時点では、次の python ジェネレーター関数を使用して、画像を描画するポイントを決定しています。
#indexes (just for readability)
X=0
Y=1
def followLine(pointA, pointB, speed):
x1, y1 = pointA
x2, y2 = pointB
movement=[0, 0]
pos=list(pointA)
diffY=y2-y1
diffX=x2-x1
if abs(diffY) > abs(diffX):
#Y distance is greater than x distace
movement[Y]=speed
numFrames=abs(diffY)//speed
if numFrames==0:
movement[X]=0
else:
movement[X]=abs(diffX)//numFrames
elif abs(diffY) < abs(diffX):
#Y distance is less than x distace
movement[X]=speed
numFrames=abs(diffX)//speed
if numFrames==0:
movement[Y]=0
else:
movement[Y]=abs(diffY)//numFrames
else: #Equal
movement=[speed]*2
if diffY < 0:
#is negative
movement[Y] *= -1
if diffX < 0:
movement[X] *= -1
yield pointA
while (abs(pos[X]-x2) > speed)or(abs(pos[Y]-y2) > speed):
pos[X] += movement[X]
pos[Y] += movement[Y]
yield pos
yield pointB
ただし、これには 2 つの問題があります。
まず、私の主な懸念は、
pointA
とpointB
が非常に離れている場合、または速度が遅すぎる場合、アニメーションがすぐに通過しpointB
、無限に進み続けることです。もう 1 つの問題は、アニメーションの最後に、画像が所定の位置にスナップするときに、ある種の衝撃があることです。通常、この衝撃はほとんど感じられませんが、アニメーションをよりスムーズにするように努めたいと思います。
これどうやってするの?私は三角関数の使用を検討しており、それは有望に思えますが、私は数学にあまり詳しくないので、三角関数を使用してそれを実装する方法を正確に理解するのに苦労しています.
また、私は Python 3.2 を使用しています。