as3 flashdevelop freezes after build - actionscript-3

Currently my game seems to work fine, the only problem it has is the builder does not respond 8 out of 10 times. The question is why does it stop working and how can I solve it.
Here is my code.
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
/**
* ...
* #author BLANK
*/
public class Main extends Sprite
{
public var start:StartScherm = new StartScherm;
public var button:Startbutton = new Startbutton;
public var balletje:Ball = new Ball;
public var player1:Player = new Player;
public var player2:Player2 = new Player2;
public var player3:Player3 = new Player3;
public var player4:Player4 = new Player4;
public var background:Background = new Background;
public var kader:Kader = new Kader;
public var scoreboard:Monkeys = new Monkeys;
public var leven1:Life = new Life;
public var leven2:Life2 = new Life2;
public var leven3:Life3 = new Life3;
public var leven4:Life4 = new Life4;
public var wall1:Walls = new Walls;
public var wall2:Wall2 = new Wall2;
public var wall3:Wall3 = new Wall3;
public var wall4:Wall4 = new Wall4;
public static var KEY_LEFT1:Boolean = false;
public static var KEY_LEFT2:Boolean = false;
public static var KEY_LEFT3:Boolean = false;
public static var KEY_LEFT4:Boolean = false;
public static var KEY_RIGHT1:Boolean = false;
public static var KEY_RIGHT2:Boolean = false;
public static var KEY_RIGHT3:Boolean = false;
public static var KEY_RIGHT4:Boolean = false;
public var GAME:Boolean = false;
public var RESET:Boolean = false;
public var ballSpeedX:int = -3;
public var ballSpeedY:int = -2;
public var LIFE1:Number = 10;
public var LIFE2:Number = 10;
public var LIFE3:Number = 10;
public var LIFE4:Number = 10;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
stage.addEventListener(Event.ENTER_FRAME, loop);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
addChild(start);
addChild(button);
}
private function gameStart():void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
if (stage) world();
else addEventListener(Event.ADDED_TO_STAGE, world);
}
private function gameReset():void
{
removeEventListener(Event.ADDED_TO_STAGE, world);
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function world(e:Event = null):void
{
addChild(background);
addChild(kader);
addChild(player1);
addChild(player2);
addChild(player3);
addChild(player4);
addChild(scoreboard);
addChild(leven1);
addChild(leven2);
addChild(leven3);
addChild(leven4);
addChild(balletje);
}
private function loop(e:Event):void
{
//balletje.update();
if (GAME == true)
{
removeEventListener(Event.ADDED_TO_STAGE, init);
removeChild(start);
removeChild(button);
gameStart();
}
if (RESET == true)
{
removeEventListener(Event.ADDED_TO_STAGE, world);
removeChild(background);
removeChild(kader);
removeChild(player1);
removeChild(player2);
removeChild(player3);
removeChild(player4);
removeChild(scoreboard);
removeChild(leven1);
removeChild(leven2);
removeChild(leven3);
removeChild(leven4);
removeChild(balletje);
removeChild(wall1);
removeChild(wall2);
removeChild(wall3);
removeChild(wall4);
LIFE1 = 3;
LIFE2 = 3;
LIFE3 = 3;
LIFE4 = 3;
gameReset();
}
if (LIFE1 == 0)
{
removeChild(leven1);
addChild(wall1);
}
if (LIFE1 == 1)
{
leven1.width = 10;
leven1.height = 10;
}
if (LIFE1 == 2)
{
leven1.width = 30;
leven1.height = 30;
}
if (LIFE2 == 0)
{
removeChild(leven2);
addChild(wall2);
}
if (LIFE2 == 1)
{
leven2.width = 10;
leven2.height = 10;
}
if (LIFE2 == 2)
{
leven2.width = 30;
leven2.height = 30;
}
if (LIFE3 == 0)
{
removeChild(leven3);
addChild(wall3);
}
if (LIFE3 == 1)
{
leven3.width = 10;
leven3.height = 10;
}
if (LIFE3 == 2)
{
leven3.width = 30;
leven3.height = 30;
}
if (LIFE4 == 0)
{
removeChild(leven4);
addChild(wall4);
}
if (LIFE4 == 1)
{
leven4.width = 10;
leven4.height = 10;
}
if (LIFE4 == 2)
{
leven4.width = 30;
leven4.height = 30;
}
balletje.x += ballSpeedX;
balletje.y += ballSpeedY;
if(balletje.x <= -350-balletje.width/2){ //check if the x position of the left side of the ball is less than or equal to the left side of the screen, which would be 0
balletje.x = -350-balletje.width/2; //then set the ball's x position to that point, in case it already moved off the screen
ballSpeedX *= -1; //and multiply the ball's x speed by -1, which will make it move right instead of left
LIFE2 -= 1;
} else if(balletje.x >= 350-balletje.width/2){ //check to see the right side of the ball is touching the right boundary, which would be 550
balletje.x = 350-balletje.width/2; //reposition it, just in case
ballSpeedX *= -1; //multiply the x speed by -1 (now moving left, not right)
LIFE4 -= 1;
}
//now we do the same with the top and bottom of the screen
if(balletje.y <= -350-balletje.height/2){ //if the y position of the top of the ball is less than or equal to the top of the screen
balletje.y = -350-balletje.height/2; //like we did before, set it to that y position...
ballSpeedY *= -1; //...and reverse its y speed so that it is now going down instead of up
LIFE3 -= 1;
} else if(balletje.y >= 350-balletje.height/2){ //if the bottom of the ball is lower than the bottom of the screen
balletje.y = 350-balletje.height/2; //reposition it
ballSpeedY *= -1; //and reverse its y speed so that it is moving up now
LIFE1 -= 1;
}
if( player1.hitTestObject(balletje) == true ){
if(ballSpeedX < 0){
ballSpeedY *= -1;
ballSpeedX = calculateBallAngle2(player1.x, balletje.x);
}
if(ballSpeedX > 0){
ballSpeedY *= 1;
ballSpeedX = calculateBallAngle2(player1.x, balletje.x);
}
} else if(player2.hitTestObject(balletje) == true ){
if(ballSpeedX > 0){
ballSpeedX *= -1;
ballSpeedY = calculateBallAngle(player2.y, balletje.y);
}
if(ballSpeedX < 0){
ballSpeedX *= 1;
ballSpeedY = calculateBallAngle(player2.y, balletje.y);
}
} else if(player3.hitTestObject(balletje) == true ){
if(ballSpeedX > 0){
ballSpeedY *= -1;
ballSpeedX = calculateBallAngle2(player3.x, balletje.x);
}
if(ballSpeedX < 0){
ballSpeedY *= 1;
ballSpeedX = calculateBallAngle2(player3.x, balletje.x);
}
}
else if(player4.hitTestObject(balletje) == true ){
if(ballSpeedX > 0){
ballSpeedX *= -1;
ballSpeedY = calculateBallAngle(player4.y, balletje.y);
}
if(ballSpeedX < 0){
ballSpeedX *= 1;
ballSpeedY = calculateBallAngle(player4.y, balletje.y);
}
}
if (KEY_LEFT1 == true)
{
player1.x -= 10;
}
if (KEY_LEFT2 == true)
{
player1.x += 10;
}
if (KEY_LEFT3 == true)
{
player3.x -= 10;
}
if (KEY_LEFT4 == true)
{
player3.x += 10;
}
if (KEY_RIGHT1 == true)
{
player2.y += 10;
}
if (KEY_RIGHT2 == true)
{
player2.y -= 10;
}
if (KEY_RIGHT3 == true)
{
player4.y += 10;
}
if (KEY_RIGHT4 == true)
{
player4.y -= 10;
}
}
private function keyDown(e:KeyboardEvent):void
{
if (e.keyCode == 37)
{
KEY_LEFT1 = true;
}
if (e.keyCode == 39)
{
KEY_LEFT2 = true;
}
if (e.keyCode == 67)
{
KEY_LEFT3 = true;
}
if (e.keyCode == 86)
{
KEY_LEFT4 = true;
}
if (e.keyCode == 65)
{
KEY_RIGHT1 = true;
}
if (e.keyCode == 81)
{
KEY_RIGHT2 = true;
}
if (e.keyCode == 102)
{
KEY_RIGHT3 = true;
}
if (e.keyCode == 105)
{
KEY_RIGHT4 = true;
}
if (e.keyCode == 13)
{
GAME = true;
}
if (e.keyCode == 8)
{
RESET = true;
}
}
private function keyUp(e:KeyboardEvent):void
{
if (e.keyCode == 37)
{
KEY_LEFT1 = false;
}
if (e.keyCode == 39)
{
KEY_LEFT2 = false;
}
if (e.keyCode == 67)
{
KEY_LEFT3 = false;
}
if (e.keyCode == 86)
{
KEY_LEFT4 = false;
}
if (e.keyCode == 65)
{
KEY_RIGHT1 = false;
}
if (e.keyCode == 81)
{
KEY_RIGHT2 = false;
}
if (e.keyCode == 102)
{
KEY_RIGHT3 = false;
}
if (e.keyCode == 105)
{
KEY_RIGHT4 = false;
}
if (e.keyCode == 13)
{
GAME = false;
}
if (e.keyCode == 8)
{
RESET = false;
}
}
public function calculateBallAngle(paddleY:Number, ballY:Number):Number
{
var ySpeed:Number = 1 * ( (ballY-paddleY) / 40 );
return ySpeed;
}
public function calculateBallAngle2(paddleX:Number, ballX:Number):Number
{
var xSpeed:Number = 1 * ( (ballX-paddleX) / 40 );
return xSpeed;
}
}
}
Thanks in advance.

