PDA

Просмотр полной версии : Плавное изменение координат как реакция на изменение _xmouse _ymouse


Dimalar
30.10.2006, 17:16
Как осуществить плавное изменение координат клипа при изменении _xmouse и _ymouse (при движении мышью)?

MyXus
30.10.2006, 17:37
реализовать инерцию

Wolsh
31.10.2006, 02:41
Обычно я пользуюсь формулой

my_mc.onMouseMove = function() {

_root.onEnterFrame = function() {
my_mc._x = my_mc._x - (my_mc._x - _xmouse)/speed;
my_mc._y = my_mc._y - (my_mc._y - _ymouse)/speed;
}
}

где speed - скорость, задаваемая вручную или программно.

iNils
31.10.2006, 03:01
Более корректное решение:
//// mc - имя вдигающегося клипа
mc.onMouseMove = function () {
this.speed = 5;
this.onEnterFrame = function () {
var dx = this._x - this._parent._xmouse;
var dy = this._y - this._parent._ymouse;
this._x -= dx / this.speed;
this._y -= dy / this.speed;
if (!(Math.abs (dx) > 0.01 && Math.abs (dy) > 0.01)) {
this._x = this._parent._xmouse;
this._y = this._parent._ymouse;
delete this.onEnterFrame;
}
};
};
Единственный момент, что у данного клипа, не должен использоваться onEnterFrame.

Dimalar
31.10.2006, 12:47
Спасибо преогромное!

etc
31.10.2006, 13:37
А у меня что-то вроде this._x += (_xmouse-this._x)/speed; :D

SamOvar
31.10.2006, 13:43
Огромное спасибо Dimalar`у за вопрос и iNils`у за ответ! :D
Если никто не возражает, я разовью тему...:rolleyes:

Как ограничить перемещение мувика по сцене собственными границами...
Примерчик прикрепил для удобства. Условия: сцена размером 760*220 и мувик размерами 900*300. Задача: при достижении одного из краёв мувика границы сцены движение должно прекратиться. Т.е. красная линия в кадре появляться не должна...

Wolsh
31.10.2006, 15:38
А у меня что-то вроде this._x += (_xmouse-this._x)/speed; :D
Да, конечно :) Ещё хотелось бы заметить, что лучше не делить на скорость, а умножать. Тогда можно будет задавать скорость 0 для каких-то нужд.

BigDan
31.10.2006, 15:42
function check(mc:MovieClip){
var upY:Number=Stage.height/2+(mc._height/2-Stage.height/2);
var downY:Number=Stage.height/2-(mc._height/2-Stage.height/2);
var rightX:Number=Stage.width/2+(mc._width/2-Stage.width/2);
var leftX:Number=Stage.width/2-(mc._width/2-Stage.width/2);
if(mc._y>=upY){
mc._y-=4;
}
if(mc._y<=downY){
mc._y+=4;
}
if(mc._x>=rightX){
mc._x-=4;
}
if(mc._x<=leftX){
mc._x+=4;
}
}

etc
31.10.2006, 15:50
Wolsh, можно и умножать.