Estoy tratando de manipular un objeto. Cuando se acerca a otro objeto, digamos un globo terráqueo, quiero que el globo tenga una atracción gravitacional sobre el objeto original. Sé que se supone que debo usar CCBezierTo
, así que esto no es tanto una cuestión de programación como una cuestión matemática.Cocos2D curva de Bezier alrededor del objeto como por gravedad
Matemáticamente, cómo podría deducir los tres puntos de la curva bezier (1, 2 y final) y darle un peso según su distancia (más lejos = menos tirón). Ya tengo la distancia mapeada en una variable.
Piensa en una nave espacial tirando de una honda alrededor de la luna.
Código:
ccBezierConfig bezier;
bezier.controlPoint_1 = ccp(projectile.position.x + 10, projectile.position.y + 20);
bezier.controlPoint_2 = ccp(projectile.position.x + 20, projectile.position.y + 40);
bezier.endPosition = ccp(projectile.position.x + 30, projectile.position.y+60);
id bezierAction = [CCBezierTo actionWithDuration:1 bezier:bezier];
[projectile stopAllActions];
[projectile runAction: bezierAction];
¿Por qué no simplemente aplica un vector de fuerza al proyectil proporcional al cuadrado de la distancia al objeto? es decir, ¿por qué no simplemente "hacer la gravedad"? El camino será naturalmente curvado, suponiendo que el proyectil no se dirige directamente hacia el centro del objeto. – Robinson
http://oreilly.com/catalog/9780596000066 –