![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2009
Адрес: Харьков
Сообщений: 51
|
Здравствуйте есть такая задача нужно нарисовать линию от мувика к указателю мышки в момент ее нажатия. Линия должна рисоваться не сразу, а последовательно с определенной скоростью скажем 2 пикселя в секунду. Можно такое сделать? Подскажите, пожалуйста в каком направлении копать. Заранее спасибо.
|
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
если нужно знать только в каком направлении копать, то:
Я бы для начала создал две переменные с типом данных Point одну для хранения начального положения мувика (как бы точки отсчета), другую в качестве указателя куда должна двигаться линия. Затем, слушатель MOUSE_DOWN и обработчик этого события. Внутри функции обработчика бы добавил ENTER_FRAME который будет рисовать линию покадрово. Так же назначил бы координаты первой точки равные координатам мувика. Внутри энтер фрейма, применив немного тригонометрии расчитал бы угол от начальной точки до курсора и уже начал рисовать линию к координатам которые бы расчитывал так: Ну а там бы уже с помощью graphics.lineTo рисовал линию к этим координатам. А остановил бы рисование чем то вроде этого: Последний раз редактировалось goodguy; 21.11.2010 в 19:48. |
|
|||||
|
Регистрация: Feb 2009
Адрес: Харьков
Сообщений: 51
|
Спасибо большое за ориентир с меня пиво. Тригонометрия сила.
|
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
goodguy, для таких целей существуют векторы.
var myDirection:Point = new Point(container.mouseX-point1.x, container.mouseY-point1.y); myDirection.normalize(1.0); // вероятно должно быть еще и: point2.x = point1.x; point2.y = point1.y;
__________________
Загружаем картинки, минуя ошибки безопасности Последний раз редактировалось i.o.; 22.11.2010 в 11:03. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Действительно, не заметил, что забыл поставить + перед равно. Но в остальном код правильный.
Имелось в виду это: На счет векторов согласен, но для новичка это будет сложнее. Я сам до сих пор не особо соображаю в векторах Последний раз редактировалось goodguy; 22.11.2010 в 09:03. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
![]() Еще ведь нужно не забыть, что за X, а что за Y отвечает, и угол в градусах или радианах o_O
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Косинус и синус вычисляет программа, не самому же заморачиваться
. Откуда взять угол понятно, все остальное просто. если использовать плюсы, то косинус - х, синус - у. Угол всегда в радианах хз, мне кажется это проще , может я не правПоследний раз редактировалось goodguy; 22.11.2010 в 13:19. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Оффтоп: лично мне удобнее икс с иксом и игрек с игреком соотносить, чем вспоминать, что отвечает за X: синус или косинус. С векторами все прозрачнее.
А так: обе реализации правильные, есть из чего выбрать )
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Lorem ipsum
|
Вы шутите что ли?! Раздобыть угол из координат вектора, чтобы потом снова добывать координаты вектора из угла 0о чему молодежь учите!
Все верно i.o. говорит. Нашли единичный вектор в нужном направлении и в цикле умножаем его на длину, растущую от нуля до изначальной дистанции.
__________________
Поймай яблоко 2! |
|
|||||
|
Регистрация: Dec 2008
Сообщений: 87
|
К стыду своему, никогда не работал с вектором, обходясь тригонометрическими формулами. Пример заинтересовал, спасибо!
Попробовал у себя. Вдруг кому пригодится: package { import flash.display.*; import flash.events.*; import flash.geom.Point; public class Pnt extends Sprite { var myDirection:Point; var point2:Point; function Pnt():void { stage.addEventListener(MouseEvent.CLICK, initAnim); } private function initAnim(e:MouseEvent) { myDirection = new Point(stage.mouseX - point1.x,stage.mouseY - point1.y); point2 = new Point(); myDirection.normalize(1.0); point2.x = point1.x; point2.y = point1.y; this.graphics.clear(); this.graphics.lineStyle(1) this.graphics.moveTo(point1.x, point1.y) stage.addEventListener(Event.ENTER_FRAME, enterframeListener); } private function enterframeListener(e:Event) { point2.x += 5.0 * myDirection.x; point2.y += 5.0 * myDirection.y; this.graphics.lineTo(point2.x, point2.y) } } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:56. |
|
|
« Предыдущая тема | Следующая тема » |
|
|