Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Движение за мышкой? (http://www.flasher.ru/forum/showthread.php?t=61608)

SPLINE1 07.08.2004 15:48

Движение за мышкой?
 
Нам нужно устроить движение мувика за мышкой, по принципу Диабло( вообщем как в рпг)...Т.е. кликнул по экрану, а мувик плавно побежал в точку клика + нужна возможность движения, когда кнопка мыши не отпущена....

Antares 07.08.2004 20:08

Навскидку придумался такой алгоритм:
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);
}

SPLINE1 10.08.2004 12:33

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 действий....

silin 10.08.2004 12:51

Вложений: 1
Код:

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 - собственно мувик. Любой. Если ты все сделал правильно, объект БУДЕТ и должен двигаться. Тестировалось неоднократно. И я не понял, что ты имеешь ввиду - "не определяется как оператор" ?

SPLINE1 10.08.2004 14:08

silin огромное спасибо

SeryEg 16.08.2004 17:05

2 Bad Habit

а можно пример?


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

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