Related

How to set only one object to spawn with a timer?

I am currently a beginner trying to learn programming with as3 so bear with me. I have this code so far and my game repeatedly spawns the Food2 (golden apple) but it does not stop. Here is my code so far:
package{
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.MouseEvent;
public class Main extends MovieClip{
const speed:int = 10;
var score:int;
var vx:int;
var vy:int;
var gFood:Food;
var gFood2:Food2;
var head:SnakePart;
var SnakeDirection:String;
var snake:Array;
var upPressed:Boolean = false;
var downPressed:Boolean = false;
var leftPressed:Boolean = false;
var rightPressed:Boolean = false;
var myTimer:Timer = new Timer(10000,1);
public function Main(){
init();
gotoAndStop(1);
}
function init():void {
vx = 1; vy = 0;
score = 0;
snake = new Array();
SnakeDirection = "";
addFood();
myTimer.start();
head = new SnakePart();
head.x = stage.stageWidth/2;
head.y = stage.stageHeight/2;
snake.push(head);
addChild(head);
stage.addEventListener(KeyboardEvent.KEY_UP , onKeyUp);
start1.addEventListener(MouseEvent.CLICK, startgame);
help1.addEventListener(MouseEvent.CLICK, helpplayer);
stage.addEventListener(KeyboardEvent.KEY_DOWN , onKeyDown);
}
private function startgame(event:MouseEvent):void {
gotoAndPlay(3);
addEventListener(Event.ENTER_FRAME , onEnterFrame);
stop();
}
private function helpplayer(event:MouseEvent):void {
gotoAndPlay(2);
stop();
}
function addFood():void {
gFood = new Food();
gFood.x = 50 + Math.random()*(stage.stageWidth-100);
gFood.y = 50 + Math.random()*(stage.stageHeight-100);
addChild(gFood);
}
function addFood2():void {
gFood2 = new Food2();
gFood2.x = 70 + Math.random()*(stage.stageWidth-100);
gFood2.y = 70 + Math.random()*(stage.stageHeight-100);
addChild(gFood2);
}
function reset():void {
gotoAndStop(1);
score = 0;
removeChild(gFood);
removeChild(gFood2);
myTimer.stop();
addFood();
head.x = stage.stageWidth/2;
head.y = stage.stageHeight/2;
vx = 1;vy = 0;
for(var i = snake.length-1;i>0;--i){
removeChild(snake[i]);
snake.splice(i,1);
}
}
function onKeyDown(event:KeyboardEvent):void{
if(event.keyCode == Keyboard.LEFT){
SnakeDirection = "left";
}else if (event.keyCode == Keyboard.RIGHT) {
SnakeDirection = "right";
}else if (event.keyCode == Keyboard.UP) {
SnakeDirection = "up";
}else if (event.keyCode == Keyboard.DOWN) {
SnakeDirection = "down";
}
}
function onKeyUp(event:KeyboardEvent):void {
if(event.keyCode == Keyboard.LEFT) {
SnakeDirection = "";
}else if(event.keyCode == Keyboard.RIGHT) {
SnakeDirection = "";
}else if(event.keyCode == Keyboard.UP ) {
SnakeDirection = "";
}else if(event.keyCode == Keyboard.DOWN){
SnakeDirection = "";
}
}
function onEnterFrame(event:Event):void {
Timerfood();
txtScore.text = "Score:" + String(score);
if(SnakeDirection == "left" && vx != 1) {
vx = -1;
vy = 0;
}
else if(SnakeDirection == "right" && vx != -1) {
vx = 1;
vy = 0;
}
else if(SnakeDirection == "up" && vy != 1) {
vx = 0;
vy = -1;
}
else if(SnakeDirection == "down" && vy != -1) {
vx = 0;
vy = 1;
}
if(head.x - head.width/2 <= 0){
score = 0;
reset();
}
if(head.x + head.width/2 >= stage.stageWidth){
score = 0;
reset();
}
if(head.y - head.height/2 <= 0){
score = 0;
reset();
}
if(head.y + head.height/2 >= stage.stageHeight){
score = 0;
reset();
}
for(var i = snake.length-1;i>0;--i){
snake[i].x = snake[i-1].x;
snake[i].y = snake[i-1].y;
}
head.x += vx*speed;
head.y += vy*speed;
for(var i = snake.length-1;i>=1;--i){
if(snake[0].x == snake[i].x && snake[0].y == snake[i].y){
reset();
break;
}
}
if(head.hitTestObject(gFood)){
score += 1;
removeChild(gFood);
addFood();
var bodyPart = new SnakePart();
bodyPart.x = snake[snake.length - 1].x;
bodyPart.y = snake[snake.length - 1].y;
snake.push(bodyPart);
addChild(bodyPart);
}
if(head.hitTestObject(gFood2)){
score += 2;
removeChild(gFood2);
bodyPart = new SnakePart();
bodyPart.x = snake[snake.length - 1].x;
bodyPart.y = snake[snake.length - 1].y;
snake.push(bodyPart);
addChild(bodyPart);
}
function Keyboard_a(event:KeyboardEvent):void {
if (event.keyCode == 82) {
resetgame();
}
}
function resetgame():void {
score = 0;
if (contains(head))
removeChild(head);
init();
}
}
function Timerfood():void {
var myTimer:Timer = new Timer(10000,1);
myTimer.addEventListener(TimerEvent.TIMER, timerListener);
function timerListener(e:TimerEvent):void{
trace("Timer is Triggered");
addFood2();
}
myTimer.start();
}
}
}
It's hard to understand what specific logic you want to implement, but it looks like you need to create an enemy only once. And it looks like the problem is: you call the Timerfood method in the onEnterFrame listeners, which itself is called many times per second according to the framerate of your app (e.g. 30 times per second).
I would suggest you to remove the call of Timerfood from the onEnterFrame method, and put it in the end of the init method.
Well, my English is not very good, but I try tell the possible reason,
the method Timerfood() is called on method onEnterFrame(), that initialize myTimer for each frame, so may be the solution is, remove this line into TimerFood() method:
var myTimer:Timer = new Timer(10000,1);
and call TimerFood() only in startgame() method.
I hope you can understand me.

