2012-10-04 29 views
0

這是一個非常基本的問題(我對AS3有點新鮮),但是你在AS3中導入了什麼以允許「addEventListener」?我犯了錯誤,學習如何在時間軸上進行編程,現在這種跳躍很棘手。在AS3中導入什麼以允許「addEventListener」?

編輯:這裏是我的代碼(有無數的錯誤,但我只是想解決的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; 
        } 
       } 
      } 
     } 
    } 

} 

} 

回答

0

您需要:

import flash.events.EventDispatcher; 

reference

對於例如,如果你擴展EventDispatcher這樣的:

public class MyClass extends EventDispatcher { 
... 
} 

然後你就可以在MyClass類的任何實例使用addEventListener()

1

要創建一個可以分派事件的類,然後擴展flash.events.EventDispatcher。這將在作爲該類實例的對象上提供addEventListenerdispatchEvent方法。對於監聽事件的對象,您不需要導入任何內容。

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"); 
} 
0

您需要進口約使用事件的API。如果您打算使用EnterFrame事件,那麼您應該導入flash.Events.Event。因爲EnterFrame事件編碼在Event API中。欲瞭解更多詳情,請訪問ADOBE Documentation about Events

如果你想初始化一旦它被添加到舞臺上,你可以利用這個

this.addEventListener(Event.ADDED_TO_STAGE, onAdded); 

另外,在你的代碼,你被宣佈爲靜態函數裏面的一些變量。當您嘗試訪問該功能之外的這些變量時,您將會看到錯誤。如果你想對所有函數都有通用的話,那麼將其聲明爲全局變量。

我不知道你爲什麼使用靜態函數。如果可能的話,儘量利用上述的監聽器來避免這種情況下的靜態函數調用。

0

由於TheGameItself延伸MovieClip,你不需要包含任何東西 - MovieClip已經延伸EventDispatcher。你的問題在於startit()是一個靜態函數,而addEventListener()是一個對象函數。

startIt()中刪除靜態,創建TheGameItself的實例,它應該沒問題。

E.g.(在你的主類):

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

在一個有點相關的說明,myMousescore等等都將是局部變量的startIt()功能,所以當函數退出

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); 

這跟它的監聽器添加到當前實例,但你申報這個函數是靜態的,它不允許你這樣做。

不要使用靜態引用來解決您的問題。

相關問題