Date post: | 21-Dec-2015 |
Category: |
Documents |
View: | 214 times |
Download: | 0 times |
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!
2
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/
3
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
5
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
6
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
7
Important Classes
• MovieClip – classes that act as dynamic objects to be manipulated
• These objects use depthto track asset display over each other.
8
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
9
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);
10
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
11
ActionScript 3 Introduction
• Before we start developing, we will be reviewing some basic language points.– Variable typing– Function declaration– Reference import– Class inheritance– Labels
12
Some Basics
• ActionScript 2.0 is NOT ActionScript 3.0. Some of AS2 will not work with AS3.
• Syntax – function/variable type after name
13
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.
14
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
15
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;
16
Variable Typing
• Variables follow standard scope rules
• Variables can only be used in functions, classes, and/or namespaces you use!
17
Function Declaration
• Functions do not need to be prototyped and they follow a similar declaration as variables.
– AccessLvl function functionName:Type( … ) { … }
18
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() { }
19
Reference Import
• With package being the namespace of the class, import calls take all references
• .* get all classes • Classes follow• Imports can bedone anywherewrt scope!
20
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!
21
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/
22
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
23
Game.as
• Main class of balloons.swf• Game functions. Each below are described in
the sample code :– Game “Loop”– Collisions– Object generation/tracking– Events
24
Framework
• Game Loop – game state management– Called via event that is triggered by new frames
– Switches “game states,” paths of different code
25
Framework - Initialization
• Where all variables and display assets are loaded. Classes can be modified by reference.
26
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
27
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
29
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
31
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)
33
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
35
testCollisions()
• The splice(int index, int howMany) removes element at index, and however many other elements after (howMany)
36
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
38
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
39
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.
40
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
41
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.
42
Framework - Initialization
• Two new states:– STATE_START_PLAYER : adds player to game– STATE_REMOVE_PLAYER : resets game
43
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.
45
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!
46
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()
47