Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.04.2008, 21:01
fisherman вне форума Посмотреть профиль Отправить личное сообщение для fisherman Найти все сообщения от fisherman
  № 1  
Ответить с цитированием
fisherman

Регистрация: Apr 2008
Сообщений: 16
По умолчанию Стрелочки

Привет всем. Такой вопрос: как рисовать программно стрелки с помощью AS? Простмотрев "линию" в AS не обнаружил как сделать её направленной(конец линии должен быть, как в математике у векторов)
И если в AS такого не предусмотрено, то, получаеся, что конец линии программно придется рисовать самому? Помогите разбраться, пожалуйста (примеры с различными методами рисования направленных линий приветствуются)
Вот, собственно, весь вопрос.

Старый 18.04.2008, 21:05
Vertax вне форума Посмотреть профиль Отправить личное сообщение для Vertax Найти все сообщения от Vertax
  № 2  
Ответить с цитированием
Vertax

Регистрация: Oct 2005
Сообщений: 207
Естественно самому.
Как вариант вот:
Код:
SIN = function (ANGLE) {return Math.sin(ANGLE * Math.PI / 180);}
COS = function (ANGLE) {return Math.cos(ANGLE * Math.PI / 180);}

MovieClip.prototype.arrowTo = function (X1, Y1, X2, Y2)
{
	angle = Math.floor(180 * Math.atan2((X2 - X1), (Y2 - Y1)) / Math.PI);
	this.moveTo(X1, Y1);
	this.lineTo(X2, Y2);
	this.lineTo(SIN(angle + 150) * 10 + X2, COS(angle + 150) * 10 + Y2);
	this.moveTo(X2, Y2);
	this.lineTo(SIN(angle - 150) * 10 + X2, COS(angle - 150) * 10 + Y2);
}

this.lineStyle(1, 0xFF0000);
this.arrowTo(100, 100, 200, 200);
this.arrowTo(200, 200, 400, 200);
this.arrowTo(400, 200, 50, 100);


Последний раз редактировалось Vertax; 19.04.2008 в 20:31.
Старый 19.04.2008, 14:02
fisherman вне форума Посмотреть профиль Отправить личное сообщение для fisherman Найти все сообщения от fisherman
  № 3  
Ответить с цитированием
fisherman

Регистрация: Apr 2008
Сообщений: 16
Едрёно, надо сказать, написано. Даже разобравшись в используемых функциях, сложно понять, как до этого самому дойти можно было). Можно ещё небольшой вопросик? Как написать действие, допустим, той же стрелки, на событие Startdrag другого мувиэклипа. Или пошире (ибо нужна лишь метода).. Любое действие какого-то конкретного клипа на событие Starеdrag другого клипа.
Пример со стрелками хорош, спасибо большое.

Старый 19.04.2008, 19:24
lexo2000 вне форума Посмотреть профиль Отправить личное сообщение для lexo2000 Найти все сообщения от lexo2000
  № 4  
Ответить с цитированием
lexo2000

Регистрация: Dec 2007
Сообщений: 23
Можно поступить так - координаты начала линии принять за Х1 и Y1 из данного примера, координаты клипа (который StartDrag) за Х2 и Y2 соответственно, ну и далее по тексту. И будет вам стрелочка и клипу, если вы, конечно, это имели ввиду.

Старый 20.04.2008, 13:19
fisherman вне форума Посмотреть профиль Отправить личное сообщение для fisherman Найти все сообщения от fisherman
  № 5  
Ответить с цитированием
fisherman

Регистрация: Apr 2008
Сообщений: 16
Нет, мне нужно перерисовывать стрелку при изменении координат клипа, допустим перетаскиваем клип, стрелка заново к нему рисуется. Рисоваться и затираться, конечно, будет много раз, чтобы для пользователя она "тянулась за клипом". Нужно писать код внутри стрелки. Имя клипа заранее известно. Казалось бы все просто setInterval - в нем затирать(clear) и перерисовывать(arrowTo), но на событие onPress уже описаны действия внутри самого клипа. Если внутри стрелки на onPress что-то писать - призойдет перекрытие. Поэтому пока для меня не ясно что сделать.. А создать свое событие startDrag(какой-то конкретный клип) можно?


Последний раз редактировалось fisherman; 20.04.2008 в 13:22.
Старый 20.04.2008, 20:09
Vertax вне форума Посмотреть профиль Отправить личное сообщение для Vertax Найти все сообщения от Vertax
  № 6  
Ответить с цитированием
Vertax

Регистрация: Oct 2005
Сообщений: 207
На базе все того же кода.
Есть клипы clip1 и clip2
Код:
updateArrow = function (X1, Y1, X2, Y2)
{
	this.clear();
	this.lineStyle(1, 0xFF0000);
	angle = Math.floor(180 * Math.atan2((X2 - X1), (Y2 - Y1)) / Math.PI);
	len = Math.sqrt((X2 - X1) * (X2 - X1) + (Y2 - Y1) * (Y2 - Y1));
	for (i = 0; i < 150; i++) if (!clip2.hitTest(SIN(angle) * (len - i) + X1, COS(angle) * (len - i) + Y1, true))break;
	this.arrowTo(X1, Y1, SIN(angle) * (len - i) + X1, COS(angle) * (len - i) + Y1);
}

clip1.onPress = clip2.onPress = function ()
{
	startDrag(this);
	updateArrow(clip1._x + clip1._width / 2, clip1._y + clip1._height / 2, clip2._x + clip2._width / 2, clip2._y + clip2._height / 2);
	onMouseMove = function (){updateArrow(clip1._x + clip1._width / 2, clip1._y + clip1._height / 2, clip2._x + clip2._width / 2, clip2._y + clip2._height / 2);}
}

clip1.onRelease = clip2.onRelease = clip1.onReleaseOutside = clip2.onReleaseOutside = function ()
{
	stopDrag();
	delete onMouseMove;
}

updateArrow(clip1._x + clip1._width / 2, clip1._y + clip1._height / 2, clip2._x + clip2._width / 2, clip2._y + clip2._height / 2);


Последний раз редактировалось Vertax; 21.04.2008 в 22:01.
Старый 20.04.2008, 20:23
lexo2000 вне форума Посмотреть профиль Отправить личное сообщение для lexo2000 Найти все сообщения от lexo2000
  № 7  
Ответить с цитированием
lexo2000

Регистрация: Dec 2007
Сообщений: 23
нет, startDrag - это метод, событие создать нельзя. зато есть событие mouseMove, к которому можно написать обработчик, затирающий/ перерисовывающий стрелку.
кстати, может это и не совсем "чистый" подход, но я в подобной ситуации вопрос со стрелкой решил немного по другому. создал клип стрелки, в нужный момент прикреплял его к перетаскиваемому клипу, и управлял его вращением. а линию, само собой - перерисовывал...
так что возможны варианты...

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:28.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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