r3dux.org

A number-pimping side project from the valleys in *NEW* upside-down flavour.

  • Home
  • ABOUT
  • OLD SITE
  • SEARCH
  • FEEDBACK

ActionScript 3.0: A Simple StarField

r3dux | April 28, 2010

I’ve been pootlin’ about with Flash a little behind the scenes of late, just making the occasional graphical trinket, and it struck me that I hadn’t made a starfield yet in ActionScript – so I knocked together a quick and dirty one in about 20 minutes…

The “star” itself is just a really small, white circle – so small that it turns into a single-pixel block with filtering on it – you can change out the symbol to anything you like, or just draw actual points if you wanted to – I’m happy enough that the guts of it work and will leave it alone and re-use the code when I want the effect sometime…

Source code after the jump if that’s your thing…

Flash File Source Code:

stage.quality = StageQuality.MEDIUM;
 
var starVect:Vector.<Star> = new Vector.<Star>;
 
var motionPaused:Boolean = true;
 
stage.addEventListener(MouseEvent.CLICK, addStars);
 
var banner:MessageBanner = new MessageBanner();
banner.x = stage.stageWidth  / 2;
banner.y = stage.stageHeight / 2;
addChild(banner);
 
function addStars(e:MouseEvent):void
{
	// If we're currently paused...
	if (motionPaused == true)
	{
		// Flip the pause flag
		motionPaused = false;
 
		// Remove the banner from the stage
		removeChild(banner);
 
		for (var loop:int = 0; loop < 400; loop++)
		{
			var tempStar:Star = new Star(this.stage);
 
			starVect.push(tempStar);
 
			addChild(starVect[loop]);
		}
	}
	else // If we're currently playing...
	{
		// Flip the pause flag....
		motionPaused = true;
 
		// Put the banner back on the stage
		addChild(banner);
 
		// And remove all the stars
		while (starVect.length > 0)
		{
			starVect[0].starDestructor(); // Unbind the event listener for the star...
			removeChild(starVect[0]);     // ...then remove it from the stage...
			starVect.splice(0, 1);        // ... and finally from the vector.
		}
 
	} // End of else condition
 
} // End of addStars function

Star Class Source Code:

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.display.Stage; // Used to pass the main stage to the constructor
 
	public class Star extends Sprite
	{
		// Class properties
		public var zSpeed:Number;
		public var zRotationSpeed:Number;
		public var fadedIn:Boolean;		
 
		// Class variables
		public static var maxX:int = 200;
		public static var minX:int = 100;
		public static var maxY:int = 200;
		public static var minY:int = 100;
		public static var maxZ:int = 400;
		public static var minZ:int = 200;
		public static var midStageX:int;
		public static var midStageY:int;
 
		// Constructor
		public function Star(theStage:Stage):void
		{
			// Get the middle of the stage
			midStageX = theStage.stageWidth  / 2;
			midStageY = theStage.stageHeight / 2;
 
			// Randomise x, y and z position for each star
			this.x = ((Math.random() * maxX) - minX) + midStageX;
			this.y = ((Math.random() * maxY) - minY) + midStageY;
			this.z = (Math.random()  * maxZ) - minZ;
 
			// Set random z speed and rotation for each star
			this.zSpeed = (Math.random() * 5) + 3;
			this.zRotationSpeed = Math.random() * 2;
 
			// Make each star completely transparent and set the fadedIn flag
			this.alpha = 0;
			this.fadedIn = false;
 
			// Bind each star to update once per frame
			this.addEventListener(Event.ENTER_FRAME, updateStar);
		}
 
		// Function to unbind the event listener of the star
		public function starDestructor():void
		{
			this.removeEventListener(Event.ENTER_FRAME, updateStar);
		}
 
		// Function to update the star each frame
		private function updateStar(e:Event):void
		{
			// Move star closer...
			this.z -= this.zSpeed;
 
			// Rotate star
			this.rotation += this.zRotationSpeed;			
 
			// If we're getting really close start to fade the star out
			if (this.z < -470)
			{
				this.alpha -= 0.2;
 
				// If the star is super-close reset it
				if (this.z < -800) 
				{
					// Re-randomise x, y and z locations
					this.x = ((Math.random() * maxX) - minX) + midStageX;
					this.y = ((Math.random() * maxY) - minY) + midStageY;
					this.z = (Math.random()  * maxZ) - minZ;
 
					// Reset the alpha to completely transparent
					this.alpha = 0;
					this.fadedIn = false;
 
				} // End of reset if statement
 
			} // End of if star is close statement
 
			// Increase the star alpha to fade it in if it's not already faded in
			if (this.fadedIn == false)
			{
				this.alpha += 0.01;
 
				// If the star's entirely faded in, set the flag to say so
				if (this.alpha >= 1)
				{
					this.fadedIn = true;
				}
			} // End of if statement
 
		} // End of updateStar function
 
	} // End of class
 
} // End of package

The source code and flash file can be found: here.

Related posts:

  1. ActionScript 3.0 Particle Systems #4: Bubbles
  2. ActionScript 3.0 Particle Systems #5: Smoke Effect
  3. ActionScript 3.0: Variable Size Particle Collisions
  4. ActionScript 3.0 Particle Systems #3: Rain Effect
  5. ActionScript 3.0: An Introduction to ActionScript 3.0 in Flash CS4 – Week 3 Lesson 2
Categories
Coding, Imagery
Tags
ActionScript, Effect, Starfield
Comments rss
Comments rss
Trackback
Trackback
Print This Post Print This Post

« Winscape – Virtual Windows Dead Space 2 Teaser Trailer »

Leave a Reply

Click here to cancel reply.

Translate

Categories

Archives

Tags

3D ActionScript ActionScript 3.0 Adobe AI Ballarat Bash C++ Class Convert CS4 Effect Error Film Flash FPS GLFW Glitch GLSL Hack How-To install Java Kinect Linux Live Mash-Up Microsoft Motion mount OpenGL Particle Problem PS3 Remix Retro script Slides Sound Ubuntu Video VirtualBox Wii Windows XBox

Gamercard

OpenR3dux

Misc.

Flattr this

RSS Feed

r3dux twitter feed



“Procrastination is the same as masturbation, you only screw yourself.”

rss Comments rss valid xhtml 1.1 design by jide powered by Wordpress get firefox