actionscript para animar una nave (juego flash)

Creado a las // comentar

The Ship class is linked to a ship movie clip on stage.
The Ship class is the largest class, because we will use the ship class in this game to drive most of the game logic.

class Ship extends MovieClip
//We want to create several varibles to keep track of important game information.
//We must define them here

//This will keep track of the ship's speed
var velocity;
//This will create a buffer between shooting missiles.
var shootLimiter;
//This variable will keep track of how often to create enemies
var enemyTimer;
//This variable will keep track of how oftern to create a miniboss
var miniBossTimer;
//This variable will keep track of how often to create a powerup
var powerUpTimer;
//This variable will keep track of how many minibosses before the boss
var bossCountdown;
//This variable will be an array and will contain a list of all enemies on stage.
var enemies;
//This will keep track of the ship's current score.
var score;
//This will store the final score of a game after bonuses have been tallied.
var finalScore;
//This variable keeps track of the ship's current health
var health;

//This will keep track of how many kills the ship has made
var kills;
//This will keep track of how many times a ship missile fails to hit a target before flying off screen.
var misses;
//This will keep track of whether the ship is currently shaking from taking damage
var shaking;
//this will store how many frames the ship should shake for when it takes damage
var shakeDuration;
//this variable is actually a reference to the shield movie clip that is nested inside the ship movie clip.
var shield:MovieClip;

//This onLoad function is a built-in function of every movie clip.
//When the ship is first loaded onto stage (which will be when the swf is launched because the ship movie clip is sitting on stage)
//we want to do several things:
function onLoad()
//this is how you connect to the the kongregate servers to use the stats and highscore api!

//Let's create a sound object on the root timeline.
_root.soundFX = new Sound();

//Let's play a big explosion sound when the game first launches. The "very_big_explosion.wav" is the linakge identifier of that sound in the fla library

//Hide the ship graphic.
_visible = false;

//Hide the game over menu.
_root.gameOverMenu._visible = false;
//Hide the ship's health meter.
_root.healthMeter._visible = false;
//Hide the enemy health meter
_root.enemyHealthMeter._visible = false;

//Attach some logic to the PLAY button that is nested in the play menu.
_root.playMenu.playButton.onPress = function()
//When the PLAY button is pressed, call the ship's newGame() function


//When ever we want to start a new game, we need to call this function which will do several things
function newGame()
//When a new game is started, hide the play menu, the game over menu, and the enemy health meter
//The enemy health meter will only be diplayd during miniboss and boss battles
_root.playMenu._visible = false;
_root.gameOverMenu._visible = false;
_root.enemyHealthMeter._visible = false;

//reset the values of all these varibles to zero for the new game.
kills = 0;
misses = 0;
velocity = 10;
shootLimiter = 0;
powerUpTimer = 0;
enemyTimer = 0;
miniBossTimer = 0;

//reset the Boss Countdown variable to whatever you want it to be.
//Right now it's set to trigger te boss after 2 minibosses have been defeated
bossCountdown = 2;

//Reset the enemies array. this will clear the list of enemies and start a new list which will be empty at first.
enemies = [];

//This will reset the score variable to zero and update the display to reflect this change
score = 0;
_root.scoreText.text = score;

//This will reset the health variable to 100, show the health meter, and update the health meter to reflect this change
health = 100;
_root.healthMeter._visible = true; = 100;

//Center the ship on stage (our game is 600 pixels wide and 300 tall)
_x = 300;
_y = 150;

//unhide the ship graphic now
_visible = true;
//But hide the ship's shield graphic until a shield powerup is captured.
shield._visible = false;
//Set the shaking variable to false. It will get set to true when the ship gets hit and takes damage.
shaking = false;
//Set a duratin that we want shakes to last. 10 frames is about 1/3 of a second.
shakeDuration = 10;
//Make sure the ship is not stuck in a shaking rotation from the previous game.
_rotation = 0;

//This onEnterFrame function is a built-in function of every movie clip.
//All the code that we need to continuously execute at 30 frames a second goes inside this function
function onEnterFrame()
//We only want to execute logic at frame rate if the ship is visible (the game is being played right now)
//We don't want to do all this logic if we are on the play menu or the game over menu, etc...
if(_visible == true)

