0

我正在使用裸 ActionScript 3.0 从基本的 Flash UI 组件构建一个简单的菜单,并且Label在电影测试期间第一个控件没有显示(Ctrl+Enter)。这是为什么?

我在图书馆或舞台上没有任何符号。我的文档链接到main.as

应该发生的是,当.swf启动时,main()会收到生成指令,而该指令mainMenu又会在电影屏幕的中心顶部显示唯一的标签。

主文件

package {

    import flash.display.*;

    public class main extends MovieClip{
        public function main(){
            changeState(null, "mainMenu");
        }
        public function changeState(currentState, nextState){
            if(currentState != null){
                removeChild(currentState);
            }
            if(nextState == "mainMenu"){
                var main_menu:mainMenu = new mainMenu(changeState);
                addChild(main_menu);
            }// else if(nextState == "deckManager"){
//              var deck_manager:deckManager = new deckManager(changeState);
//              addChild(deck_manager);
//          }
        }
    }
}

主菜单.as

package {

    import flash.display.*;
    import flash.events.MouseEvent;
    import fl.controls.Label;
    import fl.controls.RadioButton;
    import fl.controls.ComboBox;
    import fl.controls.Button;

    public class mainMenu extends Sprite{

        const difficultyRadioGroupName:String = "difficultyGroup"; // group name for easy, normal and hard difficulty radio buttons

        var difficultyLabel:Label; // "Difficulty" label
        var easyDifficultyRadio:RadioButton; // "Easy" difficulty radio button
        var normalDifficultyRadio:RadioButton; // "Normal" difficulty radio button
        var hardDifficultyRadio:RadioButton; // "Hard" difficulty radio button
        var yourDeckLabel:Label; // "Your deck" label
        var yourDeckCombo:ComboBox; // combobox to select your deck(1)
        var editSelectedDeckButton:Button; // button to edit currently selected deck
        var startTheGameButton:Button; // button to start the game
        var theCallbackFunction:Function; // callback function to change between mainMenu and deckManager

        public function mainMenu(callback){

            // create and position the difficulty label
            difficultyLabel = new Label();
            difficultyLabel.text = "Difficulty";
            difficultyLabel.x = width / 2;
            difficultyLabel.y = height / 4;
            addChild(difficultyLabel);

            theCallbackFunction = callback;
        }


        //public function backButtonClicked(evt:MouseEvent){
//          theCallbackFunction(this, "back");
//          return;
//      }
    }
}
4

2 回答 2

1

从表面上看,这似乎没问题。

但是,您分配给 的 X/Y 坐标Label可能不是您所期望的。您可以根据mainMenuSprite 的宽度/高度设置它们。但这Sprite还没有孩子(孩子被添加到下一行),所以宽度/高度仍然是 0。

这可能不是问题。为了进一步解决这个问题,我会设置一些断点并使用调试器,或者添加一堆trace语句以确保您的代码正在使用正确的值执行。

于 2012-08-08T16:54:40.477 回答
0

我相信“fl.controls”包中的所有内容都需要在您的库中显示适当的资产。如果您只是从 fl.controls 导入内容,则除非您将该元素添加到您的库或摄取其中包含适当库资产的 swc/swf,否则您不会获得控件的 UI 方面。

所以我猜如果在 Flash IDE 中,如果你将适当的 UI 元素从组件选项卡拖到你的库中,它们就会开始出现。它们不必在舞台上或任何东西上,只需在库中,以便 UI 元素与您的代码一起编译。

于 2012-08-08T17:10:15.677 回答