【问题标题】:Starling not displaying graphic八哥不显示图形
【发布时间】:2014-06-06 00:46:44
【问题描述】:

大家好,我是 AS3 和 Starling 的新手,我在显示不同类别的图像时遇到问题。它确实显示在我的游戏菜单类中,但我希望它显示在我的游戏类中。

所以我得到了 3 个 Main 类,它们启动了运行 GameMenu 类的八哥。

“游戏菜单类” 包{

import starling.display.BlendMode;
import starling.display.Button;
import starling.display.Image;
import starling.display.Sprite;
import starling.events.Event;

public class GameMenu extends Sprite {

    private var bg:Image;
    private var gameLogo:Image;
    private var playBtn:Button;
    private var rankBtn:Button;
    private var settingBtn:Button;

    private var inGame:PlayGame;


    public function GameMenu ()
    {
        super ();

        this.addEventListener (Event.ADDED_TO_STAGE, onAddedToStage);
    }

    private function onAddedToStage (event:Event):void
    {
        this.removeEventListener (Event.ADDED_TO_STAGE, onAddedToStage);

        drawScreen ();
    }

    private function drawScreen ():void
    {
        bg = new Image(Assets.getAtlas().getTexture(("Background.png")));
        bg.blendMode = BlendMode.NONE;
        this.addChild(bg);

        gameLogo = new Image(Assets.getAtlas().getTexture(("GameLogo.png")));
        gameLogo.x = stage.stageWidth/2 - gameLogo.width/2;
        gameLogo.y = 30;
        this.addChild(gameLogo);

        playBtn = new Button(Assets.getAtlas().getTexture("PlayBtn.png"));
        playBtn.x = stage.stageWidth/2 - playBtn.width/2;
        playBtn.y = 450;
        playBtn.addEventListener(Event.TRIGGERED, onPlayClick);
        this.addChild(playBtn);

        rankBtn = new Button(Assets.getAtlas().getTexture("RankBtn.png"));
        rankBtn.x = rankBtn.bounds.left + 60;
        rankBtn.y = 600;
        rankBtn.addEventListener(Event.TRIGGERED, onRankClick);
        this.addChild(rankBtn);

        settingBtn = new Button(Assets.getAtlas().getTexture("SettingBtn.png"));
        settingBtn.x = settingBtn.bounds.right + 60;
        settingBtn.y = 600;
        settingBtn.addEventListener(Event.TRIGGERED, onSettingClick);
        this.addChild(settingBtn);

    }

    private function onRankClick (event:Event):void
    {
        trace("LEADERBOARD BUTTON HIT")
    }

    private function onSettingClick (event:Event):void
    {
        trace("SETTING SCREEN BUTTON HIT")
    }

    private function onPlayClick (event:Event):void
    {
        playBtn.removeEventListener(Event.TRIGGERED, onPlayClick);
        trace("PLAY BUTTON HIT")

        gameLogo.visible = false;
        playBtn.visible = false;
        rankBtn.visible = false;
        settingBtn.visible = false;
        //bg.visible = false;
        inGame = new PlayGame();
    }


}

}

这个类现在可以完美运行。

“PlayGame 类”

包{

import starling.display.Image;
import starling.display.Sprite;
import starling.events.Event;

public class PlayGame extends Sprite
{
    private var bubble:Image;

    public function PlayGame ()
    {
        trace("PlayGame");
        super ();

        this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage2);
    }

    private function onAddedToStage2 (event:Event):void
    {
        trace("OnAddedToStage");
        this.removeEventListener (Event.ADDED_TO_STAGE, onAddedToStage2);

        drawScreen ();
    }

    public function drawScreen ():void
    {
         trace("Bubble");
         bubble = new Image(Assets.getAtlas().getTexture(("Bubble.png")));
         bubble.x = 100;
         bubble.y = 100;
         this.addChild(bubble);
    }


}

}

现在显示气泡图像,我不知道为什么?

【问题讨论】:

    标签: actionscript-3 starling-framework


    【解决方案1】:

    括号太多了,但这不是你的问题

    bubble = new Image(Assets.getAtlas().getTexture(("Bubble.png")));
    //is less clean/readable than
    bubble = new Image(Assets.getAtlas().getTexture("Bubble.png"));
    

    在遇到此类问题时,如果starling/air没有报错,你应该尽量确保显示对象当前已经渲染完毕。

    尝试应用颜色而不是纹理。

    bubble = new Image( Texture.fromColor(64,64,0xff99ff) );
    

    如果此代码显示一个 64 像素/边的精美矩形,则问题来自纹理图集或纹理。确保拥有经过验证的图集、验证框架和名称。

    如果这段代码没有显示长方形,那么你的问题不是来自纹理图集或纹理,而更可能来自于八哥的显示列表。

    在你的情况下, 我认为你应该只需要在你的 GameMenu 类中添加 Ingame :

    游戏菜单:

    private function onPlayClick (event:Event):void
    {
        //... your stuff
        inGame = new PlayGame();
    
        this.parent.addChild(inGame);
    }
    

    它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多