PDA

Просмотр полной версии : Перемещение


aciton
28.08.2007, 18:35
подскажите плз как сделать плавное перемещение на разницу координат клика и центра окна.
было бы здорово если был какой-нибудь пример )

udaaff
28.08.2007, 21:01
На сцене должен быть мувик с именем "mc"
var mouseListener:Object = new Object();
mouseListener.onMouseDown = function() {

moving(_xmouse, _ymouse);
};
Mouse.addListener(mouseListener);
function moving(x:Number, y:Number) {
mc.onEnterFrame = function() {
if (Math.abs(this._x-x)<1 && Math.abs(this._y-y)<1) {
trace("deleted");
this._x = x;
this._y = y;
delete this.onEnterFrame;
}
this._x += (x-this._x)*.4;
this._y += (y-this._y)*.4;
};
}

aciton
28.08.2007, 21:10
спасибо огромное. этот ваш код я уже видел. но хочется по другому, чтобы мувик двигался не в сторону клика, а чтобы место клика двигалось к центру экрана

Aziz Zaynutdinoff
28.08.2007, 21:10
или так

function slideThis(mc:MovieClip, __x:Number, __y:Number, __speed:Number):Void
{
mc.onEnterFrame = function()
{
var dx:Number = (__x - this._x) / __speed;
var dy:Number = (__y - this._y) / __speed;
if(Math.abs(dx) < .1 && Math.abs(dy) < .1)
{
this._x = __x;
this._y = __y;
delete this.onEnterFrame;
} else {
this._x += dx;
this._y += dy;
}
}
}
var mouseListener:Object = new Object();
mouseListener.onMouseMove = function()
{
slideThis(mc, _xmouse, _ymouse, 3);
}
Mouse.addListener(mouseListener);

На сцене должен содержаться MovieClip с прописанным instance name "mc"

PS
чтобы дивгалась сцена (или возникала такая иллюзия, перемещайте все объекты по дивжению мыши, либо перемещайте MovieClip, внутри которого находяться необходимые к перемещению клипы.

aciton
28.08.2007, 21:28
спасибо, насчет того что все объкеты находились в 1 клипе и двигались - понятно, не понятны 2 вещи,
1 как сделать чтобы точка клика двигалась к центру
2 на сайте видно, что есть несколько слоев (клипов), которе при перемещении двигаются с разным расстоянием, и возникает иллюзия перспективы, где мувики, находящиеся на переднем плане двигаются на большее расстояние, чем задние..

udaaff
28.08.2007, 21:32
В общем то, практически тоже самое
my_mc.onRelease = function() {
moving(this,Stage.width/2-this._xmouse, Stage.height/2-this._ymouse);
};
//
function moving(mc:MovieClip, x:Number, y:Number) {
mc.onEnterFrame = function() {
if (Math.abs(this._x-x)<1 && Math.abs(this._y-y)<1) {
trace("deleted");
this._x = x;
this._y = y;
delete this.onEnterFrame;
}
this._x += (x-this._x)*.4;
this._y += (y-this._y)*.4;
};
}

aciton
28.08.2007, 21:41
спасибо вам огромное товарищи!!!
а про вопрос 2 не подскажите для кучи ))) ?

udaaff
28.08.2007, 21:49
Параметр dl отвечает за "замедление" в данной функции
my_mc.onRelease = function() {
moving(this,Stage.width/2-this._xmouse, Stage.height/2-this._ymouse,.2);
};
//
function moving(mc:MovieClip, x:Number, y:Number,dl:Number) {
mc.onEnterFrame = function() {
if (Math.abs(this._x-x)<1 && Math.abs(this._y-y)<1) {
trace("deleted");
this._x = x;
this._y = y;
delete this.onEnterFrame;
}
this._x += (x-this._x)*dl;
this._y += (y-this._y)*dl;
};
}


или ты про что? я не могу до конца въехать

aciton
28.08.2007, 21:59
это всего лишь замедление, в итоге 2 мувика остаются после перемещения на одинаковой позиции по отношению друг к другу
а на сайте видна перспектива отчетливо. т.е. для заднего мувика расстояние движения меньше чем у мувика на переднем плане
в твоем случае координаты 1 и 2 мувика до и после перемещения по отношению друг к другу остаются неизменными

