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 に答える