Can anyone tell me what I did wrong?
I've been trying to code a game and it kept on giving me "TypeError: Error #1009" on the output whenever I make my player touch the car.
Here's the .as codes:
package {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import Game.*;
public class TouchALife extends MovieClip
{
private var Hearts:Number;
private var jumping, left, right:Boolean;
private var speedX, speedY: Number;
private var platformsArray, heartsArray:Array;
public function TouchALife()
{
}
public function startGame()
{
stage.focus = stage;
Hearts = 0;
speedX = 0;
speedY = 0;
jumping = false;
left= false;
right = false;
platformsArray = new Array();
heartsArray = new Array();
setupGame();
addEventListener(Event.ENTER_FRAME,update);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
}
private function setupGame()
{
//Check for items on the stage and put them into
//the appropriate array
for (var i=0; i< MovieClip(root).numChildren; i++)
{
var object = MovieClip(root).getChildAt(i);
if (object is Platform)
{
platformsArray.push(object);
}
else if (object is Heart)
{
heartsArray.push(object);
}
}
}
private function keyDownHandler(evt:KeyboardEvent)
{
if (evt.keyCode == 32) //spacebar
{
//Make player jump
jumping = true;
}
else if (evt.keyCode == 37)
{
//Move player left
left = true;
}
else if (evt.keyCode == 39)
{
//Move player right
right = true;
}
}
private function keyUpHandler(evt:KeyboardEvent)
{
if (evt.keyCode == 37)
{
//Stop Moving Left
left = false;
}
else if (evt.keyCode == 39)
{
//Stop Moving Right
right = false;
}
}
public function update(evt:Event)
{
//This is the game loop
//Handle user input
if (right)
{
mcPlayer.moveRight();
}
else if (left)
{
mcPlayer.moveLeft();
}
else
{
mcPlayer.stopMoving();
}
if (jumping && !mcPlayer.isInAir())
{
mcPlayer.jump();
}
//reset jump
jumping = false;
//Handle game logic
mcPlayer.update();
//Check for collision between player and platforms
if (mcPlayer.isFallingDown())
{
for (var i = platformsArray.length - 1; i >= 0; i--)
{
if (platformsArray.hitTestObject(mcPlayer.hitBox))
{
mcPlayer.y = platformsArray.y;
mcPlayer.hitFloor(platformsArray);
//Exit the loops
break;
}
}
}
//Touch the car
if (mcVehicle.hitTestObject(mcPlayer.hitBox))
{
//Hearts += 1;
gameOver();
gotoAndPlay("end");
}
//Check for collision between player and aliens
for (i = heartsArray.length - 1; i >= 0; i--)
{
if (heartsArray.hitTestObject(mcPlayer.hitBox))
{
if (mcPlayer.isFallingDown())
{
//player jumped on it
removeChild(heartsArray);
heartsArray.splice(i,1);
Hearts += 1;
}
else
{
//player is hit
removeChild(heartsArray);
heartsArray.splice(i,1);
Hearts += 1;
}
}
}
//Handle display
txtHearts.text = String(Hearts);
}
private function resetGame()
{
mcPlayer.x = 410;
mcPlayer.y = 575;
}
private function gameOver()
{
removeEventListener(Event.ENTER_FRAME,update);
stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
}
}//end class
}//end package
Here's how my .fla timeline looks like
.png)
At frame 1:
startGame();
stop ();
So here's what I'm actually planning to do: No matter how many hearts the player decides to collect, as long as they touch the car, there'll be an animation playing after that.
But it's just that when the player touches the car, the type error starts coming out from the Output
