Two questions: Why do colliding actors overlap and why did actors scatter instead of stay aligned?
hamhose
Member Posts: 12
I created a simple scene with a large red square actor, called "Target," in the middle of the game. It's X and Y positions are constrained to the center of the screen, and it's rotation is fixed. The scene has gravity set to 100 in the X direction, but because this actor's X and Y positions are constrained, it doesn't move. I then created a second actor, a smaller white square, called "Projectile." The Target is set to collide with the Projectile. The Projectile is set to collide with the Target and also with itself. Both actors have Bounciness set to 0.
Now I have the game spawn a new instance of the Projectile every second from the right side of the game. The idea was to see what would happen as more and more Projectiles are spawned and collide with the Target, and also with each other. I expected the first Projectile to stop as it collided with the Target. Then I expected the 2nd Projectile to stop as it collided with the first Projectile, and on and on until a had a line of Projectiles piling up and extending off the right side of the screen.
It pretty much worked that way except that as more projectiles appeared, the one that was against the Target was pushed further and further INTO the Target, until the Projectiles had penetrated the Target to it's center. Only then did they become unaligned or unstable (somehow) and finally fly out of the Target and off the left side of the screen
My two questions are:
1. Why did the Projectiles penetrate the Target, rather than piling up against it? Density seems to have no effect on this behavior.
2. What finally caused the Projectiles to break formation and fly through the scene, when they should have just continued to pile up against the Target in a straight line forever?
And, yes, I am a noob. Thanks for putting up with me.
Now I have the game spawn a new instance of the Projectile every second from the right side of the game. The idea was to see what would happen as more and more Projectiles are spawned and collide with the Target, and also with each other. I expected the first Projectile to stop as it collided with the Target. Then I expected the 2nd Projectile to stop as it collided with the first Projectile, and on and on until a had a line of Projectiles piling up and extending off the right side of the screen.
It pretty much worked that way except that as more projectiles appeared, the one that was against the Target was pushed further and further INTO the Target, until the Projectiles had penetrated the Target to it's center. Only then did they become unaligned or unstable (somehow) and finally fly out of the Target and off the left side of the screen
My two questions are:
1. Why did the Projectiles penetrate the Target, rather than piling up against it? Density seems to have no effect on this behavior.
2. What finally caused the Projectiles to break formation and fly through the scene, when they should have just continued to pile up against the Target in a straight line forever?
And, yes, I am a noob. Thanks for putting up with me.
Comments
But it is simulating physics closer than you think!
You have created a simulation of a planet (the target) that is floating in space and somehow defying the massive gravity of a black hole (gravity set to 100). In addition, the target is being bombarded with meteors (the projectiles) that are subject to the overwhelming force of the gravity of the black hole. And to top it off -- both the planet and the meteors mysteriously have a strong repelling force against each other (the collisions).
You are seeing penetration because gravity trumps all other forces! (Its like asking why does a meteor embed itself into a planet instead of bouncing off?)
You are seeing the meteors springing from the middle of the target because of the constant repelling force of the collision. (The closer it gets to the center of the target, the more the repelling force.)
If the above analogy does not work for you. Then you might want to conceive of the simulation in terms of nuclear forces working on sub-atomic particles. (So, another way to think of the setup you have created is as a simulation of a nuclear particle accelerator.)
Nice science project!
http://jamie-cross.net/posts/ ✮ Udemy: Introduction to Mobile Games Development ✮ Learn Mobile Game Development in One Day Using Gamesalad ✮ My Patreon Page
Wouldn't this be like any game where you have a "floor" designed to stop an actor? That's what I thought. Nonetheless, the falling Projectiles still penetrated the Target, and eventually passed thru it to fall off the bottom of the screen.
Here is where my Noob-i-ness comes in. The answer is that rather than un-checking the "Moveable" attribute of the Target, I instead added rules to constrain it's X and Y position. The Target was Moveable, but it's position was constrained. In my mind, a completely constrained position should be identical to having Moveable turned off. But they aren't the same.
When I take away the Constrain X & Y rules, and instead just uncheck the Moveable attribute of the Target, there is no penetration or pass-thru. The Projectiles just land and stack themselves up in a straight line with no instability or any of the weird behavior before. So while I have answered my own question, it still leaves me wondering why a constrained actor can be overlapped, penetrated and passed through, while an unmovable one cannot.
So what you have now is probably more like meteors that hit a surface that is defying the laws of physics. (That is, the target actor is no longer subject to gravity, and has infinite inertia.) In this case, Gamesalad (Box2D) will not treat interactions with the the target actor the same as it does with other 'more physical' actors. But at least the projectiles seem to be acting as you expect them to.
It is interesting that you have to break physics to get the expected result.
This often happens with games. In order to get the expected gameplay, one needs to break certain physics concepts. It happens all the time in cartoons and games. Game physics ≠ Newtonian physics.
I would recommend that you break physics even further by not using gravity at all. Instead, give the projectile actor an acceleration behavior. Or even even better, I would recommend giving the projectile actor an initial change velocity. Most of the time projectiles don't actually accelerate -- they just get shot.
Back in the real world, however, the constrained target scene has developed an even weirder behavior. I have the projectiles set to spawn from the top of the screen, straight down the center. They are all spawned at exactly the same position. If the gravity is set to 10, the projectiles all "fall" from this location and then penetrate the target, etc. But, after about 1 minute, the projectiles no longer spawn at the hard-coded spot where they are supposed to. They still spawn from the top of the screen, at the expected Y value, but suddenly they start appearing at all different X values AND all different rotations. So a new random behavior kicks in after a minute.
If I increase the gravity to 100, the projectiles strike the Target, penetrate it, start to pile up inside of it, and a few escape. But if you let the scene run, the pile eventually thins out as more and more projectiles pass thru the target. After a minute or two, new projectiles just pass right through the target as if it weren't there.
I realize this has pretty much zero practical value in the world of game creation, and I am just screwing around, but this simple little scene has definitely been interesting to me.
Without checking (because its much more fun to talk), I'm guessing that the weird x-factor on the part of the particles might be due to them colliding when they are spawned. With gravity at 10 they don't accelerate much before the next one gets spawned. Are they colliding with the previous particles as soon as they are spawned. (Just speculation on my part.)
I have no guess for why particles pass straight through the target (without stopping) after a few minutes. Chalk it up to Box2D physics!