Clashing Enemies

Started by
4 comments, last by Trienco 11 years, 2 months ago

Hi, many of you might have been following the process of my game, and I have got very very far. I encounter a problem though. I have multiple enemies that chase the player around the screen. (2D seen from above). A big problem that I have encountered is that as you walk past them in circles, they all start coming together, and as there is no collision, they all group onto the same point and are seen as one, they all get to the same X and Y if you don't get me. Now, I can perfectly check collision, either pixel circle, bounding box or polygonal, but i don't know what to do if the collision returns true... do I make it go upwards, downwards..... Is there a way to simple revert the movement of the last frame?

P.S: SFML

Advertisement
If you are not simulating rigid physics, then you can simply calculate a new position for an object, test to see if there will be a collision at that spot, and don't move it or move it in a different direction if there is a collision. No need to undo a step if you just never make the step in the first place.

If you are simulating rigid physics, then collision resolution is typically handled by applying incremental forces lateral to a separation axis, to iteratively push the entities apart. This correction is applied separately from any other physical forces (rebounding, etc...) that might be applied as part of the collision.

One simple solution to this is to use the requisite steering behavior - most of this sort of simple AI/pathing task is simply expressed as some combination of basic steering behaviours.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

My typical responses for this is to look at adding a 2d physic engine. It handles all these issues for you and they are incredibly easy to add to a game. I like chipmunk-physics, bur others like box2d.

My Gamedev Journal: 2D Game Making, the Easy Way

---(Old Blog, still has good info): 2dGameMaking
-----
"No one ever posts on that message board; it's too crowded." - Yoga Berra (sorta)

Circle vs circle collision resolution is easy. If you know two circles intersect, you can resolve based on the difference of their radii. Resolution direction is simply the vector from the center of one circle to the other.

That should be enough to get you started!

I'd very much go with the AI approach, because trying to solve this with physics in a tight crowd sounds like an awful mess. Yes, it's trivial to have _two_ objects and resolve their collision by moving one to the side. Except that in a crowd it might then hit someone else and you end up with a recursion that takes forever to resolve. The only solution would then be "if your movement would cause a collision, don't try to move at all".

f@dzhttp://festini.device-zero.de

This topic is closed to new replies.

Advertisement