PDA

Просмотр полной версии : движение объектов за курсором мыши


Scherbet
24.07.2005, 18:13
http://www.dawidmarcinkowski.com/ - Enter там нажмите. Хочется сделать что-то подобное, чтобы какие-то объекты плавно двигались за курсором мыши. Помогите!

Tom Frost
24.07.2005, 20:09
aaa._x = _xmouse - 150
aaa._y = _ymouse + 200
А штобы они не одновременно с мышой двигались, можно паузу вначале мувика поставить. вроде так

Штрек
25.07.2005, 00:45
aaa._x = _xmouse - 150
aaa._y = _ymouse + 200
А штобы они не одновременно с мышой двигались, можно паузу вначале мувика поставить. вроде так
Вроде не так........


MovieClip.prototype.toMouse = function() {
speed = .25;
setInterval(function (targ) {
x = targ._x;
y = targ._y;
xm = _root._xmouse;
ym = _root._ymouse;
targ._x = x+(xm-x)*speed;
targ._y = y+(ym-y)*speed;
}, 50, this);
};
mc.toMouse();

Silense
25.07.2005, 00:46
Движение мувиков с замедлением к курсору мышки:

smv0._x+=(_xmouse-smv0._x)/30;
smv0._y+=(_ymouse-smv0._y)/30;

smv1._x+=(_xmouse-smv1._x)/50;
smv1._y+=(_ymouse-smv1._y)/50;

smv2._x+=(_xmouse-smv2._x)/80;
smv2._y+=(_ymouse-smv2._y)/80;

smv3...

где smv- мувиклипы которые будут двигаться, /30;/50;-скорость движения.+ фреймрейт побольше выставить.

hentony
12.03.2007, 17:11
движение получается, но при этом все обекты сбиваются в кучу, к курсору. а как сделать так, чтобы они (мувиклипы) ползали за курсором, но не пытались приблизится своим центром к нему, а оставались на каком-то расстоянии?

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

как такое реализовать?

stasidor
20.03.2007, 11:25
а вот еще - хочу чтобы объект движущийся за мышью не выходил за пределы допустим нарисованного квадрата - как этого достичь?

iNils
20.03.2007, 11:26
Проверять координаты.

stasidor
20.03.2007, 12:24
не владею экшнскриптом - скажи какими операторами оперировать, вот определил я что объект вышел за гарницы допустим по х, и теперь как чтобы по у ездил а по х только в другую сторону? про какие команды почитать?

iNils
20.03.2007, 12:29
Условный переход if (условие) {действие}

stasidor
20.03.2007, 12:33
это да, я не знаю ничего про {действие} в данном случае - вот взял я код приведенный выше
MovieClip.prototype.toMouse = function() {
sp = 0.1;
setInterval(function (box) {
x = box._x;
y = box._y;
xm = _root._xmouse;
ym = _root._ymouse;
box._x = x+(xm-x)*sp;
box._y = y+(ym-y)*sp;
}, 50, this);
if(box.hitTest(line_l)){
box._x = 150;
}
};
box.toMouse();и вставил там это условие - может я туплю? где я попарился?

iNils
20.03.2007, 12:45
Для оформления своего кода, надо использовать теги .
Выложите исходник. Мне не понятна взаимосвязь клипов.

goarcade
20.03.2007, 13:03
объекты не сбиваются в одну точку:)

//массив объектов
var objectList:Array = new Array();
//создаем объкеты
for (var i:Number = 0; i<10; i++) {
var mc:MovieClip = createEmptyMovieClip("circle_mc"+i, i);
objectList.push(mc);
mc._x = Math.random()*550;
mc._y = Math.random()*400;
//случайный коэффициент замедления
mc.k = Math.random()*0.1+0.02;
drawCircle(mc, Math.random()*5+10, Math.random()*0xffffff, 100);
}
onEnterFrame = function () {
//движения объектов за мышкой
for (var i:Number = 0; i<objectList.length; i++) {
var mc:MovieClip = objectList[i];
mc._x += (_xmouse-mc._x)*mc.k;
mc._y += (_ymouse-mc._y)*mc.k;
}
//столкновения
for (var i:Number = 0; i<objectList.length; i++) {
var mc1:MovieClip = objectList[i];
var r1:Number = mc1._width*0.5;
for (var j:Number = 0; j<objectList.length; j++) {
var mc2:MovieClip = objectList[j];
var r2:Number = mc1._width*0.5;
var dx:Number = mc1._x-mc2._x;
var dy:Number = mc1._y-mc2._y;
var len:Number = Math.sqrt(dx*dx+dy*dy);
if (mc1 != mc2 && len<r1+r2) {
mc1._x += 0.5*(r1+r2-len)*dx/len;
mc1._y += 0.5*(r1+r2-len)*dy/len;
mc2._x -= 0.5*(r1+r2-len)*dx/len;
mc2._y -= 0.5*(r1+r2-len)*dy/len;
}
}
}
};
function drawCircle(target_mc:MovieClip, radius:Number, fillColor:Number, fillAlpha:Number):Void {
var x:Number = radius;
var y:Number = radius;
with (target_mc) {
beginFill(fillColor, fillAlpha);
moveTo(x+radius, y);
curveTo(radius+x, Math.tan(Math.PI/8)*radius+y, Math.sin(Math.PI/4)*radius+x, Math.sin(Math.PI/4)*radius+y);
curveTo(Math.tan(Math.PI/8)*radius+x, radius+y, x, radius+y);
curveTo(-Math.tan(Math.PI/8)*radius+x, radius+y, -Math.sin(Math.PI/4)*radius+x, Math.sin(Math.PI/4)*radius+y);
curveTo(-radius+x, Math.tan(Math.PI/8)*radius+y, -radius+x, y);
curveTo(-radius+x, -Math.tan(Math.PI/8)*radius+y, -Math.sin(Math.PI/4)*radius+x, -Math.sin(Math.PI/4)*radius+y);
curveTo(-Math.tan(Math.PI/8)*radius+x, -radius+y, x, -radius+y);
curveTo(Math.tan(Math.PI/8)*radius+x, -radius+y, Math.sin(Math.PI/4)*radius+x, -Math.sin(Math.PI/4)*radius+y);
curveTo(radius+x, -Math.tan(Math.PI/8)*radius+y, radius+x, y);
endFill();
}
}