0

わかりましたので、ここで私が考える方法についての質問です。私はこれにかなり慣れていないため、アプローチが間違っていると思います。

クリックするたびにステージがaddChildを作成する「ゲーム」を作りたいです。限られた知識でいくつかのサイトを検索し、行ったり来たりしてみた結果、次の結論に達しました。

mouse.addEventListener(MouseEvent.CLICK, CREATE);
function CREATE(e:Event):void {
    var square:MovieClip = new squarelink();
    addChild(square);
    square.x = mouseX;
    square.y = mouseY;
} 

今私の問題は、この新しいムービークリップにいくつかの「イベント」を与えたいということですが、クリックするまでムービークリップがステージに表示されないためです。その名前の addeventlistener は、おそらく未定義のプロパティへのアクセスとして表示されます。これにより、swf が失敗します。

そのため、「var square:MovieClip = new squarelink();」を設定しようとしました。私のCREATE関数から。これにより、クリックしたときに正方形を移動するだけで、新しいものを一度作成することはありません。イベントを追加できるようになったのはどうしてですか。

要約すると。複数の「子」を作成できるメソッドと、もう一度クリックした場合に次のように示すイベントを追加できるメソッドが必要です。それ自体を削除します。

これは、ステージ上にまだ広場がないことを教えてくれません。

(これは問題の説明です。スペルミスに関するコメント、または「それが機能するには大きな R が必要です」は歓迎されますが、使用できない可能性があります。私はコードを適切に書く方法を知っていますが、私は知りませんどのコードを書くかを知っておいてください。)

この問題がうまく説明されていることを願っています。学校に戻って先生に尋ねるまで1か月あるので、ここの誰かが助けてくれることを願っています. :D

4

3 に答える 3

1

問題に対して、より複雑なオブジェクト指向のソリューションを開発する必要があります。オブジェクトを作成するためのメイン アプリケーション クラスを用意し、それらの作成されたオブジェクトが「私を削除してください」イベントをクリエーター オブジェクトにディスパッチするようにします。

ただし、ここで示したこの簡単な例を考えると、クリックされたオブジェクトからステージへのイベントの伝播を停止することを含む簡単な解決策があります。

stage.addEventListener(MouseEvent.CLICK, createCircle);
function createCircle(event:MouseEvent):void
{
    var circle:Sprite = new Sprite();
    circle.graphics.beginFill(0x00FF00);
    circle.graphics.drawCircle(0, 0, 20);
    circle.x = stage.mouseX;
    circle.y = stage.mouseY;
    stage.addChild(circle);

    circle.addEventListener(MouseEvent.CLICK, removeCircle);
}

function removeCircle(event:MouseEvent):void
{
    stage.removeChild(event.currentTarget as DisplayObject);

    // magic!
    event.stopPropagation();
}
于 2012-07-27T13:37:00.030 に答える
0

addChildパラドックス?? とにかく、私が理解したのは、あなたがする必要があるということだけです:

  • ステージ クリックでムービークリップをステージに追加します。
  • 一度クリックしてからもう一度クリックすると、ムービークリップが削除されます。

その場合は、これを例として使用します。

stop();

stage.addEventListener(MouseEvent.CLICK, createBox);

function createBox(e:MouseEvent) {

    if(e.target != stage) return;

    var square:MovieClip = new MovieClip();

    square.graphics.beginFill(0,1);
    square.graphics.drawRect(0,0,25,25);
    square.graphics.endFill();

    square.x = 100;
    square.y = 100; 
    square.name = "mc" + this.numChildren;

    square.addEventListener(MouseEvent.CLICK, function(e) {

        var sq:MovieClip = e.currentTarget;

        if(sq.name.charAt(0) == '_') removeChild(sq);

        else sq.name = "_" + sq.name;       
    });

    addChild(square);   
}
于 2012-07-27T12:15:08.897 に答える
0

上記のコードは、ステージ上にムービークリップ インスタンスを作成するためのものです。ムービー クリップを削除するには、そのムービー クリップにクラスをアタッチする必要があります。そのクラスで、含まれているムービークリップを削除する必要があるイベント リスナーを追加します。

于 2012-07-27T11:07:09.117 に答える