Для этого я использую формулы движения снаряда, 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
ниже. Я оставляю эту часть тебе.
Запустить действие. т.е. * +1025 *
ProjectileLaunch* action = [ProjectileLaunch actionWithDuration:10
angle:45
initialVelocity:theVelocity
g:9.8];
[sprite runAction:action];
Надеюсь, это вам поможет.
Привет.