【问题标题】:AS3: Error 1009: Null referenceAS3:错误 1009:空引用
【发布时间】:2012-11-14 06:08:36
【问题描述】:

我正在使用 ActionScript 3 制作游戏。我有一个菜单类,其中包含一个呈现菜单的方法。 我在 Main 类中创建了一个 Menu 实例,然后调用该方法。当我调试应用程序时,我得到一个空引用错误。这是菜单类的代码:

package
{
import flash.display.MovieClip;

import menucomponents.*;

public class Menu extends MovieClip
{
    public function Menu()
    {
        super();
    }

    public function initMenuComponents():void{
        var arrMenuButtons:Array = new Array();

        var btnPlay:MovieClip = new Play();
        var btnOptions:MovieClip = new Options();
        var btnLikeOnFacebbook:MovieClip = new LikeOnFacebook();
        var btnShareOnFacebook:MovieClip = new ShareOnFacebook()

        arrMenuButtons.push(btnPlay);
        arrMenuButtons.push(btnOptions);
        arrMenuButtons.push(btnLikeOnFacebbook);
        arrMenuButtons.push(btnShareOnFacebook);

        var i:int = 0;

        for each(var item in arrMenuButtons){
            item.x = (stage.stageWidth / 2) - (item.width / 2);
            item.y = 100 + i*50;
            item.buttonMode = true;

            i++;
        }
}
}
}

提前致谢。

【问题讨论】:

  • 你不是just ask this question吗?
  • 使用调试器看看发生了什么,如果手边没有调试器,可以尝试至少保留一个日志
  • @SamIam 我在尝试向舞台添加项目的行中收到错误消息。这是否意味着舞台为空或我的项目为空?抱歉,如果这是一个愚蠢的问题,我在大学时从未正确学习过调试。
  • @SylvainVansteelandt 那是哪一行?
  • @SamIam 对不起,发布此内容后,我尝试在每个语句的开头添加:stage.addChild(item);但问题依然存在,它始终是 for each 循环的第一行。

标签: actionscript-3 reference null


【解决方案1】:

您的问题可能是当您的 for 循环运行时该阶段尚未填充。请尝试以下操作:

public class Main extends MovieClip { 
    public function Main() { 
        super(); 
        var menu:Menu = new Menu(); 

        //it's good practice - as sometimes stage actually isn't populated yet when your main constructor runs - to check, though in FlashPro i've never actually encountered this (flex/flashBuilder I have)
        if(stage){
            addedToStage(null);
        }else{
            //stage isn't ready, lets wait until it is
            this.addEventListener(Event.ADDED_TO_STAGE,addedToStage);
        }
    } 

    private function addedToStage(e:Event):void {
        menu.addEventListener(Event.ADDED_TO_STAGE,menuAdded); //this will ensure that stage is available in the menu instance when menuAdded is called.
        stage.addChild(menu); 
    }

    private function menuAdded(e:Event):void {
        menu.initMenuComponents(); 
    }
}

【讨论】:

  • 已经试过了,在其他网站上找到的,没有用。我终于解决了这个问题。在一个网站上发现了一个邪恶的修复,它神奇地起作用了。将文件另存为 AS2,然后返回为 AS3。工作。
  • 那时您的问题不是编程问题,而是 FlashPro 问题。我会怀疑这是一个真正的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 2017-05-18
  • 1970-01-01
相关资源
最近更新 更多