0

これは非常に基本的な質問です(私はAS3に少し慣れていません)が、「addEventListener」を許可するためにAS3に何をインポートしますか?私はタイムラインでプログラミングする方法を学ぶのを間違えました、そして今、このジャンプオーバーはちょっとトリッキーです。

編集:これが私のコードです(無数のエラーがありますが、addEventListenerのものを修正したいだけです):

package 
{
    import flash.display.*;
    import flash.events.*;
import flash.utils.*;

public class TheGameItself extends MovieClip
{

    public static function startit(stage)
    {
        addEventListener(Event.ENTER_FRAME, movecat);
        addEventListener(Event.ENTER_FRAME, spawnanimal);
        var myDelay:Timer = new Timer(100);
        myDelay.addEventListener(TimerEvent.TIMER, showMessage);
        myDelay.start();
        var myMouse = 0;
        var speed = 1;
        var wave = 1;
        var score = 0;
        var rnum = 0;
        var moveornot = false;
    }
    function showMessage(event:TimerEvent):void
    {
        moveornot = true;
    }

    function movecat(event)
    {
        if ((mouseY > 40) && (mouseY < 330))
        {
            cat.y = mouseY;
        }
    }
    function spawnanimal(event)
    {
        var rnum = Math.floor(Math.random() * ((100 / wave) - 1 + 1)) + 1;
        if (rnum == 5)
        {
            myMouse = new mouse();
            myMouse.x = 0;
            myMouse.y = Math.floor(Math.random() * (350 - 45 + 1)) + 45;
            addChild(myMouse);
            for (var i:int = 0; i < 10000; i++)
            {
                if (moveornot == true)
                {
                    myMouse[i].y +=  speed * 100;
                    moveornot == false;
                    if ((myMouse.x == 500) || (myMouse.hitTestObject(cat)))
                    {
                        myMouse.visible = false;
                    }
                }
            }
        }
    }

}

}
4

5 に答える 5

1

イベントをディスパッチできるクラスを作成するには、flash.events.EventDispatcher. これにより、そのクラスのインスタンスであるオブジェクトにメソッドaddEventListenerとメソッドが提供されます。dispatchEventイベントをリッスンするオブジェクトの場合、何もインポートする必要はありません。

com/foo/MyClass.as:

package com.foo {
   import flash.events.EventDispatcher;

   public class MyClass extends EventDispatcher
   {

   }

   public function doSomething():void
   {
       dispatchEvent( new Event("eventType"));
   } 
}

他の場所:

import com.foo.MyClass;

var obj:MyClass = new MyClass();
obj.addEventListener("eventType", onEvent);

obj.doSomething();

function onEvent(event:Event):void
{
    trace("the event happened");
}
于 2012-10-04T01:13:17.333 に答える
1

静的関数を介してオブジェクトのインスタンスにアクセスすることはできません。
次のコードで:

public static function startit(stage)
{
  addEventListener(Event.ENTER_FRAME, movecat);
  addEventListener(Event.ENTER_FRAME, spawnanimal);
  var myDelay:Timer = new Timer(100);
}

することによって:

addEventListener(Event.ENTER_FRAME, movecat);

あなたは本質的にやっています:

this.addEventListener(Event.ENTER_FRAME, movecat);

これは、リスナーを現在のインスタンス化に追加すると言っていますが、関数を静的として宣言したため、それを実行できません。

問題を解決するには、静的参照を廃止してください。

于 2012-10-04T13:22:54.640 に答える
0

使用しようとしているイベントのAPIをインポートする必要があります。イベントを使用するEnterFrame場合は、をインポートする必要がありますflash.Events.Event。APIEnterFrameでイベントがコーディングされているためです。Event詳細については、イベントに関するアドビのドキュメントをご覧ください。

ステージに追加されたら初期化する場合は、これを利用できます

 this.addEventListener(Event.ADDED_TO_STAGE, onAdded);

また、あなたのコードでは、静的関数内でいくつかの変数が宣言されています。その関数の外部でこれらの変数にアクセスしようとすると、エラーが発生します。すべての関数に共通にする場合は、グローバル変数として宣言します。

なぜ静的関数を使用したのかわかりません。可能であれば、この場合の静的関数呼び出しを回避するために、上記のリスナーを利用するようにしてください。

于 2012-10-04T05:19:37.560 に答える
0

必要なもの:

import flash.events.EventDispatcher;

参考資料を参照してください。

たとえば、次のように拡張する場合EventDispatcher

public class MyClass extends EventDispatcher {
...
}

その後、クラスaddEventListener()の任意のインスタンスで使用できます。MyClass

于 2012-10-04T01:09:26.660 に答える
0

TheGameItselfextendsとしてMovieClip、何も含める必要はありません。MovieClipすでに extendsEventDispatcherです。ここでの問題は、それstartit()が静的関数でaddEventListener()あり、オブジェクト関数であることです。

からスタティックを削除し、startIt()のインスタンスを作成しますTheGameItself。これで問題ありません。

例(メインクラスで):

var game:TheGameItself = new TheGameItself; // hold a reference to this somewhere, otherwise it'll be gc'd
game.startIt();

多少関連するメモではmyMousescoreなどはすべて関数のローカル変数にstartIt()なるため、関数が終了すると存在しません

于 2012-10-04T12:53:36.327 に答える