我想拋出一個有拋射體運動的球。我在屏幕中心有一隻猴子,onTouchBegin我在觸摸的起點和onTouchEnded我正在取得終點。從開始和結束點,我正在採取他們之間的角度值。像30度,45度或90度。 這是我的代碼,通過該我已經計算開始的角度向端點Cocos2d中的拋射物運動iphone
float angleRadians = atan2(startTouchPoint.x - touchPoint.x, startTouchPoint.y - touchPoint.y);
float angleDegrees = CC_RADIANS_TO_DEGREES(angleRadians);
float cocosAngle = -1 * angleDegrees;
我現在用拋射體運動式拋與我已經從上面的公式計算角球。
init方法裏面
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我已經叫火法,將拋出球。
-(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扔到從開始到結束點的角度。
我可以扔它像紅色標記,但我想扔它刷藍色標記。但它不會像我一樣滑動屏幕。
你爲什麼要在X和Y上加120和225? – bluestunt
我從其他網站複製了這個等式。 – Zohaib