udaaff
28.08.2007, 22:15
aciton, вы ввели новое понятие в физику -- "расстояние движения", осталось единицу измерения только придумать. В "моем случае" присутствует только один мувик.

Что мешает два мувика, переместить на две разные позиции?

aciton
28.08.2007, 22:28
)) ну про физику, бог с ней ))) если ваш случай расширить и добавить второй мувик к нему, только с другим параметром "dl", то получится так как я написал выше

udaaff
28.08.2007, 22:45
Все двигаются в разные стороны, все живы и счастливы
my_mc1.onRelease = function() {
//
moving(this,Stage.width/2-this._xmouse, Stage.height/2-this._ymouse,.3);
};
my_mc2.onRelease = function() {
//
moving(this,100, 100,.1);
};
//
function moving(mc:MovieClip, x:Number, y:Number,dl:Number) {
mc.onEnterFrame = function() {
if (Math.abs(this._x-x)<1 && Math.abs(this._y-y)<1) {
trace("deleted");
this._x = x;
this._y = y;
delete this.onEnterFrame;
}
this._x += (x-this._x)*dl;
this._y += (y-this._y)*dl;
};
}

aciton
28.08.2007, 23:00
)) ну здесь окончательая точка маршрута второго мувика будет 100 100, дальше увы не пойдет ))
условия применить пока не получается (

udaaff
28.08.2007, 23:16
Конечно он дальше не пойдет, пока вы ему не скажете.
aciton, изложите свой вопрос четко и ясно, в понятной для человека форме.

aciton
28.08.2007, 23:37
имеется мувик 1 и мувик 2,
у первого мувика(тот который по идее в перспективе находиться дальше второго) смещение при клике будет меньше, чем у второго. посмотрите внимательно на сайт, там одни объекты смещаются относительно друг друга одинаково, а у других расстояние перемещения меньше этих. так и создается впечатление, что одни дальше, другие ближе.
в вашем случае при изменении параметра dl изменяется лишь время "приезда" мувика до конечной точки.
грубо говоря, чем, для нашей иллюзии перспективы, дальше должен находиться объект, тем меньше область его смещения должна быть

aciton
29.08.2007, 00:16
в общем криво но работает

xx = Stage.width/2-mc2._xmouse;
yy = Stage.height/2-mc2._ymouse;
mc.onRelease = function() {

if (xx<Stage.width/2-mc2._xmouse && yy<Stage.height/2-mc2._ymouse {
moving2(Stage.width/2-mc2._xmouse-20,Stage.height/2-mc2._ymouse-20);
}
if (xx>Stage.width/2-mc2._xmouse && yy<Stage.height/2-mc2._ymouse) {
moving2(Stage.width/2-mc2._xmouse+20,Stage.height/2-mc2._ymouse-20);
}
if (xx<Stage.width/2-mc2._xmouse && yy>Stage.height/2-mc2._ymouse) {
moving2(Stage.width/2-mc2._xmouse-20,Stage.height/2-mc2._ymouse+20);
}
if (xx>Stage.width/2-mc2._xmouse && yy>Stage.height/2-mc2._ymouse) {
moving2(Stage.width/2-mc2._xmouse+20,Stage.height/2-mc2._ymouse+20);
}
moving(Stage.width/2-mc._xmouse,Stage.height/2-mc._ymouse;
xx = Stage.width/2-mc2._xmouse;
yy = Stage.height/2-mc._ymouse;
};

udaaff
29.08.2007, 00:41
коэффициэнт .9 в данном случае будет отвечать за небольшой недоход до центра сцены
То, что тебе нужно, по всей видимости.
my_mc1.onRelease = function() {
//
moving(this, (Stage.width/2-_xmouse)*.9+this._x, (Stage.height/2-_ymouse)*.9+this._y, .3);
};
//
function moving(mc:MovieClip, x:Number, y:Number, dl:Number) {
mc.onEnterFrame = function() {
if (Math.abs(this._x-x)<1 && Math.abs(this._y-y)<1) {
trace("deleted");
this._x = x;
this._y = y;
delete this.onEnterFrame;
}
this._x += (x-this._x)*dl;
this._y += (y-this._y)*dl;
};
}
:victory:

aciton
29.08.2007, 00:59
эффект такой же ))) но у вас красиво )) спасибо