2011-03-29 102 views
0

我寫了一些代碼,是AS3。我的目標是點擊MainTimeline階段並在功能runDraw()內運行trace()。目前,MOUSE_DOWN事件永遠不會被觸發,我無法弄清楚。在AS3中沒有觸發Mouse_down事件

代碼更新

package circles 
{ 
    import flash.display.Sprite; 
    import flash.events.*; 
    import flash.geom.Point; 
    import flash.display.DisplayObjectContainer; 
    import flash.display.MovieClip; 

    public class Circles extends Sprite 
    { 
     var circCentre:Sprite = new Sprite(); 
     var circOuter:Sprite = new Sprite(); 
     var point:Sprite = new Sprite(); 

     trace("Class stuff initilized"); 

     function Circles():void 
     { 
      this.addEventListener(MouseEvent.MOUSE_DOWN, runDraw); 
      trace("Constructor done"); 
     } 

     function runDraw(e:MouseEvent):void 
     { 
      trace("runDraw(e)"); 
      // centre circle draw and add to timeline 
      circCentre.graphics.lineStyle(3, 0x000000); 
      circCentre.graphics.beginFill(0xFF6600); 
      circCentre.x = e.stageX; 
      circCentre.y = e.stageY; 
      circCentre.graphics.drawCircle(e.stageX, e.stageY, 100); 
      circCentre.graphics.endFill(); 
      this.addChild(circCentre); 
      trace("mc.addChild(circCentre)"); 

      // smaller outer circle 
      circCentre.addChild(circOuter); 
      // attach to parent; 
      circOuter.graphics.lineStyle(1, 0xDD2211); 
      circOuter.graphics.beginFill(0x66FF00); 
      circOuter.x = 200; 
      circOuter.y = e.stageY; 
      circOuter.graphics.drawCircle(200, e.stageY, 50); 
      circOuter.graphics.endFill(); 

      // the draw point; 
      circOuter.addChild(point); 
      point.graphics.moveTo(5, 0); 
      point.graphics.lineTo(5, 10); 
      point.graphics.moveTo(0, 5); 
      point.graphics.lineTo(10, 5); 
      point.x = 50; 
      point.y = 90; 
      stage.addEventListener(Event.ENTER_FRAME, rotationDraw); 
      stage.addEventListener(MouseEvent.MOUSE_UP, finish); 
     } 

     public function rotationDraw(e:Event):void 
     { 
      circCentre.rotation++; 
      circOuter.rotation++; 
     } 

     public function finish(e:MouseEvent):void 
     { 
      stage.removeEventListener(Event.ENTER_FRAME, rotationDraw); 
     } 
    } 
} 

非常感謝。

回答

1

以下工作(我修改了你的班級代碼)。

時間軸

var c:Circles = new Circles(stage); 
addChild(c); 

類文件

// removed package name for testing 
package 
{ 
    import flash.display.Sprite; 
    import flash.display.Stage; 
    import flash.events.*; 
    import flash.geom.Point; 
    import flash.display.DisplayObjectContainer; 
    import flash.display.MovieClip; 

    public class Circles extends Sprite 
    { 
     var circCentre:Sprite = new Sprite(); 
     var circOuter:Sprite = new Sprite(); 
     var point:Sprite = new Sprite(); 

     var _stage:Stage; 

     // shouldn't really have trace statements out here 
     trace("Class stuff initilized"); 

     function Circles(stage:Stage):void 
     { 
      _stage = stage; 

      _stage.addEventListener(MouseEvent.MOUSE_DOWN, runDraw); 
      trace("Constructor done"); 
     } 

     function runDraw(e:MouseEvent):void 
     { 
      trace("runDraw(e)"); 
      // centre circle draw and add to timeline 
      circCentre.graphics.lineStyle(3, 0x000000); 
      circCentre.graphics.beginFill(0xFF6600); 
      circCentre.x = e.stageX; 
      circCentre.y = e.stageY; 
      circCentre.graphics.drawCircle(e.stageX, e.stageY, 100); 
      circCentre.graphics.endFill(); 
      _stage.addChild(circCentre); 
      trace("mc.addChild(circCentre)"); 

      // smaller outer circle 
      circCentre.addChild(circOuter); 
      // attach to parent; 
      circOuter.graphics.lineStyle(1, 0xDD2211); 
      circOuter.graphics.beginFill(0x66FF00); 
      circOuter.x = 200; 
      circOuter.y = e.stageY; 
      circOuter.graphics.drawCircle(200, e.stageY, 50); 
      circOuter.graphics.endFill(); 

      // the draw point; 
      circOuter.addChild(point); 
      point.graphics.moveTo(5, 0); 
      point.graphics.lineTo(5, 10); 
      point.graphics.moveTo(0, 5); 
      point.graphics.lineTo(10, 5); 
      point.x = 50; 
      point.y = 90; 
      _stage.addEventListener(Event.ENTER_FRAME, rotationDraw); 
      _stage.addEventListener(MouseEvent.MOUSE_UP, finish); 
     } 

     public function rotationDraw(e:Event):void 
     { 
      circCentre.rotation++; 
      circOuter.rotation++; 
     } 

     public function finish(e:MouseEvent):void 
     { 
      _stage.removeEventListener(Event.ENTER_FRAME, rotationDraw); 
     } 
    } 
} 
+0

AHH!所以需要從時間線通過參考舞臺......真棒哥們,謝謝! – Alex 2011-03-30 02:48:45

+0

沒有戲劇的,我很高興它幫助 - 我喜歡這個效果順便提一下 – Chris 2011-03-30 02:50:33

+0

謝謝,它還沒有出來,還有一兩天的時間。 – Alex 2011-03-30 03:00:50

0

mc MovieClip沒有尺寸,所以MOUSE_DOWN事件無效。你需要繪製這個命中區域。試試這個:

mc.graphics.beginFill(0xFFFFFF,0); 
mc.graphics.drawRect(0,0,800,600);//change 800,600 to whatever is your stage size 
+0

我複製你的代碼到構造......仍然沒有被事件不幸分派。 – Alex 2011-03-30 00:27:03

+0

add mc.graphics.endFill();之後的drawRect只是爲了好的措施。然後addchild(mc) – Feltope 2011-03-30 00:50:31

+0

是的,所有這些,仍然沒有快樂:(當我沒有明顯的理由時,我討厭它 – Alex 2011-03-30 00:54:04