Я вычисляю приращения от точки A (вверху справа) до точки B (внизу слева) со следующим кодом. Но по мере приближения к точке B мои приращения все больше и больше выходят из ожидаемого пути. Зеленая линия на изображении - это ожидаемый путь к белой точке.Приращение точек вдоль линии
public function get target():Point { return _target; }
public function set target(p:Point):void
{
_target = p;
var dist:Number = distanceTwoPoints(x, _target.x, y, _target.y); //find the linear distance
//double the steps to get more accurate calculations. 2 steps are calculated each frame
var _stepT:Number = 2 * (dist * _speed); //_speed is in frames/pixel (something like 0.2)
if (_stepT < 1) //Make sure there's at least 1 step
_stepT = 1;
_stepTotal = int(_stepT); //ultimately, we cannot have half a step
xInc = (_target.x - x)/_stepT; //calculate the xIncrement based on the number of steps (distance/time)
yInc = (_target.y - y)/_stepT;
}
private function distanceTwoPoints(x1:Number, x2:Number, y1:Number, y2:Number):Number
{
var dx:Number = x1-x2;
var dy:Number = y1-y2;
return Math.sqrt(dx * dx + dy * dy);
}
В принципе, я из идей. Единственное, что, кажется, чтобы получить белую точку, чтобы следовать зеленым точно отрегулировать положение цели следующим образом:
distanceTwoPoints(x, _target.x + 2, y, _target.y + 1);
//...
xInc = (_target.x + 2 - x)/_stepT;
yInc = (_target.y + 1 - y)/_stepT;
Однако, это сбросит другие части моделирования, где нет угла между точками, как попадание в точку A (вверху справа). Это заставляет меня думать, что расстояние между двумя точками должно быть рассчитано как короче, чем оно есть на самом деле. Есть идеи?
Это работает! Большое спасибо! Вы смягчили мою головную боль :) – chris