Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как нестандартно нарисовать линию? (http://www.flasher.ru/forum/showthread.php?t=153445)

Тимур 03.04.2011 01:25

Как нестандартно нарисовать линию?
 
Доброго времени суток...Я делаю флешку, где линия одним концом привязана к точке, а другой конец со стрелкой должен следовать за объектом, причем следовать не докасаясь до него...я реализовал это так:
- сделал регистрационной точкой объекта(за которым следует второй конец со стрелкой) центр этого объекта
- стрелку сделал отдельным объектом и сместил ее от регистрационной точки на расстояние достаточное, чтобы она ни с какой стороны при поворотах не касалась объекта
- рассчитываю угол поворота стрелки относительно координат начала и конца линии
- линию рисую (move to, line to) - первые координаты-точка, стоящая постоянно на месте, вторые координаты - регистрационная точка объекта

Я получаю что эта линия постоянно привязана к центру, а как сделать так чтобы она была привязана к самой стрелке(напомню, что она находится на определенном расстоянии от регистрационной точки)

Hauts 03.04.2011 12:49

Вам, в принципе, не зачем сдвигать стрелку относительно ее регистрационной точки. Можно так:

1. Считайте угол в радианах между двумя точками с помощью Math.atan2
2. Считайте расстояние между точками с помощью теоремы Пифагора.
3. Исходные координаты у вас есть (фиксированная точка), а вот конечные получите так:

Код AS1/AS2:

var endX:Number = startX + Math.cos( angle ) * (dist - offset);
var endY:Number = startY + Math.sin( angle ) * (dist - offset);

Где dist — это расстояние между точками, а offset — это то, насколько линия не должна доходить до второго объекта.

iNils 03.04.2011 15:44

Тимур, для оформления своего кода надо использовать теги [code][/code]

Тимур 03.04.2011 16:07

Прошу прощения, исправлюсь...

А почему именно atan2? он у меня сейчас выдает angle = NaN;
Код:

var angle:Number = Math.atan2((y2 - y1) / (x2 - x1)) * 180 / Math.PI;
даже если в радианах:
Код:

var angle:Number = Math.atan2((y2 - y1) / (x2 - x1)) * 180;
результат тот же NaN


Часовой пояс GMT +4, время: 00:27.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.