首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Starling无法访问空对象引用的属性或方法

Starling无法访问空对象引用的属性或方法
EN

Stack Overflow用户
提问于 2015-09-06 05:43:03
回答 1查看 157关注 0票数 0

嘿,感谢任何帮助,我已经被资产经理搞得头晕目眩了几天了,这是我的夏威夷类,我正在尝试引用我的资产管理类(MapAssetLoadQeue)中的资产。并且我得到了空对象引用的不能访问属性或方法。错误,如果我没有(空)资产管理器引用,则在我的Hawaii类中抛出错误,并且在我的Loader类haw.showHawaii()中抛出该错误。

谢谢!

代码语言:javascript
复制
package Maps
{
import flash.filesystem.File;

import Enqueue.MapAssetLoadQeue;

import starling.animation.IAnimatable;
import starling.animation.Juggler;
import starling.core.Starling;
import starling.display.Image;
import starling.display.MovieClip;
import starling.display.Sprite;
import starling.events.Event;
import starling.textures.Texture;
import starling.textures.TextureAtlas;
import starling.utils.AssetManager;

public class Hawaii extends Sprite
{
    public var mal:MapAssetLoadQeue = new MapAssetLoadQeue;
    public var Ocean:Image;






    public function Hawaii():void{
        super();
        this.addEventListener   
                      (starling.events.Event.ADDED_TO_STAGE, showHawaii);
    }



    public function showHawaii(e:Event):void{



        if(mal.mapAssets != null) {

     Ocean = new Image(mal.mapAssets.getTexture("blue"));
     addChild(Ocean);
    Ocean.x = 0;
    Ocean.y = 0;
        }
    }

这是我加载资产的加载器类,也是我出错的地方。haw.showHawaii(null)函数。无法访问空对象引用的属性或方法。

代码语言:javascript
复制
package Assets {
import flash.filesystem.File;

import Enqueue.MapAssetLoadQeue;

import GUI.Wave;

import Maps.Hawaii;

import starling.animation.IAnimatable;
import starling.animation.Juggler;
import starling.core.Starling;
import starling.core.starling_internal;
import starling.display.Image;
import starling.display.MovieClip;
import starling.display.Sprite;
import starling.events.Event;
import starling.textures.Texture;
import starling.textures.TextureAtlas;
import starling.utils.AssetManager;


public class Loader extends Sprite {

    var loadText: Texture = Texture.fromEmbeddedAsset(loadMCTexture);
    var loadXml: XML = XML(new loadMC0Xml());
    var loaderAtlas: TextureAtlas = new TextureAtlas(loadText, loadXml);
    public var loaderMovie: MovieClip = new MovieClip(loaderAtlas.getTextures("loading_"));
    public var mal: MapAssetLoadQeue = new MapAssetLoadQeue;
    public var wave:Wave = new Wave;
    public var haw:Hawaii;





    //Loader MovieClip size 720X233;
    [Embed(source = "/../Wavehunter/loadScreenAssets/wm/MovieClips/loader/loader_0.xml", mimeType = "application/octet-stream")]
    public static const loadMC0Xml: Class;

    [Embed(source = "/../Wavehunter/loadScreenAssets/wm/MovieClips/loader/loader_0.png")]
    public static const loadMCTexture: Class;


    // public var juggler:Juggler = Starling.juggler;
    /*
    ======================================================================
    Every Movieclip asset for the worldMap
    > Load WorldMap Assets on stage as Png and Make all alpha to 30%
    > and within each function make that png invible to false or remove
    > add MoviClip over the invisible png after load is processed
    =======================================================================
    */







    // Load WorldMap asset function
    public function mapLoader(): void {
        mal.requestWM();
        addChild(loaderMovie);
        loaderMovie.x = 347;
        loaderMovie.y = 277;
        loaderMovie.play();
        Starling.juggler.add(loaderMovie);
    }
    public function mapLdr(){
        loaderMovie.visible = true;
        addChild(loaderMovie);
        loaderMovie.x = 347;
        loaderMovie.y = 277;
        loaderMovie.play();
        Starling.juggler.add(loaderMovie);
    }
    //this function resizes the loader to original size and places at the bottom corner
    public function resizeLdr(){
        loaderMovie.width = 72;
        loaderMovie.height = 22;
        loaderMovie.x =1237;
        loaderMovie.y = 712;
    }

    public function callLoad(): void {



    public function callHawaii(): void {
        trace(" Hawaii is being runned");
        //mal.mapAssets.verbose = true;

        mal.mapAssets.loadQueue(function onGo(ratio: Number): void {

            trace("Hawaii percentage is", ratio);
            if (ratio == 1.0) {
                Starling.juggler.delayCall(function (): void {
                    loaderMovie.visible = false;
                    //addChild(haw.Ocean);
                //  addChild(haw);
                    trace("this is haw value",haw);
                    //trace("this is the function", haw.showHawaii(null));
                    haw.showHawaii(null);

                }, 0.30);

            }
        });
    }









    public function showMap() {
        // get texture by name
        addChild(mal);
        mal.accesMap();
        mal.hawaii.addEventListener(Event.TRIGGERED,removeMap);


    }
    // this code removes the HawaiiMap from the screen and goes directly to the wave
    public function removeMap(){
        trace("function initated"); 
        mapLdr();
        resizeLdr();
        mal.mapAssets.purge();
        mal.requestHawaii();
        callHawaii();

            mal.hawaii.removeEventListener(Event.TRIGGERED,removeMap);


    }

    public function Loader() {
        super();
    }
}

}

这是我的Asset Manager类

代码语言:javascript
复制
package Enqueue {
import flash.filesystem.File;
import Assets.MapAnimate;
import Assets.MapAssets;
import Maps.Hawaii;
import starling.animation.IAnimatable;
import starling.animation.Juggler;
import starling.animation.Transitions;
import starling.animation.Tween;
import starling.core.Starling;
import starling.core.starling_internal;
import starling.display.Button;
import starling.display.Image;
import starling.display.MovieClip;
import starling.display.Sprite;
import starling.events.EnterFrameEvent;
import starling.events.Event;
import starling.textures.Texture;
import starling.textures.TextureAtlas;
import starling.utils.AssetManager;




public class MapAssetLoadQeue extends Sprite {
    public var mapAssets: AssetManager;

    public function MapAssetLoadQeue() {
        super();
    }


    public function requestHawaii():void {
        //  mapAssets.verbose =false;
    //  mapAssets = new AssetManager;
        var appDir:File = File.applicationDirectory;
        mapAssets.enqueue(appDir.resolvePath("IslandMaps/Hawaii"));
        //mapAssets.enqueue(Hawaii);
        mapAssets.verbose = true;
    }
EN

回答 1

Stack Overflow用户

发布于 2015-09-06 08:37:05

如果这就是你所有的代码,如果我没有遗漏一些明显的东西,我不会看到你在任何地方创建"haw“。也就是说,你看起来没有像这样的东西。

代码语言:javascript
复制
haw = new Hawaii();

...so,它将是空的!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32417969

复制
相关文章

相似问题

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