2011-03-29 105 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