PDA

Просмотр полной версии : "Дрожание" элемента в определенной области.


Stillife
27.02.2014, 20:03
Здравствуйте!
Есть такой ролик. Ниже код.
Можно ли сделать так, чтобы "шарик" дергался примерно в рамках прямоугольника?
Буду очень благодарна за помощь! :)

shake-effect-script.swf

var shakeRange:Number = 2;

function shake(target:MovieClip):Void
{
//select random action for the X axis
var randomAction = random(2);
if(randomAction == 0)
{
target._x += shakeRange
}
else if(randomAction == 1)
{
target._x -= shakeRange
}

//select random action for the Y axis
var randomAction = random(2);
if(randomAction == 0)
{
target._y += shakeRange
}
else if(randomAction == 1)
{
target._y -= shakeRange
}
}

//onEnterFrame that executes the shake function every frame
_root.onEnterFrame = function(){
shake(player_mc);
}

Hauts
27.02.2014, 20:29
Здравствуйте!

Я бы переписал всё.


import flash.geom.Rectangle;

function shake(mc, power, useFullPower, rect){
var sx = (Math.round(Math.random()) * 2 - 1) * power;
var sy = (Math.round(Math.random()) * 2 - 1) * power;
if(!useFullPower){
sx *= Math.random();
sy *= Math.random();
}
var nx = mc._x + sx;
var ny = mc._y + sy;
if(!rect){
return;
}
if(nx < rect.left || nx > rect.right || ny < rect.top || ny > rect.bottom){
return shake(mc, power, rect)
}
}
var playerShakeRect = new Rectangle( 50, 50, 250, 250);
player_mc._x = playerShakeRect.left + Math.random() * playerShakeRect.width;
player_mc._y = playerShakeRect.top + Math.random() * playerShakeRect.height;
this.onEnterFrame = function(){
shake(player_mc, 10, false, playerShakeRect)
}


power — насколько дергать клип.

useFullPower — (true или false) определяет, всегда ли "дергать" на значение power или на произвольное значение в диапазоне power.

rect — экземпляр ректангла для ограничения.

Важно, что если задан последний параметр, то клип изначально должен быть внутри области ограничения.

В коде мог ошибиться, ибо писал в браузере.