How do I call methods and properties from parent classes?

I'm new here (and also relatively new with AS3 as well), so bear with me.
I've only discovered OOP 2 weeks ago, and before then, I knew only the most rudimentary knowledge of AS3. So I did make a lot of improvement, but one thing's been bugging me.
I can never seem to call functions and methods from parent classes. Even with setters and getters, the child class always gives me an output error. It looks something like this.
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Axiom/clicked()
This is an AS3 project that I'm working on right now that is giving me this problem.
Here's some basic background of the project.
I have the main class, called Main, and some other classes, called Axiom and Textbox. Main creates Axiom into a movieclip (background) that's already present on the stage. Axiom creates Textbox when clicked. Axiom calls a method called mouseClick from Main (plays a sound), and Textbox calls some properties from Axiom (text for the textbox).
I have attempted to use
MovieClip(this.parent).mouseClick();
and declaring a new variable in the child class, like this.
private var main:Main;
...
main.mouseClick();
And this leads me to question - what am I doing wrong, and how should I do it properly?
Here are the classes for reference.
Main.as
package {
import flash.ui.Keyboard;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.ui.Mouse;
import flash.events.MouseEvent;
public class Main extends MovieClip {
// sound
private var music:Music = new Music();
private var clickSound:Click = new Click();
// instructions
private var instructions:Instructions = new Instructions();
// mouse
private var cursor:Cursor = new Cursor();
// player
private var player:Player = new Player();
private var animationState:String = "standing";
private var directionState:String = "right";
// Axiom
private var axiom:Axiom = new Axiom();
// movement
private var rightPressed:Boolean = false;
private var leftPressed:Boolean = false;
private var upPressed:Boolean = false;
private var downPressed:Boolean = false;
private var xMovement:Number = 0;
private var yMovement:Number = 0;
private var speed:Number = 22;
private var friction:Number = 0.9;
private var rDoubleTapCounter:int = 0;
private var lDoubleTapCounter:int = 0;
private var dDoubleTapCounter:int = 0;
private var uDoubleTapCounter:int = 0;
private var doubleTapCounterMax:int = 5;
private var running:Boolean = false;
public function Main() {
// constructor code
// mouse
stage.addChild(cursor);
cursor.mouseEnabled = false;
Mouse.hide();
// instructions
instructions.x = 640;
instructions.y = 120;
stage.addChild(instructions);
// add player
player.x = 642;
player.y = 448.95;
player.gotoAndStop(directionState);
player.right.gotoAndStop(animationState);
addChild(player);
// add Axiom
axiom.x = 300;
axiom.y = -150;
back.addChild(axiom);
// keyboard events
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
// music
music.play(0, int.MAX_VALUE);
// loop
stage.addEventListener(Event.ENTER_FRAME, loop);
}
private function loop(e:Event):void {
// set mouse
cursor.x = stage.mouseX;
cursor.y = stage.mouseY;
// set Movement to speed
if (rightPressed) {
if (upPressed) {
if (running || (rDoubleTapCounter <= doubleTapCounterMax && uDoubleTapCounter <= doubleTapCounterMax)) {
xMovement = speed * 2;
yMovement = speed * -2;
} else {
xMovement = speed;
yMovement = speed * -1;
}
} else if (downPressed) {
if (running || (rDoubleTapCounter <= doubleTapCounterMax && dDoubleTapCounter <= doubleTapCounterMax)) {
xMovement = speed * 2;
yMovement = speed * 2;
} else {
xMovement = speed;
yMovement = speed;
}
} else if (running || rDoubleTapCounter <= doubleTapCounterMax) {
xMovement = speed * 2;
} else {
xMovement = speed;
}
} else if (leftPressed) {
if (upPressed) {
if (running || (lDoubleTapCounter <= doubleTapCounterMax && uDoubleTapCounter <= doubleTapCounterMax)) {
xMovement = speed * -2;
yMovement = speed * -2;
} else {
xMovement = speed * -1;
yMovement = speed * -1;
}
} else if (downPressed) {
if (running || (lDoubleTapCounter <= doubleTapCounterMax && dDoubleTapCounter <= doubleTapCounterMax)) {
xMovement = speed * -2;
yMovement = speed * 2;
} else {
xMovement = speed * -1;
yMovement = speed;
}
} else if (running || lDoubleTapCounter <= doubleTapCounterMax) {
xMovement = speed * -2;
} else {
xMovement = speed * -1;
}
} else if (downPressed) {
if (dDoubleTapCounter <= doubleTapCounterMax || running) {
yMovement = speed * -2;
} else {
yMovement = speed * -1;
}
} else if (upPressed) {
if (uDoubleTapCounter <= doubleTapCounterMax || running) {
yMovement = speed * -2;
} else {
yMovement = speed * -1;
}
}
// double tap counter
if (rightPressed == false) {
rDoubleTapCounter++;
}
if (leftPressed == false) {
lDoubleTapCounter++;
}
if (downPressed == false) {
dDoubleTapCounter++;
}
if (upPressed == false) {
uDoubleTapCounter++;
}
// change labels
if (player.currentLabel != animationState) {
player.right.gotoAndStop(animationState);
}
// friction
xMovement *= friction;
yMovement *= friction;
// animationState and stop
if (Math.abs(xMovement) > 1) {
if (Math.abs(xMovement) > 22) {
animationState = "running";
running = true;
} else {
animationState = "trotting";
running = false;
}
} else {
animationState = "standing";
xMovement = 0;
}
// right or left facing
if (xMovement > 0) {
player.scaleX = 1;
} else if (xMovement < 0) {
player.scaleX = -1;
}
//movement
if (back.x >= back.width / 2 - 50) {
if (player.x >= 642 && xMovement > 0) {
player.x = 642;
back.x -= xMovement;
} else {
if (player.x <= player.width / 2 && xMovement < 0) {
xMovement = 0;
} else {
player.x += xMovement;
}
}
} else if (back.x <= 1280 - back.width / 2 + 50) {
if (player.x <= 642 - 30 && xMovement < 0) {
player.x = 642;
back.x -= xMovement;
} else {
if (player.x >= 1280 + 30 - player.width / 2 && xMovement > 0) {
xMovement = 0;
} else {
player.x += xMovement;
}
}
} else {
back.x -= xMovement;
}
}
private function keyPressed(e:KeyboardEvent):void {
if (e.keyCode == Keyboard.RIGHT) {
rightPressed = true;
} else if (e.keyCode == Keyboard.LEFT) {
leftPressed = true;
} else if (e.keyCode == Keyboard.DOWN) {
downPressed = true;
} else if (e.keyCode == Keyboard.UP) {
upPressed = true;
}
}
private function keyReleased(e:KeyboardEvent):void {
if (e.keyCode == Keyboard.RIGHT) {
rightPressed = false;
rDoubleTapCounter = 0;
} else if (e.keyCode == Keyboard.LEFT) {
leftPressed = false;
lDoubleTapCounter = 0;
} else if (e.keyCode == Keyboard.DOWN) {
downPressed = false;
dDoubleTapCounter = 0;
} else if (e.keyCode == Keyboard.UP) {
upPressed = false;
uDoubleTapCounter = 0;
}
}
public function mouseClick():void {
clickSound.play();
}
}
}
Axiom.as
package {
import flash.events.MouseEvent;
import flash.events.EventDispatcher;
import flash.display.MovieClip;
public class Axiom extends MovieClip {
private var speechBox:Textbox = new Textbox();
private var speech:String = "Something came out of that pop.";
private var main:Main;
public function Axiom() {
// constructor code
this.addEventListener(MouseEvent.CLICK, onClickStage);
this.addEventListener(MouseEvent.CLICK, clicked);
}
private function onClickStage(e:MouseEvent):void {
trace(e.target,e.target.name);
}
private function clicked(e:MouseEvent):void {
main.mouseClick();
stage.addChild(speechBox);
this.removeEventListener(MouseEvent.CLICK, clicked);
}
public function get words():String {
return speech;
}
public function removeThis():void {
this.addEventListener(MouseEvent.CLICK, clicked);
removeChild(speechBox);
}
}
}
Textbox.as
package {
import flash.events.MouseEvent;
import flash.display.MovieClip;
import com.greensock.TweenLite;
public class Textbox extends MovieClip{
private var axiom:Axiom;
private var main:Main;
public function Textbox() {
// constructor code
this.x = 40;
this.y = 360;
this.textBox.text = axiom.words;
TweenLite.from(this, 0.3, {x: "10", alpha: 0});
this.addEventListener(MouseEvent.CLICK, nextPage);
}
private function nextPage(e:MouseEvent):void{
main.mouseClick();
TweenLite.to(this, 0.3, {x: "-10", alpha: 0});
MovieClip(this.parent).removeThis();
}
}
}
Instead of trying to call functions of the parent (rarely a good idea), use Events instead.
In your Axiom Class:
package {
...import statements
public class Axiom extends MovieClip {
private var speechBox:Textbox = new Textbox();
private var speech:String = "Something came out of that pop.";
private var main:Main; //this shouldn't be here, ideally, Axiom knows NOTHING about the main class.
public function Axiom() {
// constructor code
this.addEventListener(MouseEvent.CLICK, onClickStage);
this.addEventListener(MouseEvent.CLICK, clicked);
}
private function onClickStage(e:MouseEvent):void {
trace(e.target,e.target.name);
}
private function clicked(e:MouseEvent):void {
//main.mouseClick(); // unneccesary
dispatchEvent(e); //the event you caught by performing a click will be dispatched again, so that the parent can react to it
stage.addChild(speechBox); //Axiom might not have access to the stage, addChild would suffice
this.removeEventListener(MouseEvent.CLICK, clicked);
}
public function get words():String {
return speech;
}
public function removeThis():void {
this.addEventListener(MouseEvent.CLICK, clicked);
removeChild(speechBox);
}
}
}
and in your Main Class
axiom.addEventListener(MouseEvent.CLICK, onAximClicked);
private function onAxiomClicked(e:MouseEvent):void{
//now you can use the parents (in this case an Object of the Main class) functions
mouseClick();
}

