Actionscript 3 :: HitTestPoint() Not Testing For Collisions Correctly?
Feb 22, 2012
I'm writing a game and it has enemies and bullets. When a bullet hits an enemy, I want to destroy the enemy and the bullet. I'm using the hitTestPoint() method to test if a bullet has hit an enemy. Here's the code in my game loop:
[Code]...
The problem is, hitTestPoint only returns true if both the x and y values of bullet and enemy are the same, rather than if the two movie clips overlap. This leads to bullets going right through enemies but it not registering as a hit. Perhaps I'm missing a bounding box?
Is there a way I can make hitTestPoint return true if the bullet hits the enemy at all rather than only if the bullet and enemy co-ordinates are the same?
I'm writing a general physics engine and I've come across the problem I've always had with flash. So far all my hittests in my physics engine have been calculated by using x/y coordinates and the 2 objects dimensions. This has worked fine for the objects so far because they have been very square-ish and do not rotated. How ever now I am trying to detect if 2 rotated objects are hitting. How can I do this ? I would really like to avoid using any .hitTest() functions.
I have been desperately searching for a way to do pixel perfect collisions, and for someone to explain it to me in detail. explain the code in the .fla file, posted by the Canadian in the frequently asked questions thread on bitmapData hit testing:
[Code]...
after looking through the help files, i must admit they are terribly vague. All you are doing is checking if _alpha is above a certain amount. With movieClips you would use 0->100 but with this hittest you have to use 0->255 (0x00->0xFF)so an _alpha of 50 would correspond to approx 128 (0x80). Nearly all the time you could just use 1 as a hittest parameter so you are checking for any hit at all but maybe you have a shadow in a mc layer and you do not want to check a hit. This is when you might be able to use your threshold parameter. In other words, the hit test will only react to parts of the bitmap which have a greater or equal alpha than the alpha threshold, mostly useful for a shadow.
I'm working on a game (my first) where objects touching is A-Ok, but I want to detect overlapping collisions ahead of time, prevent them, and react. This seems like a pretty basic and common thing, such as a character walking along a platform (even though by touching it it's 'colliding'), but of all the many many collision detection tutorials I've looked at, none of them have covered this case--they all assume that objects touching should be indistinguishable from overlapping. I've been using a workaround of a slightly smaller hitbox to use for collisions, but it has issues of it's own that make it not so good. So basically I'm looking to redo my CD from scratch.
So, like I said, I'd like to know how to differentiate between 'touching' collisions and overlapping collisions, but even a way to keep touching collisions from triggering entirely would work.
Which one is more efficient? Or is there even a noticeable difference? I did tests of a circle moving closer to a square and stopping when hitTestPoint returns true. The square was at 0 and the circle was at 500. My first test I did using hitTestPoint the entire time, my second test I did by checking the distance (Pythagorean Theorem way) and if it's below 50 then check with hitTestPoint.
I compared the FPS of each test but they were the same at 30 FPS with 200 circles and at 11-12 FPS with 500 circles. I thought the first test would be slower because I was testing every pixel the entire time while the second test I was only calculating the distance for the most part before testing every pixel.
I basically need to scale an object up when the user rollsover the button which I have created dynamically already and I need to make sure the object is fully scaled up before I can allow the user to scale it back down again.Ive tried putting 2 tweens (x and yscale) into a function but not sure how to check if the tweens have finished. Im assuming if I check the function is complete it wont take into consideration the tweens may still be running.
I am trying to apply code to all instances of the enemy that appear randomly but I've run into problems. Firstly the enemies appear when you press space and the collision doesn't seem to work. I kind of thought you have to push the enemies into an array and hitTest that array right?
Actionscript Code: stop(); var ship_speed:Number = 10;var lazer_speed:Number = 20; var enemy_speed:Number = 8;var lazertimer:Number = 0; var basicenemy:Number = 0;var enemytime:Number = 0; var enID:Number = 0; var enemies:Array =[]onEnterFrame = function() { [Code] .....
I've been using flash for a long time. I know some stuff, but not enough for what I am trying to do. Basically, I am making a little car minigame of a car in a city. This is my engine on the car:
I am fine with all of it but the collisions, as the car will only bounce when the registration point of the car collides with 'wall', so it looks all funny and that and the car goes into any thing collable half way then bounces back, and occasionally gets stuck in the wall. Reall annoying. Ive tried fixing it but whenever I remove the hittest parts the car wont even move or turn. How to get the wall collides with the car (27.7 x 13) and not the registration. I need a strong engine which works with curves as well, and requires me just putting the code into the car, but if I have to put it into the walls/frame i suppose its okay, but theres no way im going through every single building and that.
Also, it would be cool if: -An engine where when reversing the steering is reversed (like irl) -The car doesnt bounce backwards when driving at a wall at an angle, but slides against it (like irl).
I'm trying to create a air-hockey game, in flash using AS3.At the moment, I am using an enter frame function to check the positioning of the 3 objects, 2 paddles and a ball, then it checks to see if they are in contact, if they are it then initiates a detect collision function.However it's checking every time the frame is loaded, and at 25 fps, this is quite a lot and the app lags.
I'm having a bit of trouble with psuedo 3d collisions using spheres. I'm using _xscale and _yscale to emulate the z-axis (no horizon point), and am having trouble determining the distance between the objects on the z-axis based upon their relative scales.I'm not concerned at this moment with creating new vectors based upon hit angles, just getting the z-index collision detection working. (I also need to tweak the code to prevent trapping, so much todo)Here's the code, the issue is how do I determine the correct value for the z-axis in the hittest?note-this only works when I publish in flash6 when using mx2004, the collision detection doesn't work at all when published for flash7?[code]
I can sorted Vertical and Horizontal collision. But I'm having trouble with collisions at an angle, e.g. a 45 degree ramp. My cousin says I have to work out the trajectory angle from the Xv and Yv but the closest I can get is:PHP Code:
I've been experimenting with circle vs. circle collisons. Ive been using the code below to check for collisions and seperate the objects.It works just fine, except in conditions where more than two circles are touching at the same time. For example, if three circles or more are colliding at the same time, they can sometimes overlap and then struggle to separate.
I think I know why this is happening. The code loops through the object array and checks for a collision between each object one at a time and alters their positions and velocities. The problem is that if it finds a collision between objects at the end of the array, the positions of the objects could be changed in such a way that they cause an overlap with an object that was checked earlier, for which no collision was detected. This new collision then goes undetected and this flaw is amplified when the loop runs again.
Code: function circleCollision(circleOne:MovieClip, circleTwo:MovieClip):void { //Find radius, x and y positions of circleOne var circleOne_Radius = circleOne.width/2; var circleOne_X = circleOne.x;
Im trying to make a breakout clone which I have working however I cant figure out how to test which side of the blocks the ball hits. I woul like to have a different reaction if it collides with the right side than if it hit the bottom etc.
I'm trying to make a simple platform shooter game, although I just cant seem to get jumping right. hitTestObject works fine, but hitTestPoint doesn't seem to work at all.[code]on that last bit, if I use hitTestObject instead, it works fine, but when i use hitTestPoint, I just fall through the ground as if nothing is there.and I want to use hitTestPoint so I can make floating blocks
I know you use the HitTest function to check for collisions, but how would I do that the moment a movie clip is dynamically created. So the moment the clip is created it would check if it is overlapping another clip. Also, does it matter if the clips are at different depths?
I'm new to flash and programming in general but am learning it to make games. I'm currently messing around with hit detection and its not to hard to test in the game tick ( fired from onEnterFrame). What I'm wondering is if it would be possible / useful to create a custom event that i can listen for. And make the eventListener hear when a collision happens. Also would this be better or worse for the cpu than testing the collisions of lots of enemies on a screen?
I'm working with AS2 and running into a problem when loading a bunch of SWFs that share classes. I have a main SWF that loads several child swfs. The main and the children often share some core classes. The issue is that these SWFs were not all created at the same time, and some of the core classes have changed between SWF compilations. It appears that the first instance of any class to load gets used for all following references to that class - regardless of which version of that class was used in compiling the following SWFs.In AS3, the ApplicationDomain can be set to circumvent this issue, is there any that can be done in AS2 to avoid this collision/overwriting?
I have a movie clip 'Player'.I want to divide the mc into two equal halves p1 and p2 for collision detection (p1 and p2 are joined together physically).i.e. if ball collides with p1, i do something and if ball collides with p2, i do something else.But i dont want to create 2 different players p1 and p2 for that.i want to have something like p1 and p2 are a single movie clip 'Player', but still can be accessed separately.
I am looking to create a drawing component on a site. that should be straight forward.the issue lies with the fact that I would want to detect any collisions say (4) and then attach MC's to the collision points.in a nut shell.can I get a trace of the drawn path on the stage?????from there I guess I can detect any positional similarities?
I know how to do various types of collisions and also know how to scroll a background. I'm sort of having trouble putting two and two together for how a game like stunt pilot knows if a plane has gone through a ring vs hitting it... It's for an iphone game (objective c w/ sparrow framework) just I figured it would be easier to figure out in flash then I can bring that knowledge over to my iPhone
I'm probably missing something about which parameters I'm supposed to be passing.Here is the code:In the first class (the hitting object belongs to this class):[code]It always traces "Didn't work" when I drag the instance of the first class over the instance of the second class. What am I not understanding about the hitTestPoint function?
Why does hitTestPoint isn't working on DisplayObjects that has cacheAsBitmap set to true?It does work, but it takes the Whole rectangle of Display object, not respecting wheather or not pixel is transparent or not (transparent pixels return true after hiTestPoint)
im trying to create a menu that drops down when you roll over it. however I cant get hittestPoint to work.I have a movieClip on my stage with a class attached. Inside this movieClip is another movieClip with an instance name of "hitBox"
Anyone know why "hitTestPoint(character.x, character,y, true)" would be hit testing off the origin point in the center of the character, and not the whole shape??This is my code from my document class. There's a custom splat class in there, but don't worry about that. This code is inside 2(1 nested) for loops.[code]
I have been using hitTestPoint so far with mouse_move listener, which means if the mouse was stationary over target area when that listener was added the desired action wont happen until mouse moves.
Basically I have this window in the middle of the stage where loader loads pictures and when picture loads if the mouse moves over that window some other stuff appears.The listener is added after each picture is added and if the mouse was stationary above the loader when that happened it doesnt trigger hitTestPoint (until mouse moves).
I have seen somewhere this same effect, but it worked even if the mouse was stationary above the image when image appeared.
I have the beginning of a game that looks a bit like Asteroids. The first version of the game worked, but was very code-heavy (every object was individually coded) so I decided to move the bulk of the code to document classes.
I wanted to have certain objects interact with eachother (bullets with asteroids, asteroids with ship, etc.) but they can't find eachother. Also, as you may notice in like a second from now, the whole code is handled by a single document. I guess I should do something about that as well?
its me again I posted destroying MovieClips a few days ago now I'm working on the same project (you can probably tell I'm a beginner) and a new problem occurred I need a way to test if the EvilSlingFuzit collides with a rock, but there is more than one rock. I tried to create an array for the rock, but the rocks are created by the SlingFuzit so the Sling fuzit would have to do something like this: