Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1212
  • Last Modified:

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

0
derrida
Asked:
derrida
  • 5
  • 4
  • 2
1 Solution
 
SamuelRostolCommented:
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

0
 
derridaAuthor Commented:
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
0
 
SamuelRostolCommented:
Could you upload the swf so that we can see the effect without my code? :)
0
Get 10% Off Your First Squarespace Website

Ready to showcase your work, publish content or promote your business online? With Squarespace’s award-winning templates and 24/7 customer service, getting started is simple. Head to Squarespace.com and use offer code ‘EXPERTS’ to get 10% off your first purchase.

 
Antonio EstradaTech Leader / Senior Web DeveloperCommented:
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
0
 
Antonio EstradaTech Leader / Senior Web DeveloperCommented:
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
0
 
derridaAuthor Commented:
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
0
 
Antonio EstradaTech Leader / Senior Web DeveloperCommented:
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

0
 
derridaAuthor Commented:
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
0
 
Antonio EstradaTech Leader / Senior Web DeveloperCommented:
Yep, we're quite close :)

Try the following:

<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++){
	var tx:Number = 0;
	var ty:Number = 0;
	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;
	ty = Math.random()*450;
	tx = Math.random()*300;
	holder_mc.x = tx;
	holder_mc.y = ty;
	holder_mc.x > 240 ? holder_mc.x -= widthRange : false;
	holder_mc.y > 280 ? holder_mc.y -= heightRange : false;
	holder_mc.x < 0 ? holder_mc.x = 0 : false;
	holder_mc.y < 0 ? holder_mc.y = 0 : false;
	//Tweener.addTween(holder_mc,{height: 100,width:100 ,alpha: 1,time: 1,transition: "easeOut",onComplete:rangeit()});
	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);
	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

0
 
derridaAuthor Commented:
thanks :)
0
 
Antonio EstradaTech Leader / Senior Web DeveloperCommented:
You're welcome, glad it worked for you ;)

-V
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 5
  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now