2011-12-01 80 views
3

背景:試圖讓球出現在鼠標所在的相同位置。使用Box2D庫。處理類文件(.as)AS3>鼠標事件沒有發生?

問題:鼠標事件不起作用(我單擊但沒有任何反應)。沒有任何輸出錯誤。 :(

鼠標事件編輯:馬蒂·華萊士糾正了我的代碼,但還是鼠標事件將無法正常工作

private function _clicked(e:MouseEvent) 
      { 
       sim.addCircle({x:mouseX, y:mouseY, radius:0.25, density:5}); 
       sim.start(); 

全碼:

package { 

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

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

    public class MouseTest extends MovieClip { 

     public var sim:QuickBox2D; 

     /** 
     * Constructor 
     */ 
     public function MouseTest() 
     { 
      sim = new QuickBox2D(this); 
      sim.createStageWalls(); 

      addEventListener(MouseEvent.CLICK, _clicked); 
     } 

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

     } 
    } 

} 

回答

2

編輯加布裏埃爾Meono:

QuickBOX2D使用米而不是像素。要使用此庫處理像素,必須將每個數字除以30.我簡單地將"/3"添加到mouseX/mouseY,它工作正常! 我更新了你的代碼,謝謝!

做這一點(推薦):

public var sim:QuickBox2D; 

/** 
* Constructor 
*/ 
public function MouseTest() 
{ 
    sim = new QuickBox2D(this); 
    sim.createStageWalls(); 

    addEventListener(MouseEvent.CLICK, _clicked); 
} 

/** 
* .. 
* @param e MouseEvent.CLICK 
*/ 
private function _clicked(e:MouseEvent) 
{ 
    sim.addCircle({x:(mouseX/30), y:(mouseY/30), density:5}); 
    sim.start(); 
} 

還是這個(不那麼推薦,而是更接近你的代碼):

/** 
* Constructor 
*/ 
public function MouseTest() 
{ 
    var sim:QuickBox2D = new QuickBox2D(this); 
    sim.createStageWalls(); 

    addEventListener(
     MouseEvent.CLICK, 
     function(e:MouseEvent):void 
     { 
      sim.addCircle({x:(mouseX/30), y:(mouseY/30), radius:0.25, density:5}); 
      sim.start(); 
     } 
    ); 
} 
+0

QuickBOX2D使用米而不是像素。要使用此庫處理像素,必須將每個數字除以30.我只是向鼠標X /鼠標Y添加了「/ 30」,並且它工作正常!我更新了你的代碼,謝謝! –

2

嘗試聲明clicked功能在MouseTest功能之外

+0

'sim'需要被聲明爲也是班級成員。 – Matthias