gpt4 book ai didi

actionscript-3 - AS3 阶段 = 空?

转载 作者:行者123 更新时间:2023-12-04 04:30:50 25 4
gpt4 key购买 nike

我刚刚尝试实现一个菜单系统,我看到了一个关于我正在开发的游戏的教程,一切都很顺利,直到我现在遇到了舞台被设置为 null 的问题,我没有不知道如何阻止它。不断打破它的行在 AvoiderGame.as 文件中,是 stage.addEventListener(Event.ADDED_TO_STAGE, init); 它不断返回以下错误

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at AvoiderGame()[M:\Users\Andy\Documents\Programming For Fun\Flash\Tutorial - Avoider Game\Classes\AvoiderGame.as:29]

at States/changeState()[M:\Users\Andy\Documents\Programming For Fun\Flash\Tutorial - Avoider Game\States.as:26]

at mainMenu/brnP_Button()[M:\Users\Andy\Documents\Programming For Fun\Flash\Tutorial - Avoider Game\Classes\mainMenu.as:34]

目前,我对游戏进行编程的方式是从 States.as 开始,其中包含以下代码。

package
{
import flash.display.*;
import flash.system.fscommand;

public class States extends MovieClip
{
public function States()
{
changeState(null, "menu");
}
public function changeState (currentState, nextState)
{
if (currentState != null)
{
removeChild(currentState);
}
switch(nextState)
{
case "menu": var mm:mainMenu = new mainMenu(changeState);
addChild(mm);
break;
case "game": var g:AvoiderGame = new AvoiderGame(changeState);
addChild(g);
break;
case "exit": fscommand("quit");
break;
}
}

}

}

从那里它将进入 mainMenu.as 直到用户单击播放 - 在 mainMenu.as 中是以下代码

package
{
import flash.display.*;
import flash.events.*;

public class mainMenu extends MovieClip
{
var theCallBackFunction:Function;

public function mainMenu(callBack)
{
var Background:gameBackground;
Background = new gameBackground();
addChild(Background);

var btnPlay:mmPlay = new mmPlay();
btnPlay.addEventListener(MouseEvent.MOUSE_DOWN, brnP_Button);
btnPlay.x = width/2;
btnPlay.y = height/2 - btnPlay.height/2;
addChild(btnPlay);

var btnExit:mmExit = new mmExit();
btnExit.addEventListener(MouseEvent.MOUSE_DOWN, brnE_Button);
btnExit.x = width/2;
btnExit.y = height/2 - btnExit.height/2;
btnExit.y += btnExit.height + 4;
addChild(btnExit);

theCallBackFunction = callBack;
}
public function brnP_Button(e:MouseEvent)
{
theCallBackFunction(this, "game");
return;
}

public function brnE_Button(e:MouseEvent)
{
theCallBackFunction(this, "exit");
return;
}

}
}

现在这就是它出错的地方 - 它进入 AvoiderGame.as 然后它把我踢回去并出现一个我不知道如何修复的错误 - 谁能告诉我如何修复它?

package
{
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.Event;
import flash.events.TimerEvent;
import com.freeactionscript.CollisionTest;
import flash.display.Stage;

public class AvoiderGame extends MovieClip
{
var theCallBackFunction:Function;

public static var enemyArray:Array;
public var enemy:Enemy
public var Background:gameBackground;

public var avatar:Avatar;
public var gameTimer:Timer;

private var _collisionTest:CollisionTest;
private var numStars:int = 80;

private var fireTimer:Timer; //causes delay between fires
private var canFire:Boolean = true; //can you fire a laser

public function AvoiderGame(callBack)
{
stage.addEventListener(Event.ADDED_TO_STAGE, init);
theCallBackFunction = callBack;
}

private function init(e:Event):void
{
Background = new gameBackground();
addChild(Background);

enemyArray = new Array();
var enemy = new Enemy(Math.round(1 + (500 - 1) * Math.random()), - 2, stage);
enemyArray.push(enemy);
addChild(enemy);

avatar = new Avatar(stage);
addChild(avatar);

avatar.x = stage.stageWidth / 2;
avatar.y = stage.stageHeight / 2;

for (var i:int = 0; i < numStars; i++)
{
stage.addChildAt(new Star(stage), 1);
}

_collisionTest = new CollisionTest();

gameTimer = new Timer(25);
gameTimer.addEventListener(TimerEvent.TIMER, onTick);
gameTimer.start();

fireTimer = new Timer(300, 1);
fireTimer.addEventListener(TimerEvent.TIMER, fireTimerHandler, false, 0, true);
fireTimer.start();
}

public function onTick(timerEvent:TimerEvent):void
{
if (Math.random() < 0.1)
{
trace('array length: ', AvoiderGame.enemyArray.length);
enemy = new Enemy(Math.round(1 + (500 - 1) * Math.random()), - 28, stage);
enemyArray.push(enemy);
addChild(enemy);
}

avatar.UpdateAvatar(canFire);
if (canFire == true)
{
canFire = false;
fireTimer.start();
}
avatar.StayOnScreen();

for each (var enemy:Enemy in enemyArray)
{
enemy.moveDown();
enemy.StayOnScreen();
if (_collisionTest.complex(enemy, avatar))
{
gameTimer.stop();
}
}
}
private function fireTimerHandler(e:TimerEvent) : void
{
//timer ran, we can fire again.
canFire = true;
}
}
}

最佳答案

public function AvoiderGame(callBack)
{
stage.addEventListener(Event.ADDED_TO_STAGE, init);
theCallBackFunction = callBack;
}

应该是这样的

public function AvoiderGame(callBack)
{
this.addEventListener(Event.ADDED_TO_STAGE, init);
theCallBackFunction = callBack;
}

不要忘记在调用 init 函数时删除事件监听器。

关于actionscript-3 - AS3 阶段 = 空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13444408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com