Check to see if arrow keys are being pressed, and if the ship is not heading off screen, and update it's position
basd on its speed. For example: if the LEFT arrow key is being pressed AND ( && ) the ships _x position is greater than
40, move the ship left 10 pixels (we set our velocity to 10 in the newGame() function).
if( Key.isDown(Key.LEFT) && _x > 40){ _x -= velocity; }
if( Key.isDown(Key.RIGHT) && _x < 560){ _x += velocity; } if( Key.isDown(Key.UP) && _y > 20){ _y -= velocity; }
if( Key.isDown(Key.DOWN) && _y < 280){ _y += velocity; } //--- SHOOTING LOGIC: --- //Increment the shootLimiter (it gets set to zero in the newGame() function) shootLimiter += 1; //Then check to see if the SPACE BAR is being pressed AND ( && ) if the shootLimiter has counted to at least eight //NOTE: you can change the 8 to any number to modify the rate at which the ship can shoot if( Key.isDown(Key.SPACE) && shootLimiter > 8)
//If so, attach a Missile to stage (See Missile class).
var missile = _root.attachMovie("Missile","Missile" + _root.getNextHighestDepth(), _root.getNextHighestDepth());
//Set the missile's position to that of this ship's, but offset it a little so it comes from the nose of the ship, or the cannon, etc...
missile._x = _x + 50;
missile._y = _y + 2;

//Lastly, set the shootLimiter back to zero. It will start counting back up at framerate, and in 8 frames, you can fire again
shootLimiter = 0;


//--- SHAKING LOGIC: ---
//If the ship is currently shakig from taking damage, call it's shake() function
if(shaking == true){ shake(); }

