Форум 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=100492)

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

эффект такой же ))) но у вас красиво )) спасибо


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

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