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;
}

 これも投げ銭です。
 ここから先に記事はありません。
 使ってみて、「ホウ! 使える」とおもったりしたら、まあ、使わなくても面白かったら宜しくです。

ここから先は

0字

¥ 100

期間限定 PayPay支払いすると抽選でお得に!

宜しければ、ゲーム制作などのクリエーター活動のサポートをお願い致します。