Просмотр полной версии : Движение за мышкой?
Нам нужно устроить движение мувика за мышкой, по принципу Диабло( вообщем как в рпг)...Т.е. кликнул по экрану, а мувик плавно побежал в точку клика + нужна возможность движения, когда кнопка мыши не отпущена....
Навскидку придумался такой алгоритм:
1)По теореме Пифагора вычисляем расстояние от того, что нам надо двигать, до точки клика, записываем все это дело в переменную distance.
2)Определеяем, сколько кадров будет двигаться наш мувик, если у нас скорость движения в пикселах\сек = speed, а фреймрейт = framerate:
framesNum = framerate*(distance/speed);
3)Теперь каждый кадр смещаем мувик по оси Х и по оси У, но сначала надо найти по какой на сколько.
Для Х: dx = (Х Мышки - Х Мувика)/framesNum;
Для Х: dy = (Y Мышки - Y Мувика)/framesNum;
В общих чертах, надеюсь, нигде не ошибся... Если что-то еще неясно -- телеграфируй.
artfla$her
08.08.2004, 00:26
Вот какие методы я однажды написал (под общий случай), чтобы управлять мувиками.
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);
}
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 действий....
MovieClip.prototype.asRPG=function(){
this.onMouseDown=function(){
var x=_xmouse,y=_ymouse;
this.p=1;
this.onEnterFrame=function(){
with(this){
_x=(_x+x)/2;_y=(_y+y)/2;
if(p){
x=_parent._xmouse;y=_parent._ymouse;
}
}
}
}
this.onMouseUp=function(){this.p=0}
}
mc.asRPG();
artfla$her
10.08.2004, 13:21
moveIn не определяется как оператор, отсюда 0 действий....
??? moveIn - метод MovieClip. mc - собственно мувик. Любой. Если ты все сделал правильно, объект БУДЕТ и должен двигаться. Тестировалось неоднократно. И я не понял, что ты имеешь ввиду - "не определяется как оператор" ?
2 Bad Habit
а можно пример?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.