2

I have a sprite that I can drag around on screen. I want to be able to drag this sprite into an area (box). As it stands now I can only drop the sprite into the box, but when I drag it directly inn, the the program crashes.

*Im developing in FlashDevelop but windows gave me av option to debug in VS.

I debugged in VS and got this ERROR:

Unhandled exception at 0x00ACCEE9 in Proj.exe: 0xC0000005: Access violation reading location 0x00000008.

Relevant code:

class Drag extends FlxGroup {

var mouseJoint:DistanceJoint;

public inline function registerPhysSprite(spr:FlxNapeSprite)
{
    MouseEventManager.add(spr, createMouseJoint);

}

function createMouseJoint(spr:FlxSprite)
{

    var body:Body = cast(spr, FlxNapeSprite).body;

    mouseJoint = new DistanceJoint(FlxNapeState.space.world, body, new Vec2(FlxG.mouse.x, FlxG.mouse.y),
                            body.worldPointToLocal(new Vec2(FlxG.mouse.x, FlxG.mouse.y)), 0, 0);

    mouseJoint.space = FlxNapeState.space;
}


override public function update():Void
{
    super.update();

    if (mouseJoint != null)
    {
        mouseJoint.anchor1 = new Vec2(FlxG.mouse.x, FlxG.mouse.y);

        if (FlxG.mouse.justReleased)
        {
            mouseJoint.space = null;
        }
    }

 }

}

class PlayState extends FlxNapeState {
    override public function create()
    {
    super.create();
    bgColor = FlxColor.BLACK;
    napeDebugEnabled = true;

    var light = new Light(10, 10);
    var box = new Box(100, 100);
    var drag:Drag;

    createWalls(1, 1, 1024, 768, 10, new Material(1, 1, 2, 1, 0.001));

    add(light);
    add(box);

    drag = new Drag();
    add(drag);                                                         
    drag.registerPhysSprite(light);

    light.body.velocity.y = 200;

    FlxNapeState.space.listeners.add(new InteractionListener(
        CbEvent.BEGIN, 
        InteractionType.COLLISION, 
        Light.CB_TYPE,
        Box.CB_TYPE,
        collideLightBox));
    }

    function collideLightBox(callback:InteractionCallback)
    {
        var light:Light = cast callback.int1.castBody.userData.sprite;
        light.kill();
    }
}

class Light extends FlxNapeSprite {
    public static var CB_TYPE(default, null) = new CbType();

    public function new(x:Float, y:Float)
    {
        super(x, y);
        makeGraphic(10, 10, FlxColor.TRANSPARENT);
        var radius = 5;
        drawCircle(5, 5, radius, FlxColor.WHITE);
        createCircularBody(radius);
        body.cbTypes.add(CB_TYPE);

        body.userData.sprite = this;
    }
}

class Box extends FlxNapeSprite {
    public static var CB_TYPE(default, null) = new CbType();

    public function new(x:Float, y:Float)
    {
        super(x, y);
        makeGraphic(100, 50, FlxColor.GREEN);
        createRectangularBody(width, height);
        body.cbTypes.add(CB_TYPE);
        body.type = BodyType.STATIC;
    }
}
Gama11
  • 31,714
  • 9
  • 78
  • 100
ibliso
  • 33
  • 4
  • Most likely you are dereferencing a null pointer. – drescherjm Apr 29 '15 at 15:42
  • Turn on break on access violations in your Debug->Exceptions menu. Then when it breaks walk up the callstack to the line of your code that causes the access violation. – drescherjm Apr 29 '15 at 15:44
  • I think I was unclear in my OP. I'm developing in FlashDevelop but windows gave me av option to debug in VS, so that is where I found the specific error. I am struggling to find an option to break access violations in flash develop. – ibliso Apr 29 '15 at 16:49

1 Answers1

0

If you're possibly accessing a null pointer, consider the answer given in this question: Why is this Haxe try-catch block still crashing, when using Release mode for C++ target

That way you can turn on null pointer checks in hxcpp so you can get better debug information.

Also, if you're trying to debug hxcpp directly in FlashDevelop (step-through and all that), that feature isn't released yet, but I spoke with the team recently and they're working on it.

larsiusprime
  • 935
  • 6
  • 14