Первое замечание: математически я совсем не настолько искусен.
Некоторое время назад я играл в игру на iPhone, где вы нажимаете точку, и из вашего замка стреляет стрела, которая всегда пересекаетТочка, которую вы нажали.Я хотел сделать похожую игру, думая, что это будет легко и быстро;затем я столкнулся с осознанием того, что математика для этого на самом деле находится за пределами моего уровня квалификации.
Я предполагаю, что они используют формулу параболы или что-то такое, что будет определять скорость и угол, необходимые при запуске стрелкичтобы стрелка всегда пересекала точку щелчка.
Я лишь смутно помню, как параболы работают в школе, и у меня нет шансов выработать какие-либо формулы.
Любая математическая помощь или идеи, которые могут быть прощереализовать было бы здорово.
Я хочу закончить с функцией в моем замке, например, так:
package
{
import avian.framework.objects.AvElement;
public class Castle extends AvElement
{
/**
* Fires an arrow from this
* @param ix The x intersection point
* @param iy The y intersection point
*/
public function fire(ix:Number, iy:Number):void
{
var ar:Arrow = new Arrow();
ar.x = x;
ar.y = y;
// define angle and velocity based on ix, iy
// ar.fireAngle = ??
// ar.fireVelocity = ??
parent.addChild(ar);
}
}
}
Обновление согласно вопросам в комментариях:
К стрелке не будет применено никаких сил, таких как ветер, трение и т. Д. Кроме того, начальная точка стрелки фиксируется на протяжении всей игры (в замке).
Вот примерИзображение для большей ясности:
Чтобы быть как можно более четким:
- Стрелка всегда начинает свой путь с фиксированной точки (скажем:40, 120).
- Стрелка всегда должна пересекать заданную координату.
- Реальный путь - это то, чего я хотел бы достичь (очевидно, я могу просто стрелять прямо, чтобы перехватитьлюбая точка, но цель 1031 * состоит в том, чтобы стрелка сначала поднималась, а затем опускалась;проходя через желаемую координату в самой реалистичной точке своего пути).
Примечание: Чтобы избежать вопроса о наличии бесконечно возможных парабол, скорость стрелки может бытьисправлено - просто посмотрите на определение угла, под которым стрелка может оставаться.