Error #2025 twice

package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.ui.Keyboard;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
public class supportForce extends MovieClip
{
private var Player1Child:Player1Actual = new Player1Actual();
private var Player2Child:Player2Actual = new Player2Actual();
private var GreenLightLeft:Projectile1 = new Projectile1();
private var GreenLightRight:Projectile2 = new Projectile2();
private var NeonChild:mcNeonPlayer = new mcNeonPlayer();
private var _keyDownStatus:Object = {};
private var defaultSpeed:int = 10;
private var Player1Lock:Boolean = false;
private var Player2Lock:Boolean = false;
private var Player1Left:Boolean = false;
private var Player2Left:Boolean = true;
private var greenLightLeft:Boolean = true;
private var Player1CD:int = 0;
private var Player1Ready:Boolean = true;
private var Player1Hit:Boolean = false;
private var Player1X:int;
private var Player1Y:int;
private var NeonX:int;
private var NeonY:int;
private var NeonCD:int = 0;
private var NeonDuration:int = 240;
private var NeonUse:Boolean = false;
public function supportForce()
{
this.addEventListener(Event.ENTER_FRAME, general);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onUp);
stage.addEventListener(Event.ENTER_FRAME, keyCheck);
btnStart.addEventListener(MouseEvent.CLICK, clickStart);
btnAbout.addEventListener(MouseEvent.CLICK, clickAbout);
btnDust.addEventListener(MouseEvent.CLICK, clickDust);
}
private function general(event:Event)
{
Player1X = Player1Child.x;
Player1Y = Player1Child.y;
NeonX = NeonChild.x;
NeonY = NeonChild.y;
GreenLightLeft.x -= (defaultSpeed * 2);
GreenLightRight.x += (defaultSpeed * 2);
//status_text = NeonCD;
if (NeonDuration > 0 && NeonUse == true)
{
NeonDuration -= 1;
}
else if (NeonDuration == 0 && NeonUse == true)
{
NeonUse = false;
removeChild(NeonChild);
addChild(Player1Child);
Player1Child.x = NeonX;
Player1Child.y = NeonY;
}
if (NeonCD > 0)
{
NeonCD -= 1;
}
trace(NeonCD);
if (Player1Child.BladeInstance.hitTestObject(Player2Child) && Player1CD <= 0 && Player1Child.BladeInstance.alpha != 0)
{
if (Player1Left == true)
{
Player2Child.x -= defaultSpeed;
Player1Hit = true;
Player1CD = 8;
//trace("G");
}
if (Player1Left == false)
{
Player2Child.x += defaultSpeed;
Player1Hit = true;
Player1CD = 8;
//trace("G");
}
}
if (Player1Ready == false)
{
Player1CD -= 1;
}
if (Player1CD <= 0)
{
Player1Ready = true;
Player1CD = 0;
}
else
{
Player1Ready = false;
}
if (Player1Left == true)
{
if (Player1Child.x <= (0 + Player1Child.width))
{
Player1Child.x = (0 + Player1Child.width);
}
if (Player1Child.x >= 550)
{
Player1Child.x = 550;
}
if (Player1Child.y >= 400)
{
Player1Child.y = 400;
}
if (Player1Child.y <= (0 + Player1Child.height))
{
Player1Child.y = (0 + Player1Child.height);
}
}
else if (Player1Left == false)
{
if (Player1Child.x <= 0)
{
Player1Child.x = 0;
}
if (Player1Child.x >= (550 - Player1Child.width))
{
Player1Child.x = (550 - Player1Child.width);
}
if (Player1Child.y <= 0)
{
Player1Child.y = 0;
}
if (Player1Child.y >= (400 - Player1Child.height))
{
Player1Child.y = (400 - Player1Child.height);
}
}
if (Player2Child.x <= Player2Child.width)
{
Player2Child.x = Player2Child.width;
}
if (Player2Child.x >= 550)
{
Player2Child.x = 550;
}
if (Player2Child.y >= (400 - Player2Child.height))
{
Player2Child.y = 400 - Player2Child.height;
}
if (Player2Child.y <= 0)
{
Player2Child.y = 0;
}
}
private function onUp(e:KeyboardEvent):void
{
_keyDownStatus[e.keyCode] = false;
}
private function onDown(e:KeyboardEvent):void
{
_keyDownStatus[e.keyCode] = true;
}
private function keyCheck(event:Event)
{
if (_keyDownStatus[37])
{
if (Player1Left == false)
{
Player1Left = true;
Player1Child.rotation += 180;
Player1Child.y += (Player1Child.height - 5);
Player1Child.x += Player1Child.width;
}
Player1Child.x -= defaultSpeed;
}
if (_keyDownStatus[39])
{
if (Player1Left == true)
{
Player1Left = false;
Player1Child.rotation += 180;
Player1Child.y -= (Player1Child.height - 5);
Player1Child.x -= Player1Child.width;
}
Player1Child.x += defaultSpeed;
}
if (_keyDownStatus[38])
{
Player1Child.y -= defaultSpeed;
}
if (_keyDownStatus[40])
{
Player1Child.y += defaultSpeed;
}
if (_keyDownStatus[96] && Player1Ready == true)
{
Player1Child.play();
Player1Ready = false;
}
if (_keyDownStatus[97] && NeonCD <= 0)
{
removeChild(Player1Child);
stage.addChild(NeonChild);
NeonChild.x = Player1X;
NeonChild.y = Player1Y;
NeonCD = 480;
NeonUse = true;
Player1Lock = false;
}
if (_keyDownStatus[65])
{
if (Player2Left == false)
{
Player2Left = true;
Player2Child.rotation -= 180;
Player2Child.y -= (Player2Child.height - 5);
Player2Child.x -= Player2Child.width;
}
Player2Child.x -= defaultSpeed;
}
if (_keyDownStatus[68])
{
if (Player2Left == true)
{
Player2Left = false;
Player2Child.rotation += 180;
Player2Child.y += (Player2Child.height - 5);
Player2Child.x += Player2Child.width;
}
Player2Child.x += defaultSpeed;
}
if (_keyDownStatus[87])
{
Player2Child.y -= defaultSpeed;
}
if (_keyDownStatus[83])
{
Player2Child.y += defaultSpeed;
}
if (_keyDownStatus[90])
{
if (Player2Left == true)
{
var GreenLightLeft:Projectile1 = new Projectile1();
stage.addChild(GreenLightLeft);
GreenLightLeft.x = Player2Child.x;
GreenLightLeft.y = Player2Child.y;
greenLightLeft = true;
}
if (Player2Left == false)
{
var GreenLightRight:Projectile2 = new Projectile2();
stage.addChild(GreenLightRight);
GreenLightRight.x = (Player2Child.x);
GreenLightRight.y = (Player2Child.y - Player2Child.height);
greenLightLeft = false;
}
}
}
private function clickStart(event:MouseEvent):void
{
gotoAndStop(2);
}
private function clickAbout(event:MouseEvent):void
{
}
private function clickDust(event:MouseEvent):void
{
}
}
}
It works perfectly when I press Numpad 1 (97) but the second time, it gives this error.
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at supportForce/keyCheck()
So I planned of removeing the NeonChild after 10 seconds or 240 frames but it gives this error.
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at supportForce/general()
If you cannot understand what I am trying to say, this is the link to the actual .fla and .as
files
if you dont know parent of displayObject, which you want to remove you can write
mc.parent.removeChilte(mc);
where mc is movieclip , which you want to delete
Use this instead
this.parent.removeChild(mc);
where mc is the MovieClip.

