首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >空对象引用actionscript 3

空对象引用actionscript 3
EN

Stack Overflow用户
提问于 2014-01-23 18:32:07
回答 4查看 63关注 0票数 0

我做了一个这样的类:

代码语言:javascript
运行
复制
    package
{
    import flash.display.Sprite;
    import flash.text.TextField;

    public class Hint extends Sprite
    {
        public static var _instance:Hint = null;

        public function Hint() 
        {
            _instance = this;
        }

        public function DrawHintText():void
        {
            Const._scoreText = new TextField();
            Const._scoreTextHolder = new TextField();
            Const._highScoreText = new TextField();
            Const._highScoreTextHolder = new TextField();
            Const._timeLeft = new TextField();
            Const._timeLeftHolder = new TextField();

            Const._scoreTextHolder.textColor = 0xFFFFFF;
            Const._scoreTextHolder.x = stage.stageWidth - 350;
            Const._scoreTextHolder.y = 100;
            Const._scoreTextHolder.text = "Score: ";
            Const._scoreTextHolder.selectable = false;

            Const._scoreText.textColor = 0xFFFFFF;
            Const._scoreText.x = stage.stageWidth - 250;
            Const._scoreText.y = 100;
            Const._scoreText.text = "--";
            Const._scoreText.selectable = false;

            Const._highScoreTextHolder.textColor = 0xFFFFFF;
            Const._highScoreTextHolder.x = stage.stageWidth - 350;
            Const._highScoreTextHolder.y = 150;
            Const._highScoreTextHolder.text = "High Score: ";
            Const._highScoreTextHolder.selectable = false;

            Const._highScoreText.textColor = 0xFFFFFF;
            Const._highScoreText.x = stage.stageWidth - 250;
            Const._highScoreText.y = 150;
            Const._highScoreText.text = "--";
            Const._highScoreText.selectable = false;

            Const._timeLeftHolder.textColor = 0xFF0000;
            Const._timeLeftHolder.x = stage.stageWidth - 350;
            Const._timeLeftHolder.y = 200;
            Const._timeLeftHolder.text = "Time Left: ";
            Const._timeLeftHolder.selectable = false;

            Const._timeLeft.textColor = 0xFF0000;
            Const._timeLeft.x = stage.stageWidth - 275;
            Const._timeLeft.y = 200;
            Const._timeLeft.text = "00:00";
            Const._timeLeft.selectable = false;

            addChild(Const._scoreText);
            addChild(Const._scoreTextHolder);
            addChild(Const._highScoreText);
            addChild(Const._highScoreTextHolder);
            addChild(Const._timeLeft);
            addChild(Const._timeLeftHolder);
        }

    }

}

然后我调用了GameManager:

代码语言:javascript
运行
复制
   package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;


    [SWF(width='1366',height='768',backgroundColor='#000000',frameRate='30')]

    public class GameManager extends Sprite
    {

        public function GameManager():void
        {
            DrawHintText();
            GenerateField();
            ShowField();
            GenerateGems();
        }

        private function GenerateField():void
        {
            Const._gridField = new Array();

            for (var i:uint = 0; i < Const._gridSizeY; i++)
            {
                Const._gridField[i] = new Array();

                for (var j:uint = 0; j < Const._gridSizeX; j++)
                {
                    Const._gridField[i][j] = 0;
                }
            }
        }

        private function ShowField():void
        {
            Const._fieldSprite = new Sprite();
            addChild(Const._fieldSprite);
            Const._fieldSprite.graphics.lineStyle(1, 0xFFFFFF);

            for (var i:uint = 0; i < Const._gridSizeY; i++)
            {
                for (var j:uint = 0; j < Const._gridSizeX; j++)
                {
                    Const._fieldSprite.graphics.beginFill(0x666666);
                    Const._fieldSprite.graphics.drawRect(25 + 65 * j, 80 + 60 * i, 65, 60);
                    Const._fieldSprite.graphics.endFill();
                }
            }
        }

        private function DrawHintText():void
        {
            Hint._instance.DrawHintText();
        }

        private function GenerateGems():void
        {

        }

    }

}

下面是常量:

代码语言:javascript
运行
复制
package
{
    import flash.display.Sprite;
    import flash.text.TextField;

    public class Const 
    {
        public static var _gridField:Array;

        public static var _fieldSprite:Sprite;

        public static var _scoreText:TextField;
        public static var _scoreTextHolder:TextField;
        public static var _highScoreText:TextField;
        public static var _highScoreTextHolder:TextField;
        public static var _timeLeft:TextField;
        public static var _timeLeftHolder:TextField;

        public static const _gridSizeX:Number = 10;
        public static const _gridSizeY:Number = 10;

        public function Const() 
        {

        }

    }

}

当我运行代码时,我得到了错误:

我在哪里遗漏了一些代码?

EN

回答 4

Stack Overflow用户

发布于 2014-01-23 18:41:37

Hint._instance.DrawHintText();中调用函数DrawHintText()不会创建类Hint的实例。

尝试用public getter替换您的public变量。

代码语言:javascript
运行
复制
private static var __instance:Hint = null;

public static function get _instance():Hint {
    if (!__instance) {
        __instance = new Hint();
    }
    return __instance;
}

并删除构造函数,因为getter使它变得不必要。

票数 1
EN

Stack Overflow用户

发布于 2014-01-23 18:39:49

这可能是一个愚蠢的问题,但您实际上是在某处创建Hint的实例吗?因为只要你不做new Hint()Hint._instance就会是空的。

票数 0
EN

Stack Overflow用户

发布于 2014-01-23 18:43:33

尝试如下所示:

代码语言:javascript
运行
复制
public class Hint extends Sprite
{
    private static var _instance:Hint;

    public function Hint()
    {
        if (_instance) throw new Error("Hint... use getInstance()");
        _instance = this;
    }

    public static function getInstance():Hint
    {
        if (!_instance) new Hint();
        return _instance;
    }

    //DrawHintText >> rename to drawHintText
    public function drawHintText():void
    {
        //your code here
    }
}

并使用:

代码语言:javascript
运行
复制
 Hint.getInstance().drawHintText();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21305531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档