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/08/30 01:10] bouh [Disable the object unused] |
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 if you don't have the reflex of build a good structure in your events, the processor can be overload 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: |
+ | |||
+ | < | ||
====== Optimization already in the engine ====== | ====== Optimization already in the engine ====== | ||
- | The GDevelop | + | GDevelop |
This doesn' | This doesn' | ||
+ | For example, when a sprite is off screen all the animations are paused. | ||
- | < | + | < |
+ | ====== Optimizations you can perform ====== | ||
- | ====== Trigger once ====== | + | ===== Trigger once ===== |
- | The **Tigger | + | The **Trigger |
- | Let's take an example | + | For example, if you want to create an object every time a click is done, this is what you should // |
{{: | {{: | ||
- | * What should | + | * What is expected to happen: When the left mouse button is pressed, an object is created called **MyObject**. |
- | * What actually happens : When the mouse left button is pressed, | + | * What actually happens : As long as the mouse left button is pressed, **MyObject** |
- | This occurs | + | 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 | + | This would be an intuitive but wrong way to do it: |
+ | {{: | ||
+ | If you do this, all objects will move, including | ||
- | Let's take the example where I have a gun and I create one bullet when i do fire. | + | <note tip>Why calculate movement that the player won' |
- | 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' | + | |
- | The good solution is to delete the bullets if there is off screen. | + | |
- | An behavior | + | Instead, you can limit the movement to visible objects. This can be done the following way: disable the Pathfinding |
- | All bullets moving offscreen will be deleted. | + | |
- | ==== Disable | + | <note tip> |
- | Behaviors can be disable. | + | ===== Delete unused |
- | 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 | + | |
- | + | ||
- | <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. | + | |
+ | 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 **" | ||
Line 78: | Line 77: | ||
</ | </ | ||
- | - The image imported or tiled sprite over 2048px, are very heavy for a mobile. | + | - The smaller the images the smaller gets the rendering time. |
- | - Optimize | + | - Images bigger than 2000px may not work well especially on mobile |
- | - Use the profiler in GD5 for see which event is the longest | + | - Reduce the number of frames of a sprite animation |
- | + | - 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 | |
- | + | - 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 | ||