発射体の動きのあるボールを投げたいです。画面の中央にサルがいて、onTouchBegin はタッチの始点を、onTouchEnded は終点をとっています。始点と終点から、それらの間の角度値を取得しています。30度とか45度とか90度とか。これは、始点から終点までの角度を計算した私のコードです
float angleRadians = atan2(startTouchPoint.x - touchPoint.x, startTouchPoint.y - touchPoint.y);
float angleDegrees = CC_RADIANS_TO_DEGREES(angleRadians);
float cocosAngle = -1 * angleDegrees;
今、私は上記の式から計算した角度でボールを投げるために発射体運動式を使用しています。
内部初期化メソッド
gravity = 9.8; // metres per second square
X = 0;
Y = 0;
V0 = 50; // meters per second -- elevation
VX0 = V0 * cos(angle); // meters per second
VY0 = V0 * sin(angle); // meters per second
gameTime = 0;
と onTouchEnded 私はボールを投げる fire メソッドを呼び出しました。
-(void)fire:(ccTime) dt
{
CCLOG(@"Angle 1: %.2f",angle);
gameTime += dt*6;
// x = v0 * t * cos(angle)
X = (V0 * gameTime * cos(angle))/2+120;
// y = v0 * t * sin(angle) - 0.5 * g * t^2
Y = (V0 * gameTime * sin(angle) - 0.5 * gravity * pow(gameTime, 2))/2+255;
if (Y > 50)
{
sprite_webfire.position = ccp(X,Y);
flag = true;
}
else
{
//angleValue += 15;
angleValue = angle;
angle = [self DegreesToRadians:angleValue];
gravity = 9.8; // metres per second square
X = 0;
Y = 0;
V0 = 50; // meters per second -- elevation
VX0 = V0 * cos(angle); // meters per second
VY0 = V0 * sin(angle); // meters per second
gameTime = 0;
// [self pauseSchedulerAndActions];
}
if (Y < 50)
{
[self unschedule:@selector(fire:)];
}
NSLog(@"ball (%lf,%lf), dt = %lf angle value %d", X, Y, dt,angleValue);
}
このコードは機能しています。このコードにより、発射体の動きでボールを投げることができますが、好きな場所に投げることができません。開始点から終了点まで、指定された角度に wrt を投げることはできません。
赤いマークのように投げることができますが、スワイプで青いマークを投げたいです。しかし、画面をスワイプしているように投げません。