Hey, I am working on making a Space Invaders clone to practice up my AS3. One of the main things in this project is that I want to make all of the graphics through Actionscript, simply because I have never worked with any sort of object in Flash that way. It’s been an interesting challenge so far but I keep getting stumped on firing lasers. From what I can tell I have it semi-working, but when I press Space to fire I get this error:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Laser$iinit()
at Ship/::movePlayer()
Here are my as files if any of you could give me a nudge in the right direction.
Laser.as:
package {
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.KeyboardEvent;
import Ship;
import GlobalVars;
public class Laser extends Sprite {
private var
speed:Number = 12;
public var
intermediateY:Number = 0,
laserY:Number = 0,
spaceDown:Boolean = false,
laser:Sprite,
topStage:Boolean = true;
public function Laser() {
laser = new Sprite();
addChild(laser);
laser.graphics.lineStyle(2,0xFFFFFF)
laser.graphics.moveTo(-2,-10)
laser.graphics.lineTo(3,0)
laser.graphics.lineTo(-3,0)
laser.graphics.lineTo(2,10)
laser.visible = true;
laser.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownEvent);
laser.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpEvent);
laser.stage.addEventListener(Event.ENTER_FRAME, moveLaser);
laser.y = -190;
laser.x = 0
laser.y += intermediateY
}
private function moveLaser(event:Event) {
if(spaceDown) {
addChild(laser);
laser.y = -190;
laser.x = GlobalVars.vars.playerX
intermediateY -= speed
if(laser.y >= 255){
removeChild(laser);
}
}
}
private function keyDownEvent(event:KeyboardEvent) {
removeChild(laser);
if(event.keyCode == 32) {
}
}
private function keyUpEvent(event:KeyboardEvent) {
if(event.keyCode == 32) {
laser.y == 200
}
}
}
}
Ship.as:
package {
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.KeyboardEvent;
import GlobalVars;
public class Ship extends Sprite {
GlobalVars.vars.playerX = 0;
public var
cTime:Number = 0,
cLimit:Number = 1,
player:Sprite,
rightStage:Boolean = true,
leftStage:Boolean = true,
PRESS_LEFT:Boolean = false,
PRESS_RIGHT:Boolean = false,
PRESS_SPACE:Boolean = false,
shootAllow:Boolean = false,
intermediateX:Number = 0,
playerY:Number = 0,
playerShip:Sprite,
playerFriction:Number = 0.0001;
private var
speed:Number = 10;
public function Ship(){
player = new Sprite();
addChild(player);
player.graphics.lineStyle(1, 0x00FF00);
player.graphics.beginFill(0x00FF00);
player.graphics.drawRect(0,5,40,10);
player.graphics.endFill()
player.graphics.beginFill(0x00FF00);
player.graphics.drawRoundRect(0,-2.5,40,15,8);
player.graphics.endFill()
player.graphics.beginFill(0x00FF00);
player.graphics.drawRect(16,-9,8,8);
player.graphics.endFill()
player.x = 0;
player.y = 222.5;
player.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownEvent)
player.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpEvent)
player.stage.addEventListener(Event.ENTER_FRAME, movePlayer)
}
private function movePlayer(event:Event) {
player.x = GlobalVars.vars.playerX
GlobalVars.vars.playerX += intermediateX
intermediateX *= playerFriction;
if (player.x >= 280){
rightStage = false;
player.x == 280
}
if (player.x <= -280) {
leftStage = false;
player.x == -280
}
if (PRESS_LEFT && leftStage) {
GlobalVars.vars.playerX -= speed;
rightStage = true;
}
if (PRESS_RIGHT && rightStage) {
GlobalVars.vars.playerX += speed;
leftStage = true;
}
if (PRESS_SPACE && shootAllow) {
shootAllow = false;
var newLaser:Laser = new Laser();
newLaser.x = player.x;
newLaser.y = player.y;
}
if (cTime < cLimit){
cTime ++;
} else {
shootAllow = true;
cTime = 0;
}
}
private function keyDownEvent(event:KeyboardEvent):void {
if (event.keyCode == 37) {
PRESS_LEFT = true;
}
if(event.keyCode == 39) {
PRESS_RIGHT = true;
}
if(event.keyCode == 32) {
PRESS_SPACE = true;
}
}
private function keyUpEvent(event:KeyboardEvent):void {
if (event.keyCode == 37) {
PRESS_LEFT = false;
}
if(event.keyCode == 39) {
PRESS_RIGHT = false;
}
if(event.keyCode == 32) {
PRESS_SPACE = false;
}
}
}
}
GlobalVars.as:
package {
public class GlobalVars
{
public static var vars:Object = [];
}
}
Almost forgot to add the GlobalVars.