Bullet fires perfectly in three directions, but not left

I'm quite new with actionscript, and have been scrapping together a little test game to sort of get used to the language, get my feet wet. The premise behind the game is pretty average, I have a character that can move in 8 directions, can pick up several keys that are randomly placed, and open a door when he possesses a key.
The problem comes in to play with the bullet shooting. I don't know much about trigonometry, so when a key is pressed, i just use the .rotate property to turn the player. I pass the .rotate integer into my bullet class and use that to tell which direction the bullet should travel. It works perfectly for the up, down, and right movements, but when the character is facing left the bullet is created but has no velocity whatsoever, and for the life of me I cannot figure out where the error in the code is.
If someone could look over my code and help me out, I would be much appreciated. I'm sure it's something simple that I'm just missing. I know it's a bit sloppy, so if there's any other tips you want to pass on to a novice please feel free!!
Thank you so much guys.
Main Class
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.text.TextField;
public class Main extends MovieClip
{
var player:Player;
var inventory:Inventory;
var invArray:Array = new Array();
var key:_Key;
var vx:int;
var maxSpeed:int;
var key_Up:Boolean;
var key_Down:Boolean;
var key_Left:Boolean;
var key_Right:Boolean;
var maxKey:int;
var keyCount:TextField;
var keysUp:int;
var door:Door;
var doorOpen:Boolean;
var wall1:Wall;
var wall2:Wall;
var wallCollide:Boolean;
var bulletTime:int;
var bulletLimit:int;
var bulletShoot:Boolean;
static var playerRotation:int;
public function Main()
{
init();
}
public function init():void
{
stage.addEventListener(Event.ENTER_FRAME, gameLoop);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
initPlayer();
initVariables();
initInventory();
initItems();
}
public function gameLoop(e:Event):void
{
movePlayer();
collisionDetection();
bullet();
}
public function keyDownHandler(e:KeyboardEvent):void
{
switch (e.keyCode)
{
case 37 :
key_Left = true;
break;
case 38 :
key_Up = true;
break;
case 39 :
key_Right = true;
break;
case 40 :
key_Down = true;
break;
case 32:
if(bulletShoot)
{
bulletShoot = false;
var newBullet:Bullet = new Bullet(player.rotation);
newBullet.x = player.x;
newBullet.y = player.y;
addChild(newBullet);
}
}
}
public function keyUpHandler(e:KeyboardEvent):void
{
switch (e.keyCode)
{
case 37 :
key_Left = false;
break;
case 38 :
key_Up = false;
break;
case 39 :
key_Right = false;
break;
case 40 :
key_Down = false;
break;
}
}
public function movePlayer():void
{
if (key_Left && !key_Right)
{
player.x -= maxSpeed;
player.rotation = 270;
}
if (key_Right && !key_Left)
{
player.x += maxSpeed;
player.rotation = 90;
}
if (key_Up && !key_Down)
{
player.y -= maxSpeed;
player.rotation = 0;
}
if (key_Down && !key_Up)
{
player.y += maxSpeed;
player.rotation = 180;
}
/*if ( key_Left && key_Up && !key_Right && !key_Down )
{
player.rotation = 315;
}
if ( key_Right && key_Up && !key_Left && !key_Down )
{
player.rotation = 45;
}
if ( key_Left && key_Down && !key_Right && !key_Up )
{
player.rotation = 225;
}
if ( key_Right && key_Down && !key_Left && !key_Up )
{
player.rotation = 135;
}*/
}
public function initPlayer():void
{
player = new Player();
player.x = stage.stageWidth * .5;
player.y = stage.stageHeight * .5;
stage.addChild(player);
}
public function initVariables():void
{
vx = 0;
maxSpeed = 4;
key_Up = false;
key_Down = false;
key_Left = false;
key_Right = false;
maxKey = 3;
keysUp = 0;
doorOpen = false;
wallCollide = false;
bulletTime = 0;
bulletLimit = 12;
bulletShoot = true ;
}
public function collisionDetection():void
{
for (var i:int=0; i < invArray.length; i++)
{
key = invArray[i];
if (player.hitTestObject(key))
{
stage.removeChild(key);
invArray.splice(i, 1);
keysUp++;
//trace(keysUp);
i--;
keyCount.text = String(keysUp);
break;
}
}
if (player.hitTestPoint(door.x,door.y + 25,true) && (keysUp > 0) && ! doorOpen)
{
door.gotoAndStop(2);
keysUp--;
invArray.pop();
trace(keysUp);
keyCount.text = String(keysUp);
doorOpen = true;
}
if (player.hitTestObject(door) && (keysUp == 0) && ! doorOpen)
{
wallCollide = true;
}
if (player.hitTestObject(wall1))
{
wallCollide = true;
}
if (player.hitTestObject(wall2))
{
wallCollide = true;
}
if (wallCollide == true)
{
player.y += 4;
wallCollide = false;
}
}
public function initInventory():void
{
inventory = new Inventory();
inventory.x = stage.stageWidth * .15;
inventory.y = stage.stageHeight * .90;
stage.addChild(inventory);
keyCount = new TextField();
stage.addChild(keyCount);
keyCount.x = inventory.x - 8;
keyCount.y = inventory.y + 3;
keyCount.text = String(keysUp);
//keyCount.border = true;
keyCount.width = 20;
keyCount.height = 20;
}
public function initItems():void
{
while (invArray.length < maxKey)
{
key = new _Key ;
key.x = Math.random() * 550;
key.y = Math.random() * 300;
stage.addChild(key);
invArray.push(key);
}
door = new Door();
door.x = 250;
door.y = 25;
wall1 = new Wall();
stage.addChild(wall1);
wall1.x = door.x - 175;
wall1.y = door.y;
wall2 = new Wall();
stage.addChild(wall2);
wall2.x = door.x + 175;
wall2.y = door.y;
stage.addChild(door);
}
public function bullet():void
{
if (bulletTime < bulletLimit)
{
bulletTime++;
} else
{
bulletShoot = true;
bulletTime = 0;
}
}
}
}
Bullet Class
package {
import flash.display.MovieClip;
import flash.events.Event;
public class Bullet extends MovieClip {
public var _root:Object;
public var speed:int = 10;
public var bulletRotation:int;
public function Bullet(pRotation:int) {
addEventListener(Event.ADDED, beginClass);
addEventListener(Event.ENTER_FRAME, eFrame);
bulletRotation = pRotation;
}
private function beginClass(e:Event):void
{
_root = MovieClip(root);
}
private function eFrame(e:Event):void
{
if (bulletRotation == 0)
{
this.y -= speed;
}
else if (bulletRotation == 90)
{
this.x += speed;
}
else if(bulletRotation == 270)
{
this.x -= speed;
}
else if(bulletRotation == 180)
{
this.y += speed;
}
if(this.y < -1 * this.height)
{
removeEventListener(Event.ENTER_FRAME, eFrame);
_root.removeChild(this);
}
if(this.x < -1 * this.width)
{
removeEventListener(Event.ENTER_FRAME, eFrame);
_root.removeChild(this);
}
}
}
}
In Bullet class, change 270 to -90, at line 38:
else if(bulletRotation == -90)
{
this.x -= speed;
}

