Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
gdevelop5:events:draft-optimization [2020/01/13 23:23] silver-streak Minor grammar changes |
gdevelop5:events:draft-optimization [2020/12/26 13:56] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | <note important> | + | <note important> |
- | <note warning> | + | <note warning> |
+ | <note important> | ||
+ | Could be merged with | ||
+ | http:// | ||
+ | </ | ||
- | Game optimization is an important concept of making a game. Good optimization will allow the game to work faster, making it more fluid. | ||
- | GDevelop 5 gives you total freedom in events. While this can be awesome, it can also be very costly for the processor when running | + | Game optimization is an important concept of game development. Good optimization will allow the game to work faster, making it more fluid. |
- | It is important to [[gdevelop5: | + | GDevelop 5 gives you total freedom in events. While this can be awesome, it can also be very costly if you don't have the reflex of writing optimized |
- | < | + | It is important to [[gdevelop5:tutorials: |
+ | < | ||
- | ====== Optimization in the engine ====== | ||
- | The GDevelop engine do once simple thing, he said to the graphic api do not render the object not in viewport. | ||
- | This doesn' | ||
- | < | + | ====== Optimization already in the engine ====== |
+ | GDevelop has built in optimizations, | ||
+ | This doesn' | ||
+ | For example, when a sprite is off screen all the animations are paused. | ||
- | ====== Trigger once ====== | + | < |
- | Tigger once is a condition, this allow to run the actions ony once, for each time the conditions have been met. | + | ====== Optimizations you can perform ====== |
- | Let's take an example | + | ===== Trigger once ===== |
+ | |||
+ | The **Trigger once** condition causes conditions preceding it in the same event to trigger only once every time they are met. | ||
+ | |||
+ | For example, if you want to create an object every time a click is done, this is what you should // | ||
{{: | {{: | ||
- | What i want : When i press the mouse left button | + | * What is expected to happen: When the left mouse button |
- | What i get : When i press the mouse left button | + | |
- | This is bad because when you press the button | + | This is problematic |
- | For fix that we need add the condition | + | To fix that we can use the **Trigger once** condition: |
{{: | {{: | ||
+ | Now, the condition will trigger only once while it is true. That means that the event will fire only once every time it's condition goes from unfulfilled to fulfilled. It resolves the problem above as the condition will fire only the first frame of the click, and will wait for the click to end before letting the click event fire again. | ||
+ | ===== Decativate unused behaviors ===== | ||
- | ====== | + | Behaviors |
- | There is multiple behaviors, // | + | Let's take as example the following situation: I want 100 enemies to move to a position close to them every 2 seconds, and to take into account |
- | ==== Delete the object unused ==== | + | This would be an intuitive but wrong way to do it: |
- | + | ||
- | Let's take the example where I have a gun and I create one bullet when i do fire. | + | |
- | This bullet have a force toward a direction. | + | |
- | If you shot very often bullets will increase in number on scene and each have a physic. | + | |
- | If you didn't manage the bullets you will get some lag during the game. | + | |
- | The good solution is to delete the bullets if there is off screen. | + | |
- | + | ||
- | An behavior exist **" | + | |
- | All bullets moving offscreen will be deleted. | + | |
- | + | ||
- | ==== Disable the object unused ==== | + | |
- | + | ||
- | Behaviors can be disable. | + | |
- | This is perfect when you didn't need to affect the instance out of the screen. | + | |
- | + | ||
- | Let's take the example where I want 100 enemies to move to a position each 2 seconds close to their taking into account the obstacles (For simulate guardian rounds with random paths). | + | |
- | + | ||
- | Bad way is to move the enemies like this : | + | |
{{: | {{: | ||
- | If you do only this all objects will move, but maybe you don't need the objects | + | If you do this, all objects will move, including |
- | + | ||
- | <note tip>Why calculate something what we didn't see?</ | + | |
- | + | ||
- | Instead you can move only the object visible (in viewport), there is a simple way: | + | |
- | + | ||
- | - Disable the behavior Pathfinding of the objects not in viewport once time. | + | |
- | - And do the invert event, when the objects are in viewport, enable the behavior once time. | + | |
+ | <note tip>Why calculate movement that the player won't see?</ | ||
+ | Instead, you can limit the movement to visible objects. This can be done the following way: disable the Pathfinding behavior of the objects not visible in the viewport, and also enable it when they are visible in the viewport. | ||
+ | <note tip> | ||
+ | ===== Delete unused objects ===== | ||
+ | Let's take as example the following situation: | ||
+ | I have a gun and I create one bullet object instance when I press the key to fire. | ||
+ | This bullet has a force toward a direction. | ||
+ | If the player shoots many bullets, their amount will increase on the scene and each one requires calculations of the force applied to them in the event loop. | ||
+ | If you don't delete old bullet objects they will add up and take more and more performance causing lag to appear after playing for some time. | ||
+ | The best solution is to delete the bullets that are off screen. | ||
+ | The behavior **" | ||
+ | <note important> | ||
+ | </ | ||
+ | - The smaller the images the smaller gets the rendering time. | ||
+ | - Images bigger than 2000px may not work well especially on mobile devices where they may not load at all. | ||
+ | - Reduce the number of frames of a sprite animation as much as possible, get rid of frames too similar to the one before and next. | ||
+ | - Use the profiler in GD5 for see which events are taking the most of the performance to try and optimize it | ||
+ | - Reduce number of conditions as object selection is a heavy process. | ||
+ | - The loading of a game can take a while when the resources are too large, 2Go of a video or for a sound file, will slowly the loading. | ||
+ | - Think to compress the video and sound files, your image too, this reduce the loading time. | ||
+ | - All resources in the project are bundle in the exported games if the resource exist in the Resource tab (Project manager> | ||