-
AS3 Tweening with If Statement, animation problem
Hello,
I've got this Flash AS3 code I'm playing around with below. Im trying to get the spheres created to move off the stage at frame 81 (of a 360 frame timeline). I'm using an If statement but I think its causing problems as the tween is happening every time the code runs after frame 81 causing the spheres to judder.
If you let the animation loop the problem seems to go away?
I'm sure this can't be too tricky, please help an absolute beginner out!
Many thanks
ZM
Code:
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
//number of balls
var numBalls:uint = 100;
var defaultBallSize:uint = 15;
//init
makeDots();
function makeDots():void {
//create desired number of balls
for (var ballNum:uint=0; ballNum<numBalls; ballNum++){
var c1:Number = 0xA35853;
var c2:Number = 0xA35853;
//create ball
var thisBall:MovieClip = new MovieClip();
thisBall.graphics.beginFill(c1, .9);
/*thisBall.graphics.lineStyle(defaultBallSize/3, c2, .9);*/
thisBall.graphics.drawCircle(defaultBallSize, defaultBallSize, defaultBallSize);
thisBall.graphics.endFill();
addChild(thisBall);
//coordinates
thisBall.x = Math.random() * stage.stageWidth;
thisBall.y = Math.random() * stage.stageHeight;
//percieved depth
thisBall.ballNum = ballNum;
thisBall.depth = ballNum/numBalls;
thisBall.scaleY = thisBall.scaleX = thisBall.alpha = ballNum/numBalls;
//velocity
thisBall.vx = 0;
thisBall.vy = 0;
thisBall.vz = 0;
//ball animation
thisBall.addEventListener(Event.ENTER_FRAME, animateBall);
/*var myTweenOn:Tween = new Tween(thisBall, "alpha", Regular.easeIn, 0, 0.3, 6, true);*/
}
}
var dampen:Number = 0.95;
var maxScale:Number = 1.3;
var minScale:Number = 0.1;
var maxAlpha:Number = 0.4;
var minAlpha:Number = 0.3;
function animateBall(e:Event):void{
var thisBall:Object = e.target;
//apply randomness to velocity
thisBall.vx += Math.random() * 0.2 - 0.1;
thisBall.vy += Math.random() * 0.2 - 0.1;
thisBall.vz += Math.random() * 0.002 - 0.001;
thisBall.x += thisBall.vx;
thisBall.y += thisBall.vy;
thisBall.scaleX = thisBall.scaleY += thisBall.vz;
thisBall.alpha += thisBall.vz;
thisBall.vx *= dampen;
thisBall.vy *= dampen;
thisBall.vz *= dampen;
if(currentFrame > 81) {
var myTween:Tween = new Tween(thisBall, "alpha", Regular.easeOut, thisBall.alpha, 0, 2, true);
/*thisBall.alpha = minAlpha;*/
}
else(currentFrame < 82); {
thisBall.alpha = thisBall.alpha;
}
if(currentFrame > 81 && thisBall.x < stage.stageWidth/2 ) {
var myTweenXLeft:Tween = new Tween(thisBall, "x", None.easeOut, thisBall.x, thisBall.x - 140, 1, true);
thisBall.x = thisBall.x;
}
if(currentFrame > 81 && thisBall.x > stage.stageWidth/2 ) {
var myTweenXRight:Tween = new Tween(thisBall, "x", Regular.easeOut, thisBall.x, thisBall.x + 140, 1, true);
thisBall.x = thisBall.x;
}
//else(currentFrame < 81); {
// thisBall.x = thisBall.x;
// /*thisBall.y = thisBall.y;*/
//}
if(currentFrame > 81 && thisBall.y < stage.stageHeight/2 ) {
var myTweenYUp:Tween = new Tween(thisBall, "y", Regular.easeOut, thisBall.y, thisBall.y - 115, 1, true);
thisBall.y = thisBall.y;
}
if(currentFrame > 81 && thisBall.y > stage.stageHeight/2 ) {
var myTweenYDown:Tween = new Tween(thisBall, "y", Regular.easeOut, thisBall.y, thisBall.y + 115, 1, true);
thisBall.y = thisBall.y;
}
//else(currentFrame < 81); {
// /*thisBall.x = thisBall.x;*/
// thisBall.y = thisBall.y;
//}
if(thisBall.x > stage.stageWidth) {
thisBall.x = 0 - thisBall.width;
}
else if(thisBall.x < 0 - thisBall.width) {
thisBall.x = stage.stageWidth;
}
if(thisBall.y > stage.stageHeight) {
thisBall.y = 0 - thisBall.height;
}
else if(thisBall.y < 0 - thisBall.height) {
thisBall.y = stage.stageHeight;
}
if (thisBall.scaleX > maxScale){
thisBall.scaleX = thisBall.scaleY = maxScale;
}
else if (thisBall.scaleX < minScale){
thisBall.scaleX = thisBall.scaleY = minScale;
}
if (thisBall.alpha > maxAlpha){
thisBall.alpha = maxAlpha;
}
else if (thisBall.alpha < minAlpha){
thisBall.alpha = minAlpha;
}
}
function randomColor():Number{
return Math.floor(Math.random() * 16777215);
}
/*
function fadeBall(e:Event):void{
var thisBall:Object = e.target;
if(currentFrame > 48) {
thisBall.alpha == 0;
}
}*/
-
.
Hi,
I'm not entirely sure what you are trying to do, with my mock up as you didnt include any files, I come up with this.
PHP Code:
import fl.transitions.Tween; import fl.transitions.easing.*; import fl.transitions.TweenEvent;
//number of balls var numBalls:uint = 100; var defaultBallSize:uint = 15;
//init makeDots();
function makeDots():void { //create desired number of balls for (var ballNum:uint=0; ballNum<numBalls; ballNum++) { var c1:Number = 0xA35853; var c2:Number = 0xA35853;
//create ball
var thisBall:MovieClip = new MovieClip(); thisBall.graphics.beginFill(c1, .9); /*thisBall.graphics.lineStyle(defaultBallSize/3, c2, .9);*/ thisBall.graphics.drawCircle(defaultBallSize, defaultBallSize, defaultBallSize); thisBall.graphics.endFill();
//coordinates;
thisBall.x = Math.random() * stage.stageWidth; thisBall.y = Math.random() * stage.stageHeight;
//percieved depth thisBall.ballNum = ballNum; thisBall.depth = ballNum / numBalls; thisBall.scaleY = thisBall.scaleX = thisBall.alpha = ballNum / numBalls; //velocity thisBall.vx = 0; thisBall.vy = 0; thisBall.vz = 0;
//ball animation thisBall.addEventListener(Event.ENTER_FRAME, animateBall); /*var myTweenOn:Tween = new Tween(thisBall, "alpha", Regular.easeIn, 0, 0.3, 6, true);*/ addChild(thisBall); } }
var dampen:Number = 0.95; var maxScale:Number = 1.3; var minScale:Number = 0.1; var maxAlpha:Number = 0.4; var minAlpha:Number = 0.3;
function animateBall(e:Event):void { var thatBall:Object = e.target; var cFrame:Number = currentFrame;
//apply randomness to velocity thatBall.vx += Math.random() * 0.2 - 0.1; thatBall.vy += Math.random() * 0.2 - 0.1; thatBall.vz += Math.random() * 0.002 - 0.001;
thatBall.x += thatBall.vx; thatBall.y += thatBall.vy; thatBall.scaleX = thatBall.scaleY += thatBall.vz; thatBall.alpha += thatBall.vz; thatBall.vx *= dampen; thatBall.vy *= dampen; thatBall.vz *= dampen;
if (cFrame > 81) { var myTween:Tween = new Tween(thatBall,"alpha",Regular.easeOut,thatBall.alpha,0,2,true);
if (cFrame > 81 && thatBall.x < stage.stageWidth / 2 ) { var myTweenXLeft:Tween = new Tween(thatBall,"x",None.easeOut,thatBall.x,thatBall.x - 140,1,true); } else if (cFrame > 81 && thatBall.x > stage.stageWidth / 2 ) { var myTweenXRight:Tween = new Tween(thatBall,"x",Regular.easeOut,thatBall.x,thatBall.x + 140,1,true); }
if (cFrame > 81 && thatBall.y < stage.stageHeight / 2 ) { var myTweenYUp:Tween = new Tween(thatBall,"y",Regular.easeOut,thatBall.y,thatBall.y - 115,1,true); } else if (cFrame > 81 && thatBall.y > stage.stageHeight / 2 ) { var myTweenYDown:Tween = new Tween(thatBall,"y",Regular.easeOut,thatBall.y,thatBall.y + 115,1,true); }
if (thatBall.x > stage.stageWidth) { thatBall.x = 0 - thatBall.width; } else if (thatBall.x < 0 - thatBall.width) { thatBall.x = stage.stageWidth - thatBall.width; } if (thatBall.y > stage.stageHeight) { thatBall.y = 0 - thatBall.height; } else if (thatBall.y < 0 - thatBall.height) { thatBall.y = stage.stageHeight - thatBall.height; }
if (thatBall.scaleX > maxScale) { thatBall.scaleX = thatBall.scaleY = maxScale; } else if (thatBall.scaleX < minScale) { thatBall.scaleX = thatBall.scaleY = minScale; } if (thatBall.alpha > maxAlpha) { thatBall.alpha = maxAlpha; } else if (thatBall.alpha < minAlpha) { thatBall.alpha = minAlpha; }
thatBall.removeEventListener(Event.ENTER_FRAME, animateBall); return; } }
function randomColor():Number { return Math.floor(Math.random() * 16777215); }
/* function fadeBall(e:Event):void { var thisBall:Object = e.target; if (cFrameFrame > 48) { thisBall.alpha == 0; } }*/
-
Have you tried using event dispatcher ? The dispatcher could be easily triggered from any frame you want
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|