Making Subclass Objects Non-Null

I'm currently having some trouble with referencing objects that turn out null on export. Basically I want the Document Class to run the code of another class that is the class of a MovieClip without having Error 1009 popping up everywhere in my output panel.
Here's the subclass I'm trying to run:
package
{
import flash.display.*;
import flash.events.*;
import Document;
import RestartButton;
public class McMain extends MovieClip
{
public var document:Document;
public var leftKeyDown:Boolean = false;
public var rightKeyDown:Boolean = false;
public var upKeyDown:Boolean = false;
public var downKeyDown:Boolean = false;
public var onGround:Boolean = true;
public var xSpeed:Number = 0;
public var ySpeed:Number = 0;
public var mainSpeed:Number = 3.75;
public var frictionPower:Number = 0.9;
public var jumpPower:Number = 13;
public var gravityPower:Number = 0.5;
public var terminalVelocity:Number = 75;
public function McMain()
{
this.addEventListener(Event.ADDED_TO_STAGE, initMcMain);
// constructor code
}
public function initMcMain(event:Event)
{
addEventListener(KeyboardEvent.KEY_DOWN, checkKeysDown);
addEventListener(KeyboardEvent.KEY_UP, checkKeysUp);
addEventListener(Event.ENTER_FRAME, hitTest);
addEventListener(Event.ENTER_FRAME, Main);
}
public function Main(event:Event):void
{
this.moveCharacter();
this.dynamicMovement();
}
public function checkKeysDown(event:KeyboardEvent):void
{
if (event.keyCode == 37)
{
this.leftKeyDown = true;
}
if (event.keyCode == 38)
{
this.upKeyDown = true;
}
if (event.keyCode == 39)
{
this.rightKeyDown = true;
}
if (event.keyCode == 40)
{
this.downKeyDown = true;
}
}
public function checkKeysUp(event:KeyboardEvent):void
{
if (event.keyCode == 37)
{
this.leftKeyDown = false;
}
if (event.keyCode == 38)
{
this.upKeyDown = false;
}
if (event.keyCode == 39)
{
this.rightKeyDown = false;
}
if (event.keyCode == 40)
{
this.downKeyDown = false;
}
}
public function moveCharacter():void
{
if (this.leftKeyDown)
{
this.xSpeed -= this.mainSpeed;
if (this.onGround)
{
this.scaleX = -1;
}
}
if (this.rightKeyDown)
{
this.xSpeed += this.mainSpeed;
if (this.onGround)
{
this.scaleX = 1;
}
}
if (this.leftKeyDown && this.onGround || this.rightKeyDown && this.onGround)
{
this.gotoAndStop(2);
}
if (this.currentFrame == 2)
{
if (! this.leftKeyDown && ! this.rightKeyDown)
{
this.gotoAndStop(3);
}
}
if (this.currentFrame == 3)
{
if (this.skidAnimation.currentFrame == this.skidAnimation.totalFrames)
{
this.gotoAndStop(1);
}
}
if (this.upKeyDown)
{
this.ySpeed -= this.jumpPower;
}
if (this.upKeyDown && this.leftKeyDown)
{
this.ySpeed -= 0;
this.xSpeed -= 10;
}
if (this.upKeyDown && this.rightKeyDown)
{
this.ySpeed -= 0;
this.xSpeed += 10;
}
if (this.xSpeed > 3 && ! onGround || this.xSpeed < -3 && ! onGround)
{
if (this.currentFrame == 2)
{
this.gotoAndStop(5);
}
}
if (this.ySpeed < -0.5 && ! onGround)
{
this.gotoAndStop(4);
}
else if (this.ySpeed > 0.5 && ! onGround)
{
this.gotoAndStop(5);
}
if (this.currentFrame == 5 && onGround)
{
this.gotoAndStop(1);
}
//if (! leftKeyDown && ! rightKeyDown && ! upKeyDown)
//{
//mcMain.gotoAndStop(1);
//}
}
public function dynamicMovement():void
{
if (onGround)
{
this.x += this.xSpeed;
this.xSpeed *= this.frictionPower;
}
else
{
this.x += this.xSpeed;
this.xSpeed *= (this.frictionPower + 0.09);
}
if (this.xSpeed > 7)
{
this.xSpeed = 7;
}
if (this.xSpeed < -7)
{
this.xSpeed = -7;
}
this.y += this.ySpeed;
this.ySpeed += this.gravityPower;
if (this.ySpeed > this.terminalVelocity)
{
this.ySpeed = this.terminalVelocity;
}
}
public function hitTest(event:Event)
{
//spawnArea.visible = false;
this.mcMainHitArea.visible = false;
this.document.levelChange.wallCollision.visible = false;
//^^^^^^^^^^^^^^^^^^^^^^^^^^
//Error 1009 appearing here!
this.document.levelChange.deathArea.visible = false;
this.document.levelChange.goalArea.goalHitArea.visible = false;
while (document.levelChange.wallCollision.hitTestPoint(this.x, this.y, true))
{
this.y = this.y - 0.5;
this.ySpeed = 0;
}
while (document.levelChange.wallCollision.hitTestPoint(this.x, this.y - 24, true))
{
this.y = this.y + 0.5;
this.ySpeed = 0;
}
while (document.levelChange.wallCollision.hitTestPoint(this.x - 12, this.y - 11, true))
{
this.x = this.x + 0.5;
this.xSpeed = 0;
if (! onGround)
{
this.leftKeyDown = false;
}
}
while (document.levelChange.wallCollision.hitTestPoint(this.x + 12, this.y - 11, true))
{
this.x = this.x - 0.5;
this.xSpeed = 0;
if (! onGround)
{
this.rightKeyDown = false;
}
}
if (document.levelChange.wallCollision.hitTestPoint(this.x - 16, this.y - 11, true))
{
if (this.upKeyDown)
{
this.ySpeed -= 10;
this.xSpeed += 50;
}
}
if (document.levelChange.wallCollision.hitTestPoint(this.x + 16, this.y - 11, true))
{
if (this.upKeyDown)
{
this.ySpeed -= 10;
this.xSpeed -= 50;
}
}
if (document.levelChange.wallCollision.hitTestPoint(this.x, this.y, true))
{
if (this.upKeyDown)
{
this.upKeyDown = false;
this.onGround = false;
}
}
if (! document.levelChange.wallCollision.hitTestPoint(this.x, this.y + 1, true))
{
if (! document.levelChange.wallCollision.hitTestPoint(this.x, this.y + 1.5, true))
{
this.upKeyDown = false;
}
if (! document.levelChange.wallCollision.hitTestPoint(this.x, this.y + 5, true))
{
//upKeyDown = false;
onGround = false;
}
}
if (document.levelChange.wallCollision.hitTestPoint(this.x, this.y + 1, true))
{
this.ySpeed = 0;
if (document.levelChange.wallCollision.hitTestPoint(this.x, this.y + 5, true))
{
onGround = true;
}
}
if (document.levelChange.deathArea.hitTestPoint(this.x, this.y + 1, true))
{
this.x = this.x;
this.y = this.y;
}
if (this.hitTestObject(document.levelChange.goalArea.goalHitArea))
{
if (stage.contains(document.level_1))
{
this.removeChild(document.level_1);
//stage.removeEventListener(Event.ENTER_FRAME,hitTest);
}
if (stage.contains(document.spawnArea))
{
this.x = this.x;
this.y = this.y;
}
addChild(document.level_2);
document.level_2.x = -1425;
document.level_2.y = -2550;
}
}
}
}
Document Class:
package
{
import flash.events.*;
import flash.display.*;
import flash.geom.Point;
import McMain;
import RestartButton;
import Level_2;
public class Document extends MovieClip
{
public var levelNumber:int = 1;
public var levelChange:Object;
public var levelArray:Array = new Array();
public var collisionArray:Array = new Array();
public var deathAreaArray:Array = new Array();
public var goalAreaArray:Array = new Array();
public var goalHitAreaArray:Array = new Array();
public var mcMain:McMain;
public var restartButton:RestartButton;
public var level_2:Level_2;
public function Document()
{
addEventListener(Event.ADDED_TO_STAGE, init);
mcMain = new McMain();
mcMain.document = this;
restartButton = new RestartButton();
restartButton.document = this;
level_2 = new Level_2();
// constructor code
}
public function init(event:Event)
{
this.levelChange = this.level_1;
}
public function levelHandler(event:Event)
{
this.levelChange = this["level_" + levelNumber];
if (level_2.stage)
{
levelNumber = 2;
//trace(levelChange);
}
for (var i:int = numChildren - 1; i >= 0; i--)
{
var collisionChild:DisplayObject = getChildAt(i);
if (collisionChild.name == "wallCollision")
{
collisionArray.push(collisionChild);
}
var deathAreaChild:DisplayObject = getChildAt(i);
if (deathAreaChild.name == "deathArea")
{
deathAreaArray.push(deathAreaChild);
}
var goalAreaChild:DisplayObject = getChildAt(i);
if (goalAreaChild.name == "goalArea")
{
goalAreaArray.push(goalAreaChild);
}
}
for (var i_2:int = numChildren - 2; i >= 0; i--)
{
var goalHitAreaChild:DisplayObject = getChildAt(i_2);
if (goalHitAreaChild.name == "goalHitArea")
{
goalHitAreaArray.push(goalHitAreaChild);
}
}
}
public function vCamMovement(event:Event):void
{
/*for (var i:int = 0; i < this.numChildren - 1; i++)
{
this.getChildAt(i).x -= xSpeed;
//levelObjects.getChildAt(i).y -= ySpeed;
}*/
level_1.x += stage.stageWidth * 0.5 - mcMain.x;
level_1.y += stage.stageHeight * 0.5 - mcMain.y;
level_2.x += stage.stageWidth * 0.5 - mcMain.x;
level_2.y += stage.stageHeight * 0.5 - mcMain.y;
spawnArea.x += stage.stageWidth * 0.5 - mcMain.x;
spawnArea.y += stage.stageHeight * 0.5 - mcMain.y;
mcMain.x = stage.stageWidth * 0.5;
mcMain.y = stage.stageHeight * 0.5;
}
}
}
Edit: Fixed a small typo within the code, but the code is still not working.
Edit:
Here's the debugger output:
TypeError: Error #1009: Cannot access a property or method of a null object reference. at McMain/hitTest()[C:\Users\*\Desktop\*\Flash\*\McMain.as:186] *= XXXXXXXXXXXX
Two things. 1st, I cannot see anywhere that you initialize level_1 object. Two, you should move this code out of your constructor object and into your init method.
mcMain = new McMain();
mcMain.document = this;
restartButton = new RestartButton();
restartButton.document = this;
The reason is simple. You're just creating mcMain, then setting its .document property to "this." Within mcMain, you're referencing mcMain.document.levelChange, but you do not define document.levelChange until later, in your init method. I'm not entirely convinced that this is absolutely your issue, but you really should be do doing error checking when you're accessing dynamic properties on a dynamic class. Try doing things like
if(document != null && document.levelChange != null)
before you attempt to explicitly reference those properties/objects as you are with your hitTest.