我想扔一个有抛射运动的球。我在屏幕中心有一只猴子,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 扔到给定的角度。
我可以像红色标记一样扔它,但我想用刷卡扔它蓝色标记。但它不像我在刷屏幕那样扔。