How do I optimise many objects overlapping test

Get help using Construct 2

Post » Tue Oct 18, 2016 11:34 am

Hey guys, I have an optimization issue I can't quite solve. Any help would be imensely appreciated, thanks. Here it goes:

For this example's sake, my character will be called object TYPE A
Image I have a layout with 200 objects TYPE B
Now, around my character, there are always a few scattered objects of TYPE C that move with the character (TYPE A)
For one purpose or another, I need to detect all the time a TYPE C object is overlapping a TYPE B object, and there are a hell lot of TYPE B objects, and that seems to be a very heavy thing to do with this many TYPE B objects. (NOTE: TYPE C objects are also ~ 20).
So my question would be, how do I narrow down the TYPE B Is Overlapping TYPE C object check only to near the TYBE A object. There are a few sub-points that make this a tad more difficult.

a) I need to perform checks all the time a TYBE B object is overlapping a TYPE C object as the TYPE C object has changing properties that then reflect on the TYBE B object, so I perform these checks every 0.5 sec. - This means I can't use On COllision as it is a one time thing.

b)There will be more that one TYPE A object, despite me giving the example above as it being the player character, that was kinda misleading, cause there will be other TYPE objects with their seperate TYPE C objects (context is not an issues here, every TYPE C object knows to which TYPE A object it belongs, however the effect when overlapping with a TYPE B object is the same)

c) I've tried picking TYPE B objects to by distance being under something from the TYPE A Object and to only check for overlapping with those but I either did it wrong or it had no effect on my FPS.

Any clarity would be of much help, thanks.
B
18
S
3
Posts: 65
Reputation: 994

Post » Tue Oct 18, 2016 12:43 pm

OK. so I pick all TYBE B objects which are within some distance and set a value to 1, and then all that are further away from that are set to value 0 and then I pick the onces with value 1 for the collision checks and that seems to have a significant impact on the FPS for the better. Still, it's not perfect, if anyone has any other ideas they are still more than welcome.
B
18
S
3
Posts: 65
Reputation: 994

Post » Tue Oct 18, 2016 12:57 pm

The solution in your last post seems the most effective to me too (and you can modify the affected distance too),
But I don't see why you would need to set a value?
Why don't you just putthe collision check as a sub-event of the distance pick?
This would eradicate the value setting and checking and maybe improving your performance somewhat.

[EDIT]
You could also set the distance checked for each TYPE C depending on their width/height.
This means, you would set the checked distance to
Code: Select all
distance = "TYPEC.width > TYPEC.height ? TYPEC.width : TYPEC.height"

Like that, you would minimize the distance to the smallest value possible and decrease the amount of following overlapping tests too.
"We can't solve problems by using the same kind of thinking we used when we created them."
- Albert Einstein
B
27
S
11
G
8
Posts: 528
Reputation: 7,091

Post » Fri Oct 21, 2016 12:14 pm

That's pretty cool, thanks! I'm playing around with these ideas right now, and things are looking better.
B
18
S
3
Posts: 65
Reputation: 994


Return to How do I....?

Who is online

Users browsing this forum: Kyatric and 35 guests