![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2004
Сообщений: 5
|
Нам нужно устроить движение мувика за мышкой, по принципу Диабло( вообщем как в рпг)...Т.е. кликнул по экрану, а мувик плавно побежал в точку клика + нужна возможность движения, когда кнопка мыши не отпущена....
|
|
|||||
|
Banned
[+1 16.05.2006]
[++1 16.05.2006] [+ 1 21.05.06] [++ за хамство] [+1 21.05.2006] Регистрация: Dec 2003
Сообщений: 3,925
|
Навскидку придумался такой алгоритм:
1)По теореме Пифагора вычисляем расстояние от того, что нам надо двигать, до точки клика, записываем все это дело в переменную distance. 2)Определеяем, сколько кадров будет двигаться наш мувик, если у нас скорость движения в пикселах\сек = speed, а фреймрейт = framerate: framesNum = framerate*(distance/speed); 3)Теперь каждый кадр смещаем мувик по оси Х и по оси У, но сначала надо найти по какой на сколько. Для Х: dx = (Х Мышки - Х Мувика)/framesNum; Для Х: dy = (Y Мышки - Y Мувика)/framesNum; В общих чертах, надеюсь, нигде не ошибся... Если что-то еще неясно -- телеграфируй. |
|
|||||
|
Вот какие методы я однажды написал (под общий случай), чтобы управлять мувиками.
MovieClip.prototype.setDefault = function() { this.doneMove = 1; this.spdPercent = 0.1; }; MovieClip.prototype.moveIn = function(x:Number, y:Number) { var x, y; this.doneMove = 0; this.onEnterFrame = function() { if (this._x<>x) { this._x -= (this._x-x)*this.spdPercent; } if (this._y<>y) { this._y -= (this._y-y)*this.spdPercent; } if (Math.round(this._x-x) == 0 && Math.round(this._y-y) == 0) { _global.Completers.push(this._name); //добавление в массив объектов, которые что-то завершили this.doneMove = 1; delete this.onEnterFrame; } }; }; Методов было много, потому я сделал и setDefault(). Но для данного примера метод пришлось жестко урезать до двух необходимых строк. Собственно, теперь он стал бесполезен... Можно и не использовать, заменив просто двумя строчками кода. mc.setDefault(); _root.onMouseDown = function(){ mc.moveIn(_xmouse, _ymouse); }
__________________
За двумя зайцами погонишься - от егеря по морде получишь |
|
|||||
|
Регистрация: Aug 2004
Сообщений: 5
|
mc.onMouseDown = function() {
//Определяем расстояние до клика; dx = _xmouse - mc._x; dy = _ymouse - mc._y; // Рассчитываем дистанцию; distance = Math.sqrt(dx*dx + dy*dy); trace(distance); } А дальше чего делать? Я просто не вьехал как сюды привязать фреймрейт, фреймснум.... Насчет mc.setDefault(); _root.onMouseDown = function(){ mc.moveIn(_xmouse, _ymouse); } moveIn не определяется как оператор, отсюда 0 действий.... |
|
|||||
|
|
|
|||||
|
Цитата:
__________________
За двумя зайцами погонишься - от егеря по морде получишь |
|
|||||
|
Регистрация: Aug 2004
Сообщений: 5
|
silin огромное спасибо
|
|
|||||
|
Регистрация: Jul 2004
Сообщений: 12
|
2 Bad Habit
а можно пример?
__________________
Мир, любовь, состродание. |
![]() |
Часовой пояс GMT +4, время: 16:53. |
|
|
« Предыдущая тема | Следующая тема » |
|
|