I am trying to draw circles dynamically with actionscript, duplicate/create multiples, have them move randomly around the stage independently of each other, and have them bounce off each other if they come in contact. The hit test for the latter has not been written yet. I can’t get the circles to move independently of each other. I would appreciate any help. My code is below.
** CHANGE STAGE COLOR TO SOMETHING OTHER THAN WHITE
Here I try to make 9 movie clips, draw circles inside of them, and apply the moveRandom function to one movie clip.
//***************************************
// DECLARE FUNCTIONS AND VARIABLES
//***************************************
/////////////////////////////////////////
// DECLARE STAGE DIMENSIONS
/////////////////////////////////////////
width = 500;
height = 100;
/////////////////////////////////////////
/////////////////////////////////////////
// DECLARE drawCircle FUNCTION
/////////////////////////////////////////
// DECLARE FUNCTION NAME
// CREATE PLACE HOLDERS FOR VARIABLES PASSED WHEN CIRCLE IS DRAWN
function drawCircle(target_mc:MovieClip, radius:Number, lineThickness:Number, lineColor:Number, lineAlpha:Number):Void {
// VALUE FOR X IS THE SAME VALUE PASSED FOR radius VARIABLE
var x:Number = radius;
// VALUE FOR Y IS THE SAME VALUE PASSED FOR radius VARIABLE
var y:Number = radius;
with (target_mc) {
// TAKE VARIABLE PASSED AND INSERT THEM INTO THE lineStyle(); METHOD
lineStyle(lineThickness, lineColor, lineAlpha);
moveTo(x+radius, y);
// CALL curveTo() METHOD 8 TIMES TO CREATE 8 POINTS TO GIVE CIRCLE ROUND APPEARANCE
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);
}
}
/////////////////////////////////////////
/////////////////////////////////////////
// DECLARE moveRandom FUNCTION
/////////////////////////////////////////
function moveRandom() {
onLoad = function() {
//SET BOUNDARIES OF THE STAGE
width = 500;
height = 100;
//EACH MOVIE CLIP IS SET TO ONE OF THREE RANDOM SPEEDS
speed = Math.round(Math.random()*1)+1;
//SET INITIAL POSITIONS OF MOVIE CLIPS
x = this._x=Math.random()*width;
y = this._y=Math.random()*height;
//SET END POSITIONS OF MOVIE CLIPS
x_new = Math.random()*width;
y_new = Math.random()*height;
}
//EXECUTE THE FOLLOWING CODE CONTINUOUSLY
onEnterFrame = function() {
//DETERMINE X MOVEMENT OF MOVIE CLIPS
//DETERMINE WHERE THE MOVIE CLIP STARTS AND WHERE IT WILL END UP
//MOVE THE MOVIE CLOSER TO ITS DESTINATION
if (x_new>this._x) {
sign_x = 1;
} else {
sign_x = -1;
}
dx = Math.abs(x_new-this._x);
if ((dx>speed) || (dx<-speed)) {
this._x += sign_x*speed;
} else {
x_new = Math.random()*width;
}
//y movement
if (y_new>this._y) {
sign_y = 1;
} else {
sign_y = -1;
}
dy = Math.abs(y_new-this._y);
if ((dy>speed) || (dy<-speed)) {
this._y += sign_y*speed;
} else {
y_new = Math.random()*height;
}
}
}
/////////////////////////////////////////
//***************************************
// EXECUTE CODE
//***************************************
//////////////////////////////////////////
// DRAW CIRCLE
//////////////////////////////////////////
// CREATE 9 EMPTY MOVIE CLIP ON STAGE / INSTANCE NAME: circle0_mc - circle8_mc DEPTH: 0 - 8
for (var i = 0; i < 8; i++) {
// GENERATE RANDOM X AND Y COORDINATES.
x = Math.random()*width;
y = Math.random()*height;
this.createEmptyMovieClip("circle" + i + "_mc", i, {_x:x, _y:y});
}
// PLACE circle0_mc AT _x COORDINATE 100
circle0_mc._x = 100;
// PLACE circle0_mc AT _y COORDINATE 100
circle0_mc._y = 100;
// PLACE circle1_mc AT _x COORDINATE 200
circle1_mc._x = 200;
// PLACE circle1_mc AT _y COORDINATE 200
circle1_mc._y = 200;
// PLACE circl2_mc AT _x COORDINATE 500
circle2_mc._x = 500;
// PLACE circle2_mc AT _y COORDINATE 100
circle2_mc._y = 100;
// CALL THE drawCircle FUNCTION / CREATE IN circle0_mc - circle2_mc, RADIUS OF 8, STROKE OF 7, STROKE COLOR OF white (0XFFFFFF), STROKE ALPHA AT 65%
drawCircle(circle0_mc, 8, 7, 0xFFFFFF, 65);
drawCircle(circle1_mc, 8, 7, 0xFFFFFF, 65);
drawCircle(circle2_mc, 8, 7, 0xFFFFFF, 65);
/////////////////////////////////////////
/////////////////////////////////////////
// CALL moveRandom FUNCTION
/////////////////////////////////////////
moveRandom(circle2_mc);
/////////////////////////////////////////
Here I create one movie clip, duplicate it 8 times, and try to apply the moveRandom function to one movie clip.
//***************************************
// DECLARE FUNCTIONS AND VARIABLES
//***************************************
/////////////////////////////////////////
// DECLARE STAGE DIMENSIONS
/////////////////////////////////////////
width = 500;
height = 100;
/////////////////////////////////////////
/////////////////////////////////////////
// DECLARE drawCircle FUNCTION
/////////////////////////////////////////
// DECLARE FUNCTION NAME
// CREATE PLACE HOLDERS FOR VARIABLES PASSED WHEN CIRCLE IS DRAWN
function drawCircle(target_mc:MovieClip, radius:Number, lineThickness:Number, lineColor:Number, lineAlpha:Number):Void {
// VALUE FOR X IS THE SAME VALUE PASSED FOR radius VARIABLE
var x:Number = radius;
// VALUE FOR Y IS THE SAME VALUE PASSED FOR radius VARIABLE
var y:Number = radius;
with (target_mc) {
// TAKE VARIABLE PASSED AND INSERT THEM INTO THE lineStyle(); METHOD
lineStyle(lineThickness, lineColor, lineAlpha);
moveTo(x+radius, y);
// CALL curveTo() METHOD 8 TIMES TO CREATE 8 POINTS TO GIVE CIRCLE ROUND APPEARANCE
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);
}
}
/////////////////////////////////////////
/////////////////////////////////////////
// DECLARE moveRandom FUNCTION
/////////////////////////////////////////
function moveRandom() {
onLoad = function() {
//SET BOUNDARIES OF THE STAGE
width = 500;
height = 100;
//EACH MOVIE CLIP IS SET TO ONE OF THREE RANDOM SPEEDS
speed = Math.round(Math.random()*1)+1;
//SET INITIAL POSITIONS OF MOVIE CLIPS
x = this._x=Math.random()*width;
y = this._y=Math.random()*height;
//SET END POSITIONS OF MOVIE CLIPS
x_new = Math.random()*width;
y_new = Math.random()*height;
}
//EXECUTE THE FOLLOWING CODE CONTINUOUSLY
onEnterFrame = function() {
//DETERMINE X MOVEMENT OF MOVIE CLIPS
//DETERMINE WHERE THE MOVIE CLIP STARTS AND WHERE IT WILL END UP
//MOVE THE MOVIE CLOSER TO ITS DESTINATION
if (x_new>this._x) {
sign_x = 1;
} else {
sign_x = -1;
}
dx = Math.abs(x_new-this._x);
if ((dx>speed) || (dx<-speed)) {
this._x += sign_x*speed;
} else {
x_new = Math.random()*width;
}
//y movement
if (y_new>this._y) {
sign_y = 1;
} else {
sign_y = -1;
}
dy = Math.abs(y_new-this._y);
if ((dy>speed) || (dy<-speed)) {
this._y += sign_y*speed;
} else {
y_new = Math.random()*height;
}
}
}
//***************************************
// EXECUTE CODE
//***************************************
//////////////////////////////////////////
// DRAW CIRCLE
//////////////////////////////////////////
// CREATE AN EMPTY MOVIE CLIP ON STAGE / INSTANCE NAME: circle_mc DEPTH: 10
createEmptyMovieClip("circle_mc", 10);
// PLACE circle_mc AT _x COORDINATE 100
circle_mc._x = 100;
// PLACE circle_mc AT _y COORDINATE 100
circle_mc._y = 100;
// CALL THE drawCircle FUNCTION / CREATE IN circle_mc, RADIUS OF 8, STROKE OF 7, STROKE COLOR OF white (0XFFFFFF), STROKE ALPHA AT 65%
drawCircle(circle_mc, 8, 7, 0xFFFFFF, 65);
/////////////////////////////////////////
/////////////////////////////////////////
// DUPLICATE circle_mc MOVIE CLIP
/////////////////////////////////////////
// CREATE A for loop AND HAVE IT CYCLE 8 TIMES
// DUPLICATE circle_mc 8 TIMES FOR A TOTAL OF 9 INSTANCES INCLUDING THE ORIGINAL
for (var i = 0; i<8; i++) {
// GENERATE RANDOM X AND Y COORDINATES.
x = Math.random()*width;
y = Math.random()*height;
circle_mc.duplicateMovieClip("circle"+i, i, {_x:x, _y:y});
}
/////////////////////////////////////////
/////////////////////////////////////////
// CALL moveRandom FUNCTION
/////////////////////////////////////////
moveRandom(circle2);
/////////////////////////////////////////