Class 如何在侧滚表格as3中制作可收藏的硬币

Class 如何在侧滚表格as3中制作可收藏的硬币,class,actionscript-3,Class,Actionscript 3,正如我所说的: package { import flash.display.MovieClip; import flash.events.*; import flash.events.Event; public class coin extends MovieClip { var player:MovieClip; var mainTimeLine = MovieClip(root); var coinVa

正如我所说的:

package  {

    import flash.display.MovieClip;
    import flash.events.*;
    import flash.events.Event;

    public class coin extends MovieClip {

        var player:MovieClip;
        var mainTimeLine = MovieClip(root);
        var coinValue:int = 5;

        public function coin() {
            // constructor code
            this.addEventListener(Event.ENTER_FRAME, upDate);
        }

        function upDate (e:Event) :void {
            player = MovieClip(root).player;

            if (this.hitTestObject(player)) {
                this.removeEventListener(Event.ENTER_FRAME, upDate);
                this.visible = false;
                mainTimeLine.coinCount += coinValue;
            }
        }

    }

}
当我在屏幕上为玩家放置硬币并收集硬币(玩家编码和其他编码在Main.as中)时,这可以很好地工作,但当我在碰撞电影剪辑中放置硬币时,它会跟踪此错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at coin/upDate()

我很高兴知道我遗漏的任何内容或对不同方式的任何建议。

您的main timeline变量为空,因此下面的一行产生错误

mainTimeLine.coinCount += coinValue;
为什么。

因为您在硬币实例化时对其进行了初始化,而就在这一刻,硬币没有附加到显示列表。任何有效的DisplayObjectstageroot属性仅在对象本身附加到显示列表时可用

如何修复它。

备选案文1。在适当的时候初始化它

// player = MovieClip(root).player;
mainTimeLine = MovieClip(root);
player = mainTimeLine.player;
备选案文2。创建一个类,该类将全局保留您需要的所有对象引用,这样您就可以从任何代码段访问它们,而不必考虑游戏显示列表结构

package
{
    public class GameData
    {
        static public var player:PlayerClass;
        static public var game:GameClass;
    }
}
因此,当你开始游戏时,你在创建它们的那一刻初始化玩家游戏引用,然后从你想要的任何地方引用它们

if (this.hitTestObject(GameData.player)) // ...