Replies: 8 comments
-
I didn't really had the time to check the forum since yesterday since I was travelling, but this seems to be a good idea ! Not sure though however about the automatic feature, as both putting them to sleep or awake automatically would effectively could be quite CPU consuming . |
Beta Was this translation helpful? Give feedback.
-
@parasyte though it's not really related, I also wanted to look at replacing the current object array by a hash table (using the object GUID for key), as it should improve performances as well when parsing and accessing the object pool/list |
Beta Was this translation helpful? Give feedback.
-
Improvements when doing lookup : http://jsperf.com/indexof-vs-array-hash |
Beta Was this translation helpful? Give feedback.
-
I had the same idea. See also a similar test in #192 that shows how faking a remove operation is faster than both |
Beta Was this translation helpful? Give feedback.
-
@obiot: auto-sleep is easy. Just plug it in right here: https://github.com/melonjs/melonJS/blob/master/src/core.js#L1422 But auto-wakeup is really hard. |
Beta Was this translation helpful? Give feedback.
-
Yes I was actually more concerned about the auto-wake up :) |
Beta Was this translation helpful? Give feedback.
-
Reminder: Implementing auto-sleep through callbacks is the right way to do this. A "viewport leave" callback is very easy, as we know. With the new collision detection in #103, we will have a spatial grid that already contains objects... Seems like this can be reused for auto-wakeup, too! When a new spatial grid cell enters the viewport, fire the "wakeup" callback on all objects in that cell. Wow ... that seems almost too easy to be true! |
Beta Was this translation helpful? Give feedback.
-
something interesting i just spotted in the chipmunk API : it's also possible to disable object collision check for idle object, and specify a |
Beta Was this translation helpful? Give feedback.
-
Following discussion on the forum, it sounds like a good idea to implement an object sleep mechanism to save CPU cycles for objects that have nothing to do.
The way I imagine it is having two pools for game objects; the
gameObjects
array in core.js, and a new array forsleepingObjects
. Callingme.game.sleep(obj)
will removeobj
fromgameObjects
, and push it intosleepingObjects
. Andme.game.wakeup(obj)
will do the opposite.A sleeping object will never be iterated in the update or draw loops, saving precious CPU time.
Further, we can enable a flag like
me.sys.enableAutoSleep
to put objects to sleep when they leave the viewport. Deciding on a good method of waking up a sleeping object without polling will be crucial for this flag to be useful. I suppose worst-case, polling infrequently (once per second?) could work.Beta Was this translation helpful? Give feedback.
All reactions