Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Движение объекта к пункту меню (http://www.flasher.ru/forum/showthread.php?t=136246)

Mr.Lexx 12.02.2010 17:26

Движение объекта к пункту меню
 
Используя исходники сделал чтобы при наведении на пункт меню к нему приезжал Movie Clip. Подскажите как сделать чтобы Movie Clip останавливался в центре пункта меню, а не "как получится"?

Код: (поскольку мне нужно было только движение по оси Х, от оси Y избавился криво я понимаю)

Исходник

Код AS1/AS2:

var startMove:Boolean=false;
var speedMove:Number=10;
function moveMC(xEnd:Number,yEnd:Number){
        var rotation:Number=Math.atan2(yEnd-mc._y,xEnd-mc._x)+Math.PI/2;
 
        mc._x+=Math.sin(rotation)*speedMove;
 
        updateAfterEvent();
        if(mc._x>xEnd-2 && mc._x<xEnd+2 && mc._y>yEnd-2 && mc._y<yEnd+2){
                clearInterval(timer);
        }
}
 
_root.f.onRollOver = function(){
        clearInterval(timer);
        timer=setInterval(moveMC,10,_xmouse,_ymouse);
}


Hauts 12.02.2010 17:35

Вы бы еще написали, в каком флэше вы исходник даете.

Добавлено через 2 минуты
Неужели сложно понять, что происходит в коде, и почему объект приезжает в положение мышки?

Вот ваш код:
Код AS1/AS2:

var startMove:Boolean = false;
var speedMove:Number = 10;
function moveMC(xEnd:Number, yEnd:Number) {
        var rotation:Number = Math.atan2(yEnd-mc._y, xEnd-mc._x)+Math.PI/2;
 
        mc._x += Math.sin(rotation)*speedMove;
 
        updateAfterEvent();
        if (mc._x>xEnd-2 && mc._x<xEnd+2 && mc._y>yEnd-2 && mc._y<yEnd+2) {
                clearInterval(timer);
        }
}
 
_root.f.onRollOver = function() {
        clearInterval(timer);
        timer = setInterval(moveMC, 10, _root.f._x, _root.f._y);
};
 
_root.s.onRollOver = function() {
        clearInterval(timer);
        timer = setInterval(moveMC, 10, _root.s._x, _root.s._y);
};
 
_root.m.onRollOver = function() {
        clearInterval(timer);
        timer = setInterval(moveMC, 10, _root.m._x, _root.m._y);
};


Mr.Lexx 12.02.2010 17:50

Сорри конечно, я дизайнер, мне правда сложно понять, что и почему происходит, огромное спасибо!

samana 12.02.2010 18:08

Вот ещё вариант, работает точно так же, но код меньше
Код AS1/AS2:

s.onRollOver = f.onRollOver = m.onRollOver = function () {
        clearInterval(int_move);
        int_move = setInterval(move, 10, this);
};
function move(obj) {
        dx = obj._x - mc._x;
        mc._x += dx * 0.1;
}


Mr.Lexx 12.02.2010 18:16

Спасибо большое, проверил – работает. Но заметил, что движение муви клипа стало немного дрожать.

samana 12.02.2010 18:28

Да, есть такая проблема, это потому что FPS 12
Я забыл добавить в конце функции updateAfterEvent()
Код AS1/AS2:

function moveArr(obj) {
        dx = obj._x - arr._x;
        arr._x += dx * 0.1;
        updateAfterEvent();
}


Mr.Lexx 12.02.2010 18:32

Поставил 24 всеравно рябит, мне проще старый, немного не правильный код использовать, времени уже совсем нету. Спасибо еще раз вам, что откликнулись.

udaaff 12.02.2010 18:35

Код AS1/AS2:

import mx.utils.Delegate;
 
var intervalID:Number;
 
s.onRollOver = mc_onRollOverHandler;
f.onRollOver = mc_onRollOverHandler;
m.onRollOver = mc_onRollOverHandler;
 
function mc_onRollOverHandler():Void
{
        if (intervalID)
        {
                clearInterval(intervalID);
                intervalID = null;
        }
 
        intervalID = setInterval(Delegate.create(this, mc_intervalHandler), 10);
        trace("asdf")
}
 
function mc_intervalHandler():Void
{
        mc._x += (this._x - mc._x) * 0.3;
 
        if (Math.abs(mc._x - this._x) < .2)
        {
                mc._x = this._x;
                clearInterval(intervalID);
                intervalID = null;
        }
 
        updateAfterEvent();
}


Mr.Lexx 12.02.2010 23:48

udaaff: Огромнейшее спасибо! В моем варианте если курсор попадал на мувик его колбасило, тут все супер! С меня пиво, водка, виски с колой, что угодно! =)


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

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