2点間移動の面白関数
以前、ふと作ったC関数です。(Objective-CでのC関数です)
2点間の等速移動(acceleに0を指定)、0速度からの加速移動(acceleに1を指定)、到達点で速度0(acceleに-1を指定)になる、というのを目的に作ったのですが、意外にも、acceleに2を指定すると、一端、後ろに戻って、そこから加速して、到達点を飛び越えて、反動をつけて戻ってくる、という動きになりました。
まるで、何かを投げる前に反動をつけて、投げるような動きをします。
到達点での動作は少々おかしいという時は、到達点とのヒットチェックを行って、関数から座標を使うのを止めて、移動速度を使うよにすると良いかと思います。
// sartPointからendPointへtotalFrameのフレーム数で移動する時、
// nowFrameで指定した位置とスピードを返す
// acceleの値が-1で、減速し行き、速度0でendPointに到達する
// acceleの値が0で、等速でendPointに到達する
// acceleの値が1で、初期速度0から加速し、endPointに到達する
TURUPointAndSpeed TuruMathGetPointAndSpeed(NSInteger totalFrame,
NSInteger nowFrame,
CGPoint startPoint,
CGPoint endPoint,
CGFloat accele)
{
TURUPointAndSpeed now;
CGPoint sub = TuruMath_SubPoint(startPoint,endPoint);
CGPoint startSpeed = CGPointMake(( 1 - accele ) * sub.x / totalFrame,
( 1 - accele ) * sub.y / totalFrame);
CGPoint endSpeed = CGPointMake(( accele + 1 ) * sub.x / totalFrame,
( accele + 1 ) * sub.y / totalFrame);
now.speed = CGPointMake(startSpeed.x + (endSpeed.x - startSpeed.x)/totalFrame * nowFrame,
startSpeed.y + (endSpeed.y - startSpeed.y)/totalFrame * nowFrame);
now.point = CGPointMake(startPoint.x + (startSpeed.x + now.speed.x) * nowFrame / 2,
startPoint.y + (startSpeed.y + now.speed.y) * nowFrame / 2) ;
return now;
}
これも投げ銭です。
ここから先に記事はありません。
使ってみて、「ホウ! 使える」とおもったりしたら、まあ、使わなくても面白かったら宜しくです。
ここから先は
¥ 100
宜しければ、ゲーム制作などのクリエーター活動のサポートをお願い致します。