スワイプスピードでボールを投げたいけど、物理エンジンは使いたくありません。だから、どうすればいいか教えてください。cocos2dを使ってボールを投げますが、物理エンジンは一切使用しないでください
おかげ
スワイプスピードでボールを投げたいけど、物理エンジンは使いたくありません。だから、どうすればいいか教えてください。cocos2dを使ってボールを投げますが、物理エンジンは一切使用しないでください
おかげ
私はココスアクションと一緒に、http://en.wikipedia.org/wiki/Projectile_motion、これを行うために発射モーション式を使用しています。ここでは、可能なアプローチがあります。
発射式のパラメータを受け取り、発射位置を更新CCActionInterval
サブクラスを実装します。この場合、ProjectileAction
。これらは、あなたに必要な重要なメソッドですオーバーライド:
-(void) startWithTarget:(id)target
{
self.initialPosition = [target position];
self.elapsedTime = 0;
[super startWithTarget:target];
}
-(void) update: (ccTime) tt
{
self.elapsedTime += tt;
float t = self.elapsedTime;
float theta = CC_DEGREES_TO_RADIANS(self.angle);
float v0 = self.velocity;
float g = self.gravitationalAcceleration;
double x = v0 * cos(theta) * t;
double y = v0 * sin(theta) * t - 0.5 * g * t * t ;
[self.target setPosition: ccp(self.initialPosition.x + (float)x, self.initialPosition.y + (float)y)];
}
上記の式では、ボールの初速に変換します速度を、認識するために、あなたのスワイプジェスチャーを使用し、パラメータはtheVelocity
です。私はあなたにその部分を残します。
アクションを実行します。すなわち
ProjectileLaunch* action = [ProjectileLaunch actionWithDuration:10
angle:45
initialVelocity:theVelocity
g:9.8];
[sprite runAction:action];
私はこれがあなたを助けてくれることを願っています。
よろしくお願いいたします。
物理エンジンを明示的に使用することなく、シンプルで効果的なアプローチでは、ボールのスプライトの速度と位置をオイラースタイルの更新ループに手動で設定する必要があります。そして
-(void) update: (ccTime) dt
{
// Step only the y-velocity
velocity_y += GRAVITY * dt;
// Step the position values and update the ball sprite position accordingly
ball.position.x += velocity_x * dt;
ball.position.y += velocity_y * dt;
}
場合:(下向きの重力を有する)は、典型的な場合
、あなたはx方向、y方向及び一定速度での非一定の速度を有するであろうことは、したがって、次のコードスワイプイベントが検出され、必要に応じて、