我遇到了这个问题而且无法解决这个问题
我为uni制作平台游戏
我有2个文件
flashgame.fla和Coin.as(这是Coin类的代码)
我有代码说明一旦玩家收集了所有硬币,框架将从第1帧变为第2帧。 我何时收到此消息
TypeError:错误#1009:无法访问null的属性或方法 对象参考。在Coin / update()TypeError:错误#1009:不能 访问null对象引用的属性或方法。在 flashgame_fla :: MainTimeline /回路()
我尝试过Try and Catch和其他各种事情
我认为这样做是因为Coin.as扩展了MovieClip,所以当它进入下一帧时,它仍然试图找到一个没有任何东西的硬币。
这是Coin.as的代码
package {
import flash.display.MovieClip;
import flash.events.*;
public class Coin extends MovieClip {
var player:MovieClip;
var mainTimeLine = MovieClip(root);
public function Coin() {
this.addEventListener(Event.ENTER_FRAME, update);
}
function update(event:Event):void
{
player=MovieClip(root).player;
if(this.hitTestObject(player))
{
this.removeEventListener(Event.ENTER_FRAME, update);
parent.removeChild(this);
mainTimeLine.coinCount++;
}
}
}
}
我在flashgame.fla中有一个数组,记录游戏中的所有硬币。当玩家击中它们时,它们会从阵列中拼接出来。转到第2帧时也可能导致问题
来自flashgame.fla的重要内容var coin:Array = new Array();
for (i=0; i<numChildren; i++)
{
if (getChildAt(i) is Coin)
{
coin.push(getChildAt(i).getRect(this));
}
}
拼接硬币
for (i=0; i<coin.length; i++)
{
if (player.getRect(this).intersects(coin[i]))
{
coinSnd.play();
coin.splice(i,1);
}
}
感谢您提供的任何帮助 如果你还需要我的任何东西请问:) 全部用截图
答案 0 :(得分:0)
这很可能是因为在Coin类的更新功能中找不到播放器。这是因为即使显示对象不在舞台上(即您通常不想要的),也会运行ENTER_FRAME事件。在这种情况下,你试图对玩家进行一次击球。
要解决此问题,您可以在硬币连接到舞台后立即开始运行更新,并在从舞台上移除后立即停止运行。
public function Coin() {
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
this.addEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage);
}
function onAddedToStage(event:Event):void {
this.addEventListener(Event.ENTER_FRAME, update);
}
function onRemovedFromStage(event:Event):void {
this.removeEventListener(Event.ENTER_FRAME, update);
}
答案 1 :(得分:0)
发生错误的是哪个行号?那应该告诉你哪个变量为空。
我的猜测,基于这部分错误:“TypeError:错误#1009:无法访问空对象引用的属性或方法。在Coin / update()”,是parent
的硬币为空,因为您已移动到新的关键帧,并且该实例已从舞台中删除。
也就是说,我怀疑parent.removeChild(this);
行发生了错误 - 这是正确的吗?
如果是这种情况,那么在调用parent
之前检查removeChild
是否为空。