Link to home
Start Free TrialLog in
Avatar of derrida
derrida

asked on

a range for a random animation AS3

Hi
i am using an animation which uses the random property for the x and the y. the problem: it uses the space beyond the stage.
i need to create a range that limits the randomness of the animation. tries several things but its not working.

i attach my code.


best regards

ron
import caurina.transitions.*;
 
 
var holder_mc:Sprite = new Sprite();
holder_mc.alpha =0; 
 
var widthRange:Number = 200;
var heightRange:Number = 200;
 
function dropPics ():void {
	for(var i:int =0 ; i < 8; i++){
	holder_mc = new Sprite();
	holder_mc.graphics.beginFill(0x000000);
	holder_mc.graphics.drawRect(0,0, stage.stageWidth + 200,stage.stageHeight + 200);
	holder_mc.graphics.endFill();
	//trace(i);
	holder_mc.name = "holder" + i;
	Tweener.addTween(holder_mc,{height: 200,width:200 ,alpha: 1,time: 1,transition: "easeOut"});
	var ds:DropShadowFilter = new DropShadowFilter(5,45,0x999999,0.5,4,4,1,5);
	holder_mc.filters = [ds];
	addChild(holder_mc);
	holder_mc.buttonMode = true;
	
	if(x < widthRange  && y < heightRange){
	y += y+ Math.random();
	x += x+ Math.random();
	holder_mc.x -= x+ Math.random()* 380;
	holder_mc.y -= y+ Math.random()* 250;
	}
	
	holder_mc.addEventListener(MouseEvent.CLICK ,tellname);
	}
}
 
 
dropPics();
 
function tellname (e:MouseEvent):void {
	trace(e.target.name);
}

Open in new window

Avatar of SamuelRostol
SamuelRostol
Flag of Norway image

Hi there,

I don't have time to test it - but the solution should be something like:

<code snippet>

Try it out :)

Kindly,
Samuel
holder_mc.x -= x+ Math.random()* 380;
holder_mc.y -= y+ Math.random()* 250;
 
// New code, tests position
if (holder_mc.x < 0) holder_mc.x = 0;
if (holder_mc.y < 0) holder_mc.y = 0;
if ((holder_mc.x + holder_mc.width) < stage.stageWidth) holder_mc.x = stage.stageWidth- holder_mc.width;
if ((holder_mc.y + holder_mc.height) < stage.stageHeight) holder_mc.y = stage.stageHeight - holder_mc.height;

Open in new window

Avatar of derrida
derrida

ASKER

hi
thanks for the answer, but it does not work. i tried to play with the code you gave (which specify more the boundaries than my code) but i cannot make it work.

any suggestion?

ron
Could you upload the swf so that we can see the effect without my code? :)
Avatar of Antonio Estrada
Are you sure that this line is OK?

holder_mc.graphics.drawRect(0,0, stage.stageWidth + 200,stage.stageHeight + 200);

This means every Sprite you create will be 200 pixels bigger than your movie entire width and height, thus always being outside. (Aside from the random x and y positions)

-V
Ah, nevermind, I suppose that the custom Tweener class makes an effect so they're 200x200.

Knowing that, I think you'll need a onMotionFinished handler and then check the x and y positions with the code SamuelRostol provided.

-V
Avatar of derrida

ASKER

hi
first of all,you are right about the tween. i have entered that code on the onComplete but it still does not limit itself to the stage size. i played with the code again and again, it all looks so reasonable but it will not work.

i uploaded the files (fla and swf) here:
https://filedb.experts-exchange.com/incoming/ee-stuff/7179-TweenerGallery.zip

thanks for the help

best regards

ron
Maybe something like the following will do the trick:

(I used the normal Tween class you can safely replace those two Tweens for your custom Tweener class)

<code>

-V
//import caurina.transitions.*;
import fl.transitions.Tween;
import fl.transitions.TweenEvent;
import fl.transitions.easing.*;
 
var holder_mc:Sprite = new Sprite();
holder_mc.alpha =0; 
 
var widthRange:Number = 200;
var heightRange:Number = 200;
 
function dropPics ():void {
	for(var i:int =0 ; i < 8; i++){
	holder_mc = new Sprite();
	holder_mc.graphics.beginFill(0x000000);
	holder_mc.graphics.drawRect(0,0, stage.stageWidth + 200,stage.stageHeight + 200);
	holder_mc.graphics.endFill();
	//trace(i);
	holder_mc.name = "holder" + i;
	y = Math.random()*200;
	x = Math.random()*200;
	holder_mc.x = x;//+ Math.random()* 500;
	holder_mc.y = y;//+ Math.random()* 500;
	holder_mc.x > 240 ? holder_mc.x -= widthRange : false;
	holder_mc.y > 120 ? holder_mc.y -= heightRange : false;
	holder_mc.x < 0 ? holder_mc.x = 0 : false;
	holder_mc.y < 0 ? holder_mc.y = 0 : false;
	var heightTween:Tween = new Tween(holder_mc, "height", Strong.easeOut, holder_mc.height, 100, 1, true);
	var widthTween:Tween = new Tween(holder_mc, "width", Strong.easeOut, holder_mc.width, 100, 1, true);
	//Tweener.addTween(holder_mc,{height: 100,width:100 ,alpha: 1,time: 1,transition: "easeOut",onComplete:rangeit()});
	var ds:DropShadowFilter = new DropShadowFilter(5,45,0x999999,0.5,4,4,1,5);
	holder_mc.filters = [ds];
	addChild(holder_mc);
	holder_mc.buttonMode = true;
 
	holder_mc.addEventListener(MouseEvent.CLICK ,tellname);
	}
}
 
dropPics();
 
function tellname (e:MouseEvent):void {
	trace(e.target.name);
}

Open in new window

Avatar of derrida

ASKER

Hi
thanks for the help. it does scatter and does not cross the stage, but i want a bigger scattering and when i add to the:
y = Math.random()*450;
x = Math.random()*300;
it allow for a bigger scattering but then again, goes beyond the boundaries of the stage.
so how can i widen the scattering without losing the stage?

i guess we are right before solving it, i hope:)

thanks for your help

best regards

ron
ASKER CERTIFIED SOLUTION
Avatar of Antonio Estrada
Antonio Estrada
Flag of Mexico image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of derrida

ASKER

thanks :)
You're welcome, glad it worked for you ;)

-V