Просмотр полной версии : Перемещение
подскажите плз как сделать плавное перемещение на разницу координат клика и центра окна.
было бы здорово если был какой-нибудь пример )
На сцене должен быть мувик с именем "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;
};
}
спасибо огромное. этот ваш код я уже видел. но хочется по другому, чтобы мувик двигался не в сторону клика, а чтобы место клика двигалось к центру экрана
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, внутри которого находяться необходимые к перемещению клипы.
спасибо, насчет того что все объкеты находились в 1 клипе и двигались - понятно, не понятны 2 вещи,
1 как сделать чтобы точка клика двигалась к центру
2 на сайте видно, что есть несколько слоев (клипов), которе при перемещении двигаются с разным расстоянием, и возникает иллюзия перспективы, где мувики, находящиеся на переднем плане двигаются на большее расстояние, чем задние..
В общем то, практически тоже самое
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;
};
}
спасибо вам огромное товарищи!!!
а про вопрос 2 не подскажите для кучи ))) ?
Параметр 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;
};
}
или ты про что? я не могу до конца въехать
это всего лишь замедление, в итоге 2 мувика остаются после перемещения на одинаковой позиции по отношению друг к другу
а на сайте видна перспектива отчетливо. т.е. для заднего мувика расстояние движения меньше чем у мувика на переднем плане
в твоем случае координаты 1 и 2 мувика до и после перемещения по отношению друг к другу остаются неизменными
aciton, вы ввели новое понятие в физику -- "расстояние движения", осталось единицу измерения только придумать. В "моем случае" присутствует только один мувик.
Что мешает два мувика, переместить на две разные позиции?
)) ну про физику, бог с ней ))) если ваш случай расширить и добавить второй мувик к нему, только с другим параметром "dl", то получится так как я написал выше
Все двигаются в разные стороны, все живы и счастливы
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;
};
}
)) ну здесь окончательая точка маршрута второго мувика будет 100 100, дальше увы не пойдет ))
условия применить пока не получается (
Конечно он дальше не пойдет, пока вы ему не скажете.
aciton, изложите свой вопрос четко и ясно, в понятной для человека форме.
имеется мувик 1 и мувик 2,
у первого мувика(тот который по идее в перспективе находиться дальше второго) смещение при клике будет меньше, чем у второго. посмотрите внимательно на сайт, там одни объекты смещаются относительно друг друга одинаково, а у других расстояние перемещения меньше этих. так и создается впечатление, что одни дальше, другие ближе.
в вашем случае при изменении параметра dl изменяется лишь время "приезда" мувика до конечной точки.
грубо говоря, чем, для нашей иллюзии перспективы, дальше должен находиться объект, тем меньше область его смещения должна быть
в общем криво но работает
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;
};
коэффициэнт .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:
эффект такой же ))) но у вас красиво )) спасибо
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.