//--- SHIELD LOGIC: ---
//If the shield is currenlty active (from getting a shield powerup)
if(shield._visible == true)
//Slowly fade it out.
shield._alpha-= .5;
//If the shield's alpha reaches zero (if it completely transparent)
if(shield._alpha < 0) { //hide it, tunr it's visibility off shield._visible = false; //but crank it's alpha all the way back up so it'll be ready to fade our again next time we unhide it shield._alpha = 100; } } //--- ENEMY SHIP TIMER LOGIC: --- //Incrment the enemy timer. enemyTimer += 1; //If it reaches 30 (30 frames, or one second) if(enemyTimer > 30)
//reset it back to zero so it'll start counting back up to 30 again.
enemyTimer = 0;
//Attach a new enemy ship to the stage (See EnemyShip class)
_root.attachMovie("EnemyShip", "EnemyShip" + _root.getNextHighestDepth(), _root.getNextHighestDepth());

//Increment the powerup timer by one
powerUpTimer += 1;
//If it reaches 30 * 10 (30 frames x 10 seconds, 300 frames or 10 seconds)
if(powerUpTimer > 30 * 10)
//reset it back to zero so it'll start counting back up to 300 again.
powerUpTimer = 0;
//Attach a new PowerUp to the stage (see PowerUp class)
_root.attachMovie("PowerUp", "PowerUp" + _root.getNextHighestDepth(), _root.getNextHighestDepth());

//Increment the miniboss timer by one
miniBossTimer += 1;
//If it reaches 30 * 30 (30 frames x 30 seconds, 900 frames or 30 seconds)
if(miniBossTimer == (30 * 30))
//if there is not already a miniboss on stage
//if our boss countdown timer has reached zero
if( bossCountdown == 0)
//Attach a Boss to stage (see Boss class)
_root.attachMovie("Boss", "boss", _root.getNextHighestDepth());
//if our boss countdown timer has not reached zero yet
//Attach a miniboss to stage (see MiniBoss class)
_root.attachMovie("MiniBoss", "miniBoss", _root.getNextHighestDepth());
//then count down the Boss timer one miniboss closer to the boss
bossCountdown -= 1;

//we are now done with all of our onEnterFrame() logic

// Here are a few functions we made to do extra stuff.

//We can call this function from any other class like this: _root.ship.updateScore(10); which will add 10 to the ship's score.
function updateScore(points)
//Add "points" which is som value passed into this function to the ship's score variable
score += points;
//update the score display on stage to match the score variable
_root.scoreText.text = score;

//We can call this function from any other class like this: _root.ship.updateHealth(-10); which would subtract 10 from the ship's health.
function updateHealth(points)
//Only update the ship's health if it is till alive (if it's visible).
if(_visible == true)
//Update the health by the value "points" which gets passed into this function. It cn be a negative value (hit by missile)
//or it could be a positive value (collected a health powerup)
health += points;
//Adjust the helath meter's scale to represent the percent health of the ship. = health;

//Add an explosion sound fx. we create the _root.soundFX sound object in the Ship class

//IF the ship's health is now zero or less
if(health <= 0)
//force it to exactly zero
health = 0;
//update the health bar = health;
//call the ship's explode function

//We call this function from the updateHealth() function when the ship's health reaches zero
function explode()
//Attach an explosion movie clip to the stage
var explosion = _root.attachMovie("Explosion","Explosion" + _root.getNextHighestDepth(),_root.getNextHighestDepth());
//Position the explosion to the position of the ship.
explosion._x = _x;
explosion._y = _y;
//turn the ship's visiblity off, hide the ship. It'll look like it exploded.
this._visible = false;

//Add an explosion sound fx. we create the _root.soundFX sound object in the Ship class

//Once the ship is dead, get rid of all enemies on stage
//Then call this game over function

//This function will iterate through every enemy in the enemies array and destroy it!
//We call this at the end of the game to clear the screen of enemies.
function destroyAllEnemies()
//cycle through every index of the enemies array
for(var i = 0; i< enemies.length; i++)
//destroy the enemy at this index

//This function will iterate through every enemy in the enemies array and damage it!
//We call this when a nuke poweup is collected. Regulare enemies will just explode, but minibosses and bosses will
//just take damage.
function damageAllEnemies()
//Cycle through every index of the enemies array.
for(var i = 0; i< enemies.length; i++)
//Call the takeDamage() function of the enemy at this index in the list.

//This function gets called from the Boss class when the Boss is destroyed. Kill the boss to win the game.
function winGame()

//this is how you submit a stat to the Kongregate api to flag that the game has been WON!
_root.kongregateStats.submit("GameWon", 1); // The user collected a coin

//Play the "MISSION COMPLETED" banner. It will move across the screen.
//Turn the visibility of the ship off.
this._visible = false;
//Remove all enemies from the stage.
//Then do the normal game over logic by calling the gamOver() function.

//This function gets called from th explode() function and also form the winGame() function.
function gameOver()
//unhide the game over menu
//attach some logic to the PLAY AGAIN button
_root.gameOverMenu.playAgainButton.onPress = function()
//when the PLAY AGAIN button is pressed, call the ship's newGame() function.

//display the kills bonus
_root.gameOverMenu.killBonus.text = kills + " x " + 100;
//display the hit percent bonus
_root.gameOverMenu.hitBonus.text = Math.floor((kills/(misses + kills))*100) + " x " + 100;

//now calculate the final score:
//score + (kills x 100) + (hit percent x 100)
finalScore = score + (kills * 100) + (Math.floor((kills/(misses + kills))*100)*100);
//then display the final score
_root.gameOverMenu.finalScore.text = finalScore;

//this is how you submit a score to the kongregate api when the game is over!

//this is how you submit a stat to the Kongregate api
_root.kongregateStats.submit("Kills", kills); // The user collected a coin


//This function is called form the EnemyMissile class when a missile hits the ship
function initShake()
//we set the shaking varible to true, so that the onEnterFrame() function knows to fire the shake() function
shaking = true;
//we want the ship to shake for ten frames
shakeDuration = 10;
//we want the ship to shake 5 rotational degrees each way
_rotation = 5;

//This function is called from the onEnterFrame() function whenever the shaking varible is set to true.
function shake()
//Reverse the direction of the shake rotation.
_rotation *= -1;
//Countdown the duration of the shake from 10 to zero.
shakeDuration -= 1;
//If the duration reaches zero
if(shakeDuration == 0)
//set the shaking variable to false so the ship no longer calls the shake() function in the onEnterFrame() function
shaking = false;
//Make sure the ship's rotation get's set back to it's default, zero
_rotation = 0;

0 comentarios: