2011-12-18 99 views
2

当我把这个的addEventListener我得到这个“类型强制失败的消息”AS3:类型强制失败:无法flash.events转换为flash.events.MouseEvent

addEventListener(Event.ENTER_FRAME,onEnterFrm); 

位于鼠标事件上方:

 addEventListener(Event.ENTER_FRAME,onEnterFrm); 
     stage.addEventListener(MouseEvent.CLICK, _clicked); 

我看不到导致错误的中间关系。

//被点击的功能

  private function _clicked(e:MouseEvent) 
    { 
     gameBall = sim.addCircle({x:(mouseX/30), y:(1), radius:0.25, density:5}); 
    } 

// OnEnterFrn功能

 private function onEnterFrm(e:MouseEvent):void 
    {   
     if (gameBall && gameBall.body.IsSleeping()) 
      { 
       gameBall.destroy(); 
       gameBall = null; 
      } 
    } 

如果我打运行,仿真作品,但laggy运行时弹出消息

TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::[email protected] to flash.events.MouseEvent. 

全码:

package { 

import flash.display.MovieClip; 
import com.actionsnippet.qbox.*; 
import flash.events.MouseEvent; 
import flash.events.Event; 

[SWF(width = 600, height = 600, frameRate = 60)] 

public class LuckyHit extends MovieClip { 

    public var sim:QuickBox2D; 
    var winBox:QuickObject; 
    var looseBox:QuickObject; 
    var gameBall:QuickObject; 
    var simContacts:QuickContacts; 

    /** 
    * Constructor 
    */ 
    public function LuckyHit() 
    { 
     sim = new QuickBox2D(this); 
     simContacts = sim.addContactListener(); 
     simContacts.addEventListener(QuickContacts.ADD, contactListener); 
     //sim.createStageWalls(); 
     winBox = sim.addBox({x:5,y:600/30, width:300/30, height:10/30, density:0}); 
     looseBox = sim.addBox({x:15,y:600/30, width:300/30, height:10/30, density:0}); 


     //buscar fuerza de rebote. 
     // make obstacles 
     for (var i:int = 0; i<(stage.stageWidth/50); i++){ 
     //End 
      sim.addCircle({x:1 + i * 1.5, y:16, radius:0.1, density:0}); 
      sim.addCircle({x:2 + i * 1.5, y:15, radius:0.1, density:0}); 

     //Mid End 

       sim.addCircle({x:0 + i * 2, y:14, radius:0.1, density:0}); 
       sim.addCircle({x:0 + i * 2, y:13, radius:0.1, density:0}); 
       sim.addCircle({x:0 + i * 2, y:12, radius:0.1, density:0}); 
       sim.addCircle({x:0 + i * 2, y:11, radius:0.1, density:0}); 
       sim.addCircle({x:0 + i * 2, y:10, radius:0.1, density:0}); 


     //Middle Start 
      sim.addCircle({x:0 + i * 1.5, y:09, radius:0.1, density:0}); 
      sim.addCircle({x:1 + i * 1.5, y:08, radius:0.1, density:0}); 
      sim.addCircle({x:0 + i * 1.5, y:07, radius:0.1, density:0}); 
      sim.addCircle({x:1 + i * 1.5, y:06, radius:0.1, density:0}); 

     } 
     addEventListener(Event.ENTER_FRAME,onEnterFrm); 
     stage.addEventListener(MouseEvent.CLICK, _clicked); 
     sim.start(); 



    } 

    /** 
    * .. 
    * @param e MouseEvent.CLICK 
    */ 
    private function _clicked(e:MouseEvent) 
    { 
     gameBall = sim.addCircle({x:(mouseX/30), y:(1), radius:0.25, density:5}); 
    } 

    private function onEnterFrm(e:MouseEvent):void 
    {   
     if (gameBall && gameBall.body.IsSleeping()) 
      { 
       gameBall.destroy(); 
       gameBall = null; 
      } 
    } 

    private function contactListener(e:Event) 
    { 
     if (simContacts.isCurrentContact(winBox,gameBall)) 
     { 
      // Won. 
      trace ('You won!'); 
     } 
    } 


} 

}

回答

5

您的onEnterFrm函数正在寻找接收事件,而不是MouseEvent。

变化

private function onEnterFrm(e:MouseEvent):void 

private function onEnterFrm(e:Event):void 

目前,您的onEnterFrm越来越它想要的MouseEvent事件。

1

事件(Event.ENTER_FRAME)不是的MouseEvent的一个亚型。因此转换错误。更改您的参数类型:onEnterFrm(e:Event)

相关问题