2

私は AS を始めたばかりで、見つけたマインスイーパ ゲームで遊んでいます。ゲーム ボードの各セルには、数字用のダイナミック テキスト ボックス (number_txt) が埋め込まれたムービー クリップ (cell_mc)、単色の正方形のムービー クリップ (block_mc)、および爆撃されたボックスをマークする小さなフラグ (flag_mc) があります。 )。また、ボードに残っている地雷の数をカウントするための別の動的テキスト ボックスもあります (minecounter_txt)。

私の問題は、ゲームを実行しようとすると、「this.parent.flag_mc」または「this.parent」に言及された要素のいずれかがあるすべての場所で、Flash がエラー コード「1119: 可能性のあるアクセス」を返すことです。未定義のプロパティ flag_mc (またはその他の要素) が、静的型セルの参照を介して." そして minecounter_mc を使用すると、「1119: 静的タイプの flash.display:DisplayObjectContainer を使用した参照を通じて、未定義の可能性があるプロパティ flag_mc (またはその他の要素) にアクセスする」が返されます。

静的型の要素を参照できないとのことで、動的型として認識できなかったのではないかと推測。私は解決策を探し、親の前に動的要素を宣言すると役立つことを読みました。

誰でも助けることができますか?ありがとう。

package  {

import flash.display.MovieClip;
import flash.display.DisplayObjectContainer;
import flash.events.MouseEvent;

public class cell extends MovieClip {

        public var state:Boolean;
        public var revealed:Boolean;
        public var xcor:uint;
        public var ycor:uint;
        public var marked:Boolean;
        public var cellValue:int;

        public function cell(corx:uint, cory:uint) {
            // constructor code

            this.state = false;
            this.revealed = false;
            this.marked = false;
            this.cellValue = 0;
            this.xcor = corx;
            this.ycor = cory;
            this.flag_mc.visible = false;
            this.addEventListener(MouseEvent.CLICK, cellClicked);

    }//end of constructor

    private function cellClicked(event:MouseEvent):void{
        if(event.shiftKey){

            if(this.marked){
                this.flag_mc.visible = false;
                this.marked = false;
                this.parent.minecounter_txt.text = String(int(this.parent.parent.minecounter_txt.text) + 1);
            } else{
                this.flag_mc.visible = true;
                this.marked = true;
                this.parent.minecounter_txt.text = String(int(this.parent.parent.minecounter_txt.text) - 1);
            }

        } else{

            if(!state){
                openCell();
            } else{
                if(!this.marked){
                    this.parent.play_btn.visible = true;
                }
            }

        }
    }

    private function openCell(){
        if(!this.marked && !this.revealed){
            this.block_mc.visible = false;
            this.revealed = true;
            this.removeEventListener(MouseEvent.CLICK, cellClicked);
        }
    }

}//end of class

}//end of package
4

1 に答える 1

1

this.parentムービークリップが親の表示リストに追加されない限り、null になります。

親の参照を渡してクラス プロパティに格納する方がよいでしょう。

var parentObj:Object = null;

// Constructor
public function cell(parentObj:Object, corx:uint, cory:uint) {

         this.parentObj = parentObj;

         //...

そしてそれを次のように呼び出します:

var cellObj = new cell(this, ...); 

どのクラスが親になるかがわかっている場合は、typeofparentObj をそれに設定することもできます。

于 2012-12-10T05:51:00.920 に答える