Вход

Просмотр полной версии : Движение объекта к пункту меню


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

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

Исходник (http://www.taosy.com/mc.fla)

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 минуты
Неужели сложно понять, что происходит в коде, и почему объект приезжает в положение мышки?

Вот ваш код:

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
Вот ещё вариант, работает точно так же, но код меньше
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()
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
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: Огромнейшее спасибо! В моем варианте если курсор попадал на мувик его колбасило, тут все супер! С меня пиво, водка, виски с колой, что угодно! =)