1

How do i test for collision between a Sprite and a Bitmap image with a transparent background?

I've look as much as i can for a reason why this isn't working but i cant find it.

the collision that isn't working as i expect is in the function called BridgeCollision

Please help?

        var bridgeSpriteArr:Array = new Array(bridgeArr.length);
        var bridge_BMArr:Array = new Array(bridgeArr.length);

        for ( var i:int = 0; i < bridgeArr.length; i++)
        {
            var bridgeSprite:Sprite = new Sprite();

            bridgeSprite.graphics.lineStyle(4, 0x00ff00);
            bridgeSprite.graphics.moveTo(bridgeArr[i].x, bridgeArr[i].y);

            switch (bridgeArr[i].nVector)
            {
                case 0:
                    bridgeSprite.graphics.lineTo(bridgeArr[i].x, bridgeArr[i].y + bridgeArr[i].maxRange);
                    break;
                case 1:
                    bridgeSprite.graphics.lineTo(bridgeArr[i].x - bridgeArr[i].maxRange, bridgeArr[i].y);
                    break;
                case 2:
                    bridgeSprite.graphics.lineTo(bridgeArr[i].x, bridgeArr[i].y - bridgeArr[i].maxRange);
                    break;
                case 3:
                    bridgeSprite.graphics.lineTo(bridgeArr[i].x + bridgeArr[i].maxRange, bridgeArr[i].y);
                    break;
            }

            var bridge_BMD:BitmapData = new BitmapData(bridgeSprite.width, bridgeSprite.height,true,0);

            var bridgeBounds:Rectangle = bridgeSprite.getBounds(bridgeSprite);
            var m:Matrix = new Matrix();
            m.translate(-bridgeBounds.x, -bridgeBounds.y);
            bridge_BMD.draw(bridgeSprite, m);

            var bridge_BM:Bitmap = new Bitmap(bridge_BMD);

            bridge_BMArr[i] = bridge_BM;
            bridgeSpriteArr[i] = bridgeSprite;
            Main.getStage().addChild(bridgeSprite);

        }

        var bridgeCollision:Boolean = false;
        var shipCollision:Boolean = false;

        Main.getStage().addEventListener( Event.ENTER_FRAME,  
        function bridgeCollision(e:Event):void
        {
            bridgeCollision = false;

            for (var i:int = 0; i < bridgeSpriteArr.length; i++)
            {
                if ( object1.hitTestObject(bridgeSpriteArr[i]))
                {
                    trace("hit bridge - trans");

                    if (object1_BMD.hitTest(new Point(object1.x, object1.y), 255, bridge_BMArr[i].bitmapData,
                    new Point(bridgeSpriteArr[i].x, bridgeSpriteArr[i].y),0)) // this is the collision with the problem
                    {
                        trace("hit bridge - visible");
                        bridgeCollision = true;
                    }
                }
            }
        });
Ivan Chernykh
  • 41,617
  • 13
  • 134
  • 146
Luke Bourne
  • 295
  • 2
  • 11
  • 1
    See if **[these links](https://www.google.co.uk/?gws_rd=cr&ei=nqYkUqj1Osi20QXAhoHoDQ#q=as3+pixel+collision+detection)** can help you.. Especially the first two shown. No offence if you already checked them all.. Also try against`bridgeSprite` instead of `bridgeSpriteArr[i]` as the testing object. You are testing pixels afterall. If you bitmapdata your sprites then you could try **[this](https://marcqualie.com/2010/10/pixel-perfect-collision-detection-as3)** or even **[this also](http://dougmccune.com/blog/2007/02/03/using-hittestpoint-or-hittest-on-transparent-png-images/)** – VC.One Dec 14 '14 at 10:24

0 Answers0