I am new to AS3 and I try to make a simple flash game. My problem concerns accessing a specific array outside of its class. I succeeded accessing some variables and function but I am quite stuck on this one.
There are 3 classes : Game which is the main class tied to the flash file, Level1 which spawn background element and enemies, and finally the Enemy class.
The Game class instantiate the Level1 class which spawn enemies (with Enemy class) and push them to an array. When the enemy get hit, a method in the Enemy class remove it from the display list and then tries to remove it from the array located in the Level1 Class, wich fails and throw :
1119: Access of possibly undefined property level1 through a reference with static type Class.
Another problem is some time the bullets stop in the middle of screen, I havn't been able to track down this bug as well.
Any way, this is my first code related post and if it's too messy, tell me and I'll try to make it more readable. Sorry for any inconveniance and thank you for your help -Yaniv
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.text.*;
import flash.geom.Point;
public class Game extends MovieClip
{
public var player:Player;
public var level1:Level1;
public var bullet:Bullet;
private var bullets_arr:Array;
var fire_on : Boolean;
var fire_counter : int;
public function Game()
{
level1=new Level1(this.stage);
player = new Player ;
addChild(player);
player.y = 600;
bullets_arr = [];
addEventListener(Event.ENTER_FRAME,Main);
stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
}
function mouseDownHandler($e:MouseEvent):void
{
fire_on = true;
}
function mouseUpHandler($e:MouseEvent):void
{
fire_on = false;
fire_counter = 0;
}
function fire():void
{
bullet = new Bullet ;
addChild(bullet);
bullet.x = player.x;
bullet.y = player.y - 32;
bullets_arr.push(bullet);
}
public function Main(e: Event):void
{
player.x = mouseX;
if (bullets_arr)
{
for (var m:int = 0; m < bullets_arr.length; m++)
{
bullets_arr[m].y -= 20;
if(level1.enemies_arr)
{
for (var n:int = 0; n < level1.enemies_arr.length; n++)
{
if (bullets_arr[m])
{
if (level1.enemies_arr[n])
{
if (level1.enemies_arr[n].hitTestObject(bullets_arr[m]))
{
if(bullets_arr[m].parent)
{
bullets_arr[m].parent.removeChild(bullets_arr[m]);
bullets_arr.splice(bullets_arr[m],1);
level1.enemies_arr[n].DoDamage(10);
}
}
}
}
}
}
}
}
if(fire_on)
{
fire_counter++;
if(fire_counter == 01)
{
fire();
}
else if(fire_counter >5)
{
fire_counter =0;
}
}
}
}
}
package {
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
public class Level1 extends MovieClip{
var i:int;
var j:int;
var frame :int;
public var enemy:Enemy;
public var enemies_arr:Array;
public function Level1(target:Stage)
{
frame = 0;
enemies_arr = [];
for (var i:int = 0; i < 3; i++)
{
for (var j:int = 0; j < 3; j++)
{
enemy = new Enemy;
enemy.x = j*100 + 260;
enemy.y = i*40 - 150;
target.addChild(enemy);
enemies_arr.push(enemy);
}
}
}
}
}
package
{
import flash.display.MovieClip;
public class Enemy extends MovieClip
{
var Health : int;
var splash:Splash;
function Enemy()
{
Health =30;
}
public function DoDamage(Damage:int)
{
Health -= Damage;
if (Health <= 0)
{
Die();
}
}
public function Die()
{
if(this.parent)
{
this.parent.removeChild(this);
//HERE IS THE ERROR
Game.level1.enemies_arr.splice(this,1);
}
}
}
}