Gabriel Meono
Gabriel Meono

Reputation: 1000

AS3 > Mouse Event not happening?

Background: Trying to make a ball appear in the same location the mouse is positioned. Using Box2D Library. Working on a class file (.as)

Issue: The mouse event does not work (I click but nothing happens) . No output errors whatsoever. :(

Mouse Event EDIT: Marty Wallace corrected my code, but still the mouse event won't work.

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

Full Code:

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

        }
    }

}

Upvotes: 3

Views: 357

Answers (2)

Marty
Marty

Reputation: 39458

EDIT by Gabriel Meono:

QuickBOX2D uses meters instead of pixels. To work with pixels with this library, one must divide each number by 30. I simply added a "/3" to the mouseX / mouseY and it worked! I updated your code, thanks!

Either do this (recommended):

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

Or this (not so recommended, but closer to your code):

/**
 * 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();
        }
    );
}

Upvotes: 2

a.b
a.b

Reputation: 9574

Try declaring the clicked function outside the MouseTest function.

Upvotes: 2

Related Questions