0

私はこのOOPに不慣れであり、これらすべてを理解するのに苦労しています。

AS3.0で、タイムラインコーディングを使用してAS2.0で作成した簡単なモグラたたきゲームをクラスで再現しようとしています。

私はたくさんのフォーラムを読みましたが、私はまだ自分が間違っていることを正確に理解していません。

これが私の設定です:

  1. 私は名前の付いたムービークリップを持っていますmrBunny(私のガールフレンドは、ほくろがあまりにも醜いので、それをバニーに変更するように私に言いました)。mrBunnyこれで、ステージ上に6つのインスタンスがあり、それぞれに。という名前が付けられてmrBunny0-5います。
  2. mrBunnyシンボルはcom.mrBunnyクラスにリンクされています。
  3. このクラスには、randomPlay();のアニメーション時間をランダム化するために使用するメソッドがありmrBunnyます。
  4. クラスのあるステージにもボタンがありますstageBtn

パッケージcom{

import flash.display.SimpleButton;
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.MouseEvent;

public class startBtn extends SimpleButton {

    //Constructor
    public function startBtn() {
        this.addEventListener(MouseEvent.CLICK, startClick);
    }

    public function startClick(event:MouseEvent):void {

      mrBunny0.randomPlay();
      mrBunny1.randomPlay();
      mrBunny2.randomPlay();
      mrBunny3.randomPlay();
      mrBunny4.randomPlay();
      mrBunny5.randomPlay();

    }
}

}

startBtnを使用してmrBunny#インスタンスのアニメーションを開始できるようにしたいと思います。

私の知る限り、授業やOOPの状況を十分に把握していません。

4

2 に答える 2

2

(うさぎは可愛すぎてこの質問を渡すことができなかったので、ここに行きます...)

OOPについて、コードで考慮すべきいくつかの問題領域があります。それらについて少し説明しようと思います。

パッケージ名:

パッケージ名は、クラスを一意に識別するために付けられています。StringUtilsクラスを持つサードパーティライブラリを使用している場合の状況を考慮してください。また、StringUtilsクラスを自分で持っていることもあります。それらをどのように作業フォルダに保存しますか?コードでそれらのそれぞれにどのように対処しますか?

パッケージは、その名前が示すように、クラスをグループ化するメカニズムを提供します。したがって、クラスを参照するときは、クラスをとしてcom.joemidi.utils.StringUtils、他のクラスをとしてアドレス指定することができますcom.someoneelse.utils.StringUtils。パッケージ名は、フォルダ構造を反映している限り、任意の名前にすることができます。ただし、業界標準として、一意であることが保証されているため、パッケージ名にURLを使用します。comこれが、多くのパッケージに見られる理由です。あなたの状況では、これに従ってパッケージ(およびフォルダ構造)を再構築する方が良いでしょう。

IDEからのステージインスタンス:

Flash IDEでインスタンスを作成するときは、インスタンスを配置した場所と、コードがインスタンスを認識しているかどうかを覚えておく必要があります。@weltraumpiratが言ったように、バニーはあなたのstartBtnのにはありません。あなたがやろうとしていることをする適切な方法はこれです:

Main:
    + contains the bunnies.
    + listens to startButton for MouseEvent.CLICK
    + when startButton is clicked, manipulates the bunnies.

そうは言っても、別の問題があることに気づきました。

インスタンス名に依存しないでください:

Flash IDEではなく、コードでバニーをインスタンス化(つまり、新しいものを作成)する必要があります。中央の変数からそれらにアクセスします。例えば:

public class Main extends MovieClip {

    var bunnies:Array = new Array();

    public function Main() {
        createBunnies(7);
        startButton.addEventListener(MouseEvent.CLICK, onStartClicked)
    }

    protected function createBunnies(bunnyCount:int):void {
        for (var i:int = 0; i < bunnyCount; i++) {
            var bunny:Bunny = new Bunny();
            addChild(bunny);
            // configure bunny.x, bunny.y, etc. here.
            bunnies.push(bunny);
        };
    }

    protected function onStartClicked(e:MouseEvent) {
        for (var i:int = 0; i < bunnies.length; i++) {
            var bunny:Bunny = bunnies[i];
            bunnies.randomPlay();
        };
    }

ここでは、バニーに付けたインスタンス名に拘束されなくなりました。(もちろん、ここではステージ構造を想定しています。)このように、バニーはその上のコードからより「独立」しています。また、ホルダースプライトを使用してそこからバニーを追跡することもできますが、現時点では少し進んでいる可能性があります。

これらがあなたに役立つことを願っています。このテーマについて真剣に考えている場合は、OOPについて、特にそれが必要な理由と、それに関する重要な用語(デカップリング、継承、カプセル化など)について詳しく読むことをお勧めします。

于 2011-02-23T13:06:22.947 に答える
0

startBtnにはメンバーmrBunny0-5がありませんが、メインのタイムラインにはあります。root.mrBunny0代わりに試してください。

于 2011-02-23T12:03:50.153 に答える