Я сам что-то делал, и мне нужно, чтобы это выглядело немного лучше, чем просто треугольник, и использовал относительно недорогие вычисления (как можно меньше вызовов других функций, таких как математическая тригонометрия). Вот оно:
public static function DrawArrow(ax:int, ay:int, bx:int, by:int):void
{
// a is beginning, b is the arrow tip.
var abx:int, aby:int, ab:int, cx:Number, cy:Number, dx:Number, dy:Number, ex:Number, ey:Number, fx:Number, fy:Number;
var size:Number = 8, ratio:Number = 2, fullness1:Number = 2, fullness2:Number = 3; // these can be adjusted as needed
abx = bx - ax;
aby = by - ay;
ab = Math.sqrt(abx * abx + aby * aby);
cx = bx - size * abx / ab;
cy = by - size * aby / ab;
dx = cx + (by - cy) / ratio;
dy = cy + (cx - bx) / ratio;
ex = cx - (by - cy) / ratio;
ey = cy - (cx - bx) / ratio;
fx = (fullness1 * cx + bx) / fullness2;
fy = (fullness1 * cy + by) / fullness2;
// draw lines and apply fill: a -> b -> d -> f -> e -> b
// replace "sprite" with the name of your sprite
sprite.graphics.clear();
sprite.graphics.beginFill(0xffffff);
sprite.graphics.lineStyle(1, 0xffffff);
sprite.graphics.moveTo(ax, ay);
sprite.graphics.lineTo(bx, by);
sprite.graphics.lineTo(dx, dy);
sprite.graphics.lineTo(fx, fy);
sprite.graphics.lineTo(ex, ey);
sprite.graphics.lineTo(bx, by);
sprite.graphics.endFill();
}
Вы также можете добавить цвет и толщину линии в список аргументов и, возможно, сделать ее функцией-членом расширенного Sprite, и у вас будет довольно приятная, универсальная функция :) Вы также можете немного поиграть с числами получить разные формы и размеры (небольшие изменения полноты вызывают сумасшедшие изменения во внешнем виде, поэтому будьте осторожны :)). Только будьте осторожны, чтобы не установить соотношение или наполненность2 к нулю!