PDA

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


udjin
06.05.2008, 18:42
Коллеги, помогите никчёмному малевальщику. Я в формулах и уравнениях не силён, а требуется написать скрипт для такой штуки:

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

А?

udjin
06.05.2008, 19:26
Нашёл скрипт, который заставляет клип бегать за курсором нужным образом. Как его модифицировать, чтобы клип бегал в противоположную сторону?


pic.onMouseMove = function () {
this.speed = 0.1;
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;
}
};
};

crc
06.05.2008, 20:04
pic.onMouseMove = function () {
this.speed = 0.1;
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;
}
if (pic._x < 0 || pic._y < 0 || pic._x > Stage.height || pic._y > Stage.width)
{
pic._x = Stage.width/2;
pic._y = Stage.height/2;
}
};
};

AlexDesinger
25.06.2008, 21:51
а как сделать что бы клип не уезжал за экран а плавно останавливался?
посмотрите как тут здорово сделано))))) вот бы тоже так забабацать))))
http://www.ffk-schick.com/ru/
если кто знает напишите плиз очень нужно и еще инетересно как сделано что разные клипв по разному смещаются? видимо смещение предусмотрено))))
Заставку можно пропустить))))

Wolsh
25.06.2008, 23:47
AlexDesinger, положение упаковки просто инвертировано положению мыши, деленному на какоето число. Если Вам известны высота и ширина сцены, и размеры клипа, кудаж он уедет?)))) Для маленьких клипов то же правило.
В общем виде так (стандартная точка привязки)mc.onMouseMove = function () {
this._x = Stage.width-this._width-_xmouse + this._width/(Stage.width/_xmouse);
this._y = Stage.height-this._height-_ymouse + this._height/(Stage.height/_ymouse);
}границы конечно можно урегулировать, если не нужно движение от борта до борта)))

AlexDesinger
26.06.2008, 05:28
да это все так но как сделать что бы происходило замедление и остановка?
Ну т.е чтобы мувик не моментально реагировал на двиение
ясно что через onEnterFrame но у меня в голове неукладывается как это можно посчитать...
На примере выше происходит наоборот ускорение...чем дальше друг от друга мувик и курсор, тем быстрее скорость

AlexDesinger
27.06.2008, 17:39
вот нашел наконец что-то похожее
function CursorMovement() {
speed = 0.9;
dx = speed*(dx-_xmouse)+_xmouse;
dy = speed*(dy-_ymouse)+_ymouse;
mc._x = (1-mc._width/Stage.width)*dx+mc._width/2;
mc._y = (1-mc._height/Stage.height)*dy+mc._height/2;
}
setInterval(CursorMovement,100);
весь фокус в том что клип должен быть больше чем Stage, тогда происходит "обратное движение", но если меньше то движение будет ЗА мышкой.

Вот теперь как бы придумать чтобы , скажем два или три клипа смещались немного поразному, но при этом не перегрузить проц?

Wolsh
27.06.2008, 18:25
Так Вам инерции чтоли не хватает? ОК, тормозим!
mc.onMouseMove = function () {
this.cell_x = Stage.width-this._width-_xmouse + this._width/(Stage.width/_xmouse);
this.cell_y = Stage.height-this._height-_ymouse + this._height/(Stage.height/_ymouse);
}
mc.onEnterFrame = function () {
this._x = this._x + (this.cell_x - this._x)/10
this._y = this._y + (this.cell_y - this._y)/10
}

AlexDesinger
27.06.2008, 20:35
Офигеть, просто!!! Круто....то что надо!!! Спасибо)))))))))))

AlexDesinger
20.09.2008, 18:19
Wolsh, подскажи плиз как мне сделать, чтобы клип mc двигался не по всей поверхности Stage, а находился внутри клипа, скажем clip_mc и двигался только в пределах границ этого клипа?

Wolsh
21.09.2008, 00:23
var xborder:Number = clip_mc._width-clip_mc.mc._width;
var yborder:Number = clip_mc._height-clip_mc.mc._height;
////
clip_mc.mc.onMouseMove = function () {
var xcell:Number = xborder-clip_mc._xmouse + this._width/(clip_mc._width/clip_mc._xmouse);
this.cell_x = Math.min(xborder, Math.max(0, xcell));
var ycell:Number = yborder-clip_mc._ymouse + this._height/(clip_mc._height/clip_mc._ymouse);
this.cell_y = Math.min(yborder, Math.max(0, ycell));
}
clip_mc.mc.onEnterFrame = function () {
this._x = this._x + (this.cell_x - this._x)/10
this._y = this._y + (this.cell_y - this._y)/10
}

AlexDesinger
22.09.2008, 00:45
клааассс....!!! Супер, сапсибо большое =)
мне б в жизни не сообразить....слишком плохо с математикой))))))))

только у этого кода есть один недостаток - клип не реагирует на мышку, если мышка находится по углам Stage(при расположение clip_mc где-то в центре Stage) =|

Wolsh
22.09.2008, 01:28
В смысле не реагирует? Забивается в угол clip_mc и сидит там, а как еще? Дальше ведь ему нельзя двигаться! Или Вы хотели чтобы clip_mc был какбы уменьшенной проекцией Stage, и только когда мышь заходит в угол стейджа, mc заходит в противоположный угол clip_mc? А когда мышь скажем на 2/3 расстояния от центра до угла стейджа, то mc на 2/3 расстояния от центра до угла clip_mc?

AlexDesinger
22.09.2008, 02:37
Или Вы хотели чтобы clip_mc был какбы уменьшенной проекцией Stage, и только когда мышь заходит в угол стейджа, mc заходит в противоположный угол clip_mc? А когда мышь скажем на 2/3 расстояния от центра до угла стейджа, то mc на 2/3 расстояния от центра до угла clip_mc?

да...вот...я именно это имел ввиду :) сорри, что не так выразился...я именно это пытаюсь сообразить как сделать, но вообще ничего не могу...
я не могу в голове уложить все зависимости что от чего зависит и что на что надо делить....

впринципе соотношение сторон не принципиально, оно впринципе может быть и как у Stage лишь бы можно было регулировать размеры этой области и его местоположение - клип, который как бы уменьшенная копия Stage или проекция Stage...:wacko:

AlexDesinger
23.09.2008, 16:44
у меня получилось вот что:
xRatio = (Stage.width+clip_mc.mc._width)/clip_mc._width;
yRatio = (Stage.height+clip_mc.mc._height)/clip_mc._height;
onMouseMove = function () {
dx = (Stage.width-clip_mc.mc._width-_xmouse+clip_mc.mc._width/(Stage.width/_xmouse))/xRatio;
dy = (Stage.height-clip_mc.mc._height-_ymouse+clip_mc.mc._height/(Stage.height/_ymouse))/yRatio;
};
onEnterFrame = function () {
clip_mc.mc._x = clip_mc.mc._x+(dx-clip_mc.mc._x)/10;
clip_mc.mc._y = clip_mc.mc._y+(dy-clip_mc.mc._y)/10;
};
не совсем точно, край клипа mc либо выезжает либо не доезжает до края клипа clip_mc, но по крайней мере работает...еле разобрался как это можно сделать.

Wolsh
23.09.2008, 20:03
Это Вам кажется, что всё так просто - всего лишь чуть другое условие. Но если раньше Вы хотели соблюдение одного условия, то теперь - одновременно двух, но сами этого по-моему не поняли))) Представьте, что clip_mc находится не в центре стейджа.
Если положение mc внутри clip_mc соответствует зеркальному отражению положения мыши на сцене, то когда мышь в центре сцены, мс - в центре клип_мс. Когда мышь в центре клип_мс, мс - почти у самой грани клип_мс. Т.е. изначальное правило, что мс убегает от мышки относительно центра клип_мс, не может быть соблюдено одновременно с "проецированием" сцены.

AlexDesinger
23.09.2008, 20:54
Что-то я и в правду вас не понимаю. Наверное мы представляем себе разные эффекты, либо я действительно что то упустил...я прикрепил файл, в которм клипы движутся как бы мне хотелось - точно так как вы подсказали ранее, только я попробовал их разместить внутри клипа, чтобы они не по всему стэйджу перемещались а внутри клипа, ограничивающего их перемещение.
Где бы я не размещал клип_мс на стейдже, клипы внутри него двигаются правильно...:wacko:

Wolsh
24.09.2008, 01:49
Как Вы сказали? :wacko: ?)))))
Не знаю, я затруднился обнаружить какуюто единую систему. По-моему там никто "правильно" не движется. Но если это то, что Вы имели в виду - здорово! Вы сами решили задачу, казавшуюся Вам такой неразрешимой. Мои поздравления и дальнейших успехов!