490 likes | 710 Views
Game Design I ActionScript Introduction & Ch 1. Blake Farrugia 10/3/2011. Specifics. ActionScript was originally a small scripting language built for Macromedia Flash applications.
E N D
Game Design IActionScript Introduction & Ch 1 Blake Farrugia 10/3/2011
Specifics • ActionScript was originally a small scripting language built for Macromedia Flash applications. • Currently version 3.0, it is now a fully featured object-oriented language for complex Flash and Flex applications. • Note: This includes games!
IDE Setup • We all can’t have Adobe Flash, so here’s a good freeware IDE : FlashDevelop • Similar to Visual Studio • Allows for quick debugging • Installs most prerequisites needed for its use • We will be using FlashDevelop 4.0 Beta 3, but it should work with the latest version • http://www.flashdevelop.org/
Basics • FlashDevelop is very similar to Visual Studio • The Flex SDK is needed. FlashDevelop should install and configure this for you. • A 32-bit Java Runtime Environment (JRE) of v1.6 or greater is needed. • The Flash Debug Player. It can be found here: http://www.adobe.com/support/flashplayer/downloads.html
Installing Flex SDK • To develop ActionScript games, a Flash installation is not needed. • It certainly helps with art assets and animation, but all that is needed is the Flex SDK. • http://www.flashdevelop.org/wikidocs/index.php?title=AS3
Using FlashDevelop w/ Flex SDK • Compile Workflow • Add resources such as graphics, sounds and fonts to your FlashDevelop project • Use FlashDevelop to write ActionScript classes • Use embed tags in your ActionScript to include assets • Use FlashDevelop to compile your project using the Flex SDK
Important Classes • MovieClip – classes that act as dynamic objects to be manipulated • These objects use depth to track asset display over each other.
Important Classes cont. • bg.addChild() is adding a new instance of the asset BgGif to MovieClip bg (itself) • The Game class then calls addChild(bg) so it can display MovieClip bg within the game
Important Classes cont. • Sound – a sound asset for the game • For Chapter 1, an asset is embedded as a custom class PopSound, then PopSound is applied • Play a sound use popSoundChannel=popSound.play(0,1);
Important Classes cont. • This works for now, but a better way will be introduced later in the book • The authors introduce a set of game framework classes in the chapter 2
ActionScript 3 Introduction • Before we start developing, we will be reviewing some basic language points. • Variable typing • Function declaration • Reference import • Class inheritance • Labels
Some Basics • ActionScript 2.0 is NOT ActionScript 3.0. Some of AS2 will not work with AS3. • Syntax – function/variable type after name
Syntax Notes • Much of the language writes like C#/Java • Much like the languages mentioned above, it is VERY object-oriented. • Function and variable typing syntax differs the most from other languages, as seen above.
Embedded Resources [Embed(source = 'assets/blade.gif')] public static const BladeGif:Class ; • Embedding resources create class objects out of our art/sound assets for use later • This keeps OOP standards while inserting art assets into the script
Variable Typing • To declare a variable of a certain type, it must follow this format: • AccessLvl var variableName:Type ; • public var someInt:Int = 3214; • var someString:String = “This is a string!!”; • public static const someImportantNum:Number = 0;
Variable Typing • Variables follow standard scope rules • Variables can only be used in functions, classes, and/or namespaces you use!
Function Declaration • Functions do not need to be prototyped and they follow a similar declaration as variables. • AccessLvl function functionName:Type( … ) { … }
Function Declaration public function doMath:Float(x:Float, y:Float) { var tempVar:Number = x; var answerVariable:Number = x * y / x; return answerVariable; } private function doNothing:void() { }
Reference Import • With package being the namespace of the class, import calls take all references • .* get all classes • Classes follow • Imports can be done anywhere wrt scope!
Class Inheritance • Use the extends keyword to get functionality of another class. • You can override base functions by using the override keyword. • On the topic of classes, structs DO NOT exist in AS3. Too bad!
Chapter 1-1 : Balloon • At time of writing, Chapter 1 code did not use Flex SDK. Much of it is wrong. • The original code does not use embedded resources and lacks many classes. It will not work properly. • Much of the actual book material is accurate, but in this case, the code from CH1 is not. • Revised code can be found along with a description of fixes http://www.8bitrocket.com/2010/3/29/Essential-Guide-To-Flash-Games-Code-Supplement-1-Ch-1-Games-With-The-Flex-SDK/
Game Basics • Player : A large spinning saw blade • Enemies : Balloons • Objective: Pop the balloons with your spinning blade! • Source Code : Game.as • Any assets (graphics, sounds) are in the revised code’s asset folder: • /ch1_balloons/src/assets
Game.as • Main class of balloons.swf • Game functions. Each below are described in the sample code : • Game “Loop” • Collisions • Object generation/tracking • Events
Framework • Game Loop – game state management • Called via event that is triggered by new frames • Switches “game states,” paths of different code
Framework - Initialization • Where all variables and display assets are loaded. Classes can be modified by reference.
Initialization cont. • What is this function doing? • Initializing MovieClip player and assigning BladeGif as it’s only displayable feature • Initializing MovieClip array enemy to an empty array • Add player to Game’s Displayable Object List and set up important data ( level, chances ) • Set Game’s gameState to STATE_PLAY, allowing game to be played
Framework – Play Game • playGame() runs each function or stage of the • game. • makeEnemies() – Randomly create enemies • moveEnemies() – Update enemy wrt speed • testCollisions() – Check player collisions against all enemy collisions • testForEnd() – Check win/lose conditions
makeEnemies() • Pseudo-random chance to add 1 enemy variation with a speed based on current level to array of enemies • Sets all attributes of enemy after creation • Location (x, y) • Speed
moveEnemies() • Moves balloons upward based on their speed. • If they reach past the window bounds, then it is counted as a “miss.” • The player only gets 5 misses before the game ends (abruptly)
testCollisions() • MovieClip collisions are based on bounding boxes they create/update on initialization with an asset. • Custom collision boxes can be made. • This function checks if any enemy is colliding with the player. • If so, they are “popped” and the player is given a point
testCollisions() • The splice(int index, int howMany) removes element at index, and however many other elements after (howMany)
testForEnd() • Check ending conditions • How many misses? / Has Player reached Top Score? • Since gameLoop always checks gameState; this registers our game over, or just increases the level / difficulty
What’s Next?! • Well, like all games, everything is in a loop. • All of these functions will repeat based on the gameState path chosen via int constants. • STATE_INIT: initialize game • STATE_PLAY: continuously update running game • STATE_END: end game sequence • Very basic, but a good standard to follow for simple games
Chapter 1-2 : Pixel Shooter • Much of “Balloons” is in Pixel Shooter • This will talk more about major changes to the framework rather than note every minor change. • Any new syntax will also be described.
Game Basics • Player : A spaceship • Enemies : Alien spaceships • Objective: Kill the alien ships • Source Code : Game.as • Any assets (graphics, sounds) are in the revised code’s asset folder: • /ch1_shooter/src/assets
Major Framework Changes • Much of the framework is in tact, but this game now adds player lives to the mix • Multiple lives and player restarts are controlled by the state system by using STATE_START_PLAYER • Projectiles are new as well, so new collision-handling and events were added.
Framework - Initialization • Two new states: • STATE_START_PLAYER : adds player to game • STATE_REMOVE_PLAYER : resets game
startPlayer() and removePlayer() • startPlayer() – very basic; add player back to game, return to playing the game • removePlayer() – reset level; remove all enemies, missiles, explosions, and player from the screen, then change state to recreate player.
Anything Else? • Though the framework is the same, many new helper functions have been added. • Each builds on what has already been established in “Balloons” • removeEnemy, Missile, Explosion () – remove instances of any called item above • makeExplosion() – create explosion animation • onMouseDownEvent() – player-triggered event!
onMouseDownEvent() • This event was initialized on the first line of the initGame() function. • When the player left clicks the mouse, a missile will be fired his ship. • Movement and collision of the missile will be tracked by the game in moveEnemy() and testCollision()
Tutorials • 8 bit Rocket – Book authors website : Mostly up to date tutorials in ActionScript 3 http://www.8bitrocket.com/ • Apress Book Website : Site that has all sample code to the book http://www.apress.com/9781430226147