Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon.

Pages: 1-

AS3 Collision Detection

Name: Baird !ATI.GearS. 2012-12-18 0:37

I'm working on a game in AS3 for my Programming IV class. Right now I specifically am developing basic enemy AI. I figured first thing first, I need to check that the enemy has Line of Sight.

I'm drawing a line between the enemy and the play and checking to see if anything collides with the wall.

Flash has Object.hitTestObject(Object) which returns a boolean, but I can't use this because it doesn't use the actual graphic, it uses a bounding box that is a square around the object.

Does anyone know of a quick and simple implementation I can use?

Here's my NPC code that Enemy will eventually extend:

[code]
package  {
   
    import flash.display.MovieClip;
    import flash.events.*;
    import flash.display.Stage;
    import flash.display.Shape;
   
   
    public class NPC extends Character {
        var target:Character = null;
        var screen:Stage = null;
        var l:Shape = new Shape();
        var wall:Wall = null;
       
        public function NPC(s:Stage,g:Game,X:int,Y:int) {
            super(s,g,"NPC",X,Y);
           
            target = g.playerOne;
            wall = g.wall;
            screen = s;
            s.addEventListener(Event.ENTER_FRAME, loop);
        }
       
        public function loop(Event){
                canSeeTarget();
        }
       
        public function canSeeTarget(){
            l.graphics.clear();
            screen.addChild(l);
           
            l.graphics.lineStyle(2,009900,1);
            l.graphics.moveTo(target.x,target.y);
            l.graphics.lineTo(this.x,this.y)
           
            var wall_collision = 0;
            for (var i=1; i<=dist; i++) {
                var point_x = (x+_root.cop_patrol._x)+x*Math.cos(angle*Math.PI/180);
                point_y = (_y+_root.cop_patrol._y)+x*Math.sin(angle*Math.PI/180);
                if (_root.wall.hitTest(point_x, point_y, true)) {
                    wall_collision = 100;
                    break;
                }
            }
        }
    }
}

Name: Baird !ATI.GearS. 2012-12-18 0:38

>/g/ has code tags
>/prog/ doesn't
Okay.

Name: Anonymous 2012-12-18 0:40

>>2
XDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

>LE

>FELLOW

>/G/ENTOOMEN

REPORTIN IN FOR LE DUTY

>LLLLLLLLLLLEEEEEEEEEEEEEEEELLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL MEME QUOTES ARE SO E/G/IN /G/RO

Name: Anonymous 2012-12-18 0:42

main :: IO ()
main = putStrLn "faget" >> main

Name: Anonymous 2012-12-18 1:15

>>1
game programming

class

If don't need rotated rectangles you can use an AABB (defined by x,y,width and height), here's something I used in my latest TYPESCRIPT project.


    function is_hit(a:Rect , b:Rect): bool {
        if (a.wid == 0 || a.hei == 0 || b.wid == 0 || b.hei == 0) return false;
        var r1x1 = a.x;
        var r1x2 = a.x + a.wid;
        var r1y1 = a.y;
        var r1y2 = a.y + a.hei;

        var r2x1 = b.x;
        var r2x2 = b.x + b.wid;
        var r2y1 = b.y;
        var r2y2 = b.y + b.hei;
        return !(r1x1 > r2x2 ||
                 r2x1 > r1x2 ||
                 r1y1 > r2y2 ||
                 r2y1 > r1y2);
    }


If you need rotated rectangles, you'll want to use the SAT test for two polygons, javascript implementation here:
http://stackoverflow.com/questions/10962379/how-to-check-intersection-between-2-rotated-rectangles

Name: Anonymous 2012-12-18 5:12

>>3
>LLLLLEEEEEEEEEEELLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
>LE EGIN\GOINZIM

Name: Anonymous 2012-12-18 9:38

>>2
Who in the godliving fuck are you quoting, /g/ shitstain?

Name: Anonymous 2012-12-18 11:31

>>7
DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU DESU

Name: Anonymous 2012-12-18 14:21

>>5
Why the fuck did you have to help him, he will come back with another stupid question, or worse, brings his equally retarded friends

Name: Anonymous 2012-12-18 14:24

>>6
Because he's another ``helpful'' /g/tard.

Name: Anonymous 2012-12-18 14:43

>>10
Faggot.

Name: Anonymous 2012-12-18 14:49

>>10

this happened to be my area of expertise

:V

Name: Anonymous 2012-12-18 14:49

>>11
Not the ``mirror'' guy, but you sure are a faggot.

Name: Anonymous 2012-12-18 14:49

It's better if you write it out on paper. Staring at a glowing screen doesn't help.

When detecting collisions, check if the coordinates are filled with objects that repel your other object and return to the last location. There's a equation to deflect by angle, but I'm not posting it here. Download the packages I posted here.

http://stackoverflow.com/questions/8715592/bouncing-ball-logics
http://www.real-world-physics-problems.com/bouncing-ball-physics.html
http://www.freeactionscript.com/download/as3/simple-physics-friction-gravity/main.swf
http://www.freeactionscript.com/download-11/physics-multiple-objects-colliding.zip

Don't change these.
Name: Email:
Entire Thread Thread List