0

我正在尝试为我的班级制作诸如集中注意力的游戏。我无法获取作为函数输入提供的信息并将它们保存到变量中。这是我正在尝试做的工作版本:工作版本 这是我的卡组件中的代码:

<fx:Script>
    <![CDATA[

        private var _frontFile:String;
        private var _backFile:String;



        public function makeCard(suit:String, value:String):void
        {
            _frontFile = "asset/Cards_deck_" + suit + "_" + value + ".jpg";
            _backFile = "asset/Cards_back_Jaguar.jpg";
            var _suit:String = suit;
            var _value:String = value;

        }

        public function turnUp():void
        {
            source = _frontFile;
        }

        public function turnDown():void
        {
            source = _backFile;
        }

        public function turnOver():void
        {
            if (source == _frontFile) {
                source = _backFile;
            }
            else if (source == _backFile) {
                source = _frontFile;
            }
        }


    ]]>
</fx:Script>

</s:Image>

我的主要 MXML 文件:

<fx:Style>
    @namespace s "library://ns.adobe.com/flex/spark";
    @namespace mx "library://ns.adobe.com/flex/mx";
    s|Application {
        backgroundColor: #006600;
    }
    #titleLbl {
        color: white;
        fontSize: 60px;
        paddingTop: 15;
    }
    #infoLbl {
        color: yellow;
        fontSize: 24px;
    }
</fx:Style>

<fx:Script>
    <![CDATA[

        //Gabe Dougherty
        //n222
        //1-24-13

        import cardGames.*;

        private var deck:Deck = new Deck();

        private function init():void
        {
            // Let's exclude the face cards.
            deck.makeDeck(false);

            deck.shuffle();

            // Deal the cards.
            var cardCount:int = deck.numCards();
            for (var i:int = 0; i < cardCount; i++) {

                // Get a card and add it to 'playArea'.
                var c:Card = deck.dealCard();
                playArea.addElement(c);

                // Get the card ready for play.
                c.turnDown();
                c.addEventListener(MouseEvent.CLICK, chooseCard);
            }
        }

        private function chooseCard(e:MouseEvent):void
        {
            var card:Card = Card(e.currentTarget);
            card.turnUp();

            // Report on what type of card.
            infoLbl.text = "The card is the " + card.value + " of " + card.suit;
        }

    ]]>
</fx:Script>

<s:Label id="titleLbl" text="Concentration (sort of)"/>

<s:Label id="infoLbl" text="The card is ..."/>

<s:TileGroup id="playArea" requestedRowCount="4"/>

</s:Application>

如果需要,然后是我的甲板组件:

<fx:Script>
    <![CDATA[

        //set the properties
        private var _suitNames:Array = ['clubs', 'diamond', 'heart', 'spade'];
        private var _valueNames:Array = ['2', '3', '4', '5', '6', '7', '8', '9', '10'];
        private var _faceNames:Array = ['jack', 'queen', 'king', 'ace'];
        private var _cards:Array = new Array;

        //set the methods
        public function dealCard():Card {
            return _cards.pop();
        }

        public function numCards():Number {
            return _cards.length;
        }

        public function shuffle():void {
            for (var i:int = 0; i < _cards.length; i++) {

                // Take the last card from the deck.
                var c:Card = _cards.pop();

                // Insert the card back towards the front of the deck, at a random location.
                var index:int = Math.random() * (i + 1);
                _cards.splice(index, 0, c);
            }
        }

        public function makeDeck(includeFaces:Boolean=true):void {                        
            for each (var suit:String in _suitNames) {

                for each (var value:String in _valueNames) {

                    var card:Card = new Card();
                    card.makeCard(suit, value);
                    _cards.push (card);
                }
            }

                if(includeFaces == true){
                    for each (var suit:String in _suitNames) {

                        for each (var value:String in _faceNames) {

                            var card:Card = new Card();
                            card.makeCard(suit, value);
                            _cards.push (card);
                    }

                }
            }
        }
    ]]>
</fx:Script>
</fx:Object>
4

1 回答 1

0

如果您在函数内声明一个变量,那么它的作用域是该函数的本地变量。你不能在函数之外使用它——它不存在。

因此,如果您希望类的其余部分可以访问这些声明_suit,则需要将这些声明移到函数_value之外:makeCard

private var _frontFile:String;
private var _backFile:String;
private var _suit:String;
private var _value:String

public function makeCard(suit:String, value:String):void {
    _frontFile = "asset/Cards_deck_" + suit + "_" + value + ".jpg";
    _backFile = "asset/Cards_back_Jaguar.jpg";
    _suit = suit;
    _value = value;

}

但是...由于这些是私有变量,您将无法从 Card 类外部访问它们。您可以将它们设为公共变量,但更灵活的方法是将访问器方法添加到类中。这些是允许其他类访问值的公共函数:

public function get suit():String {
    return _suit;
}

public function get value():String {
    return _value;
}

现在你的程序应该可以工作了。

如果您需要能够从 Card 类外部更改这些值,则需要编写公共“setter”方法来修改私有变量的值。

于 2013-01-24T18:05:53.277 回答