This code example contains the full Actionscript 3.0 code for the Starfield and Star classes discussed in this post: Flash Game Programming: Adding objects to the main stage from a child object.
If you would like to see these classes used in a small project, go here: Project Examples: SWF Illustrating the Star, Starfield, and MessageBoxManager Classes.
The Starfield class:
package
{
import flash.display.*;
import flash.events.*;
public class Starfield extends MovieClip
{
//This class manages all of the Star objects displayed on the game screen.
//Array to hold the Star objects.
private var myStarfield:Array = new Array;
//Integer to notate the number of Star objects to create.
private var numberOfStars:int;
public function Starfield(numberOfStars: int)
{
//Constructor initializes the class and waits for the object to be drawn on the main stage.
this.numberOfStars = numberOfStars;
this.addEventListener(Event.ADDED_TO_STAGE, DrawStarfield);
}
public function DrawStarfield(myEvent: Event): void
{
//The Starfield object has been added to the stage by its parent. We now create and draw
//the Star objects.
//Remove the event listener.
this.removeEventListener(Event.ADDED_TO_STAGE, DrawStarfield);
//Temporary variables to create and display the Star objects.
var thisIndex:int;
var thisStar:Star;
//Loop to iterate the creation and display of each Star object.
for (thisIndex = 0; thisIndex < numberOfStars; thisIndex++)
{
//Create a new Star object.
thisStar = new Star(Math.random() * 640,Math.random() * 480, Math.random() * 3 + 1);
//Add the Star object to the parent's stage.
parent.addChild(thisStar);
//Add the Star object to the reference array for the Starfield object.
myStarfield.push(thisStar);
}
}
public function UpdateStarField(cameraX:int, cameraY:int) {
//Update all stars being managed by the object based on the change in game camera position.
//Temporary variables to point to each Star object and update it.
var thisIndex:int;
var thisStar:Star;
//Loop to access each Star object in the reference array.
for (thisIndex = 0; thisIndex < myStarfield.length; thisIndex++)
{
//Point to the Star object in the reference array indicated by thisIndex.
thisStar = myStarfield[thisIndex];
//Update the Star object's position based on the change in the game camera and the Star object's layer.
thisStar.x = thisStar.x - (cameraX / thisStar.getZDistance);
thisStar.y = thisStar.y - (cameraY / thisStar.getZDistance);
//If the Star object goes off screen, recycle it by wrapping it on the screen.
if (thisStar.x > 640) {thisStar.x = 0;}
if (thisStar.x < 0) {thisStar.x = 640;}
if (thisStar.y > 480) {thisStar.y = 0;}
if (thisStar.y < 0) {thisStar.y = 480;}
}
}
}
}
The Star class:
package
{
import flash.display.*;
public class Star extends MovieClip
{
//This class defines the properties of a Star object used to make the scrolling background
//on the main stage.
//Integer to determine which layer of the background the Star object is in.
private var zDistance:int;
public function Star(xPos: int, yPos: int, zDistance: int)
{
//Constructor to initialize the Star object.
this.x = xPos;
this.y = yPos;
this.alpha = .25 * (4 - zDistance);
this.zDistance = zDistance;
}
public function get getZDistance():int {
//This get function returns the integer variable zDistance. We use it to determine
//which layer the Star object is in. The layer determines the brightness of the star
//and how fast it will scroll as the game camera changes positions.
return this.zDistance;
}
}
}
No comments:
Post a Comment