How do I optimize my event sheet?

Get help using Construct 2

Post » Wed Oct 19, 2016 5:35 am

Hey everybody,

Now I have this question floating in my mind. How to optimise events. In C2 events are read from top to bottom. Yes, I did my research ;)
What is the impact to performance and/or efficient if events aren’t in an optimised order?

Example:
Let’s say I have 3500 events and I have organised them by folders. All player events are in the folder called “Player”, all enemy events are in “Enemy” and so forth.

    “Player” root folder
      “initialisation” subfolder
      “controls” subfolder
      “animations subfolder
    “Enemy” root folder
      “initialisation” subfolder
      “AI” subfolder
      “animations subfolder
    “Enviroments” root folder
      “trees” subfolder
      “animals” subfolder


Next, on start of layout I want to create player object.

    “Player” root folder
      “initialisation” subfolder
      on start of layout: create “player” sprite object at X/Y.
      “controls” subfolder
      “animations subfolder
    “Enemy” root folder
      “initialisation” subfolder
      “AI” subfolder
      “animations subfolder
    “Enviroments” root folder
      “trees” subfolder
      “animals” subfolder


Then I want to create some enemies and some trees, also on start of layout:

    “Player” root folder
      “initialisation” subfolder
      start of layout: create “player” sprite object at X/Y.
      “controls” subfolder
      “animations subfolder
    “Enemy” root folder
      “initialisation” subfolder
      on start of layout: create “enemy” sprite object at X/Y.
      “AI” subfolder
      “animations subfolder
    “Enviroments” root folder
      “trees” subfolder
      on start of layout: create “tree” sprite object at X/Y.
      “animals” subfolder

Question: in this example, are all those on start of layout -events fired on start of layout, even though some of them are very bottom in events order? To me the answer is yes but could there be an issue of some kind if there are 3000+ events between the first on start of layout -event and the second? Should I do something like this instead:

    “Root” folder
      “initialisation” root folder
      on start of layout: create “player” sprite object at X/Y.
      on start of layout: create “enemy” sprite object at X/Y.
      on start of layout: create “tree” sprite object at X/Y.
    “Player” root folder
      “initialisation” subfolder
      “controls” subfolder
      “animations subfolder
    “Enemy” root folder
      “initialisation” subfolder
      “AI” subfolder
      “animations subfolder
    “Enviroments” root folder
      “trees” subfolder
      “animals” subfolder


Personally I don’t want to use this method because I really want to organise my events by putting every player related stuff in “Player” folder and so on. BUT if there indeed are some performance issue or similar thing, then I guess I have no way around but to do like I described above.

If someone has a tip or two to offer, feel free to do so ^^

-M-
B
16
S
2
Posts: 60
Reputation: 984

Post » Wed Oct 19, 2016 7:22 am

yes, all of those On start of layout triggers are fired on the start of the layout, and I'm sure they all fired at the same time because they are triggers. Triggers don't follow the "top to bottom" rule, the actions in the triggers are read when the event that fired the trigger happen (in this case, start of layout)
B
45
S
13
G
2
Posts: 173
Reputation: 5,331

Post » Wed Oct 19, 2016 8:05 am

Daggio wrote:yes, all of those On start of layout triggers are fired on the start of the layout, and I'm sure they all fired at the same time because they are triggers. Triggers don't follow the "top to bottom" rule, the actions in the triggers are read when the event that fired the trigger happen (in this case, start of layout)


In fact, they follow the top to bottom rule, but within the moment the event is trigger. In your example Mithrill, you can let the "On start of layout" events in the folders they belong, that is not going to cause any problem. The first will be triggered, then once all its actions are done, the second will etc... I share your opinion on the matter : That clearly will be more readable.
Image
B
10
S
3
G
2
Posts: 78
Reputation: 1,729

Post » Wed Oct 19, 2016 9:32 am

Use the Function object and make functions with it.

Have the root foler execute a function "InitPlayer" that is situated in the Player "folder", and a function "initEnemy" situated in the Enemy folder, and so on.
Don't hesitate to add prefixes to the names of your functions to "situate" your functions (for example Player related functions could start with "PLA_").

If you have 3000 events, you have possibly room to actually refactor and simplify a lot of your code and using the Function object could be the first thing to do on that track.
New to Construct ? Where to start

Image Image

Image Image

Please attach a capx to any help request or bug report !
Moderator
B
289
S
112
G
94
Posts: 7,333
Reputation: 69,293

Post » Wed Oct 19, 2016 4:26 pm

Also, as a good development practice, try to get the same contextual events separated within their own sheet (if by "folder" you didnt mean event group, but meant event sheet already, my bad then).
With your example, you could have a System ("root"), Player, Enemy and Environment sheet, including them wherever is needed.
About the order of execution, don't worry, as long as they are logical for what you wanted. The same thing happens in programming: each compiler/intrepeter knows when to execute something.
English is not my native language. Sorry for any mistakes and feel free to correct me if needed.
B
14
S
5
G
3
Posts: 113
Reputation: 3,231

Post » Thu Oct 20, 2016 8:22 am

Thank you everyone for charing your tips :)

@Daggio,@Bro7hers, looks like my research about events sheets failed me :/ I had completely forgot about those trigger events and how they are executed.

@Kyatric, this function method sounds like a good option. Currently I really need to find a way to optimise my events.

@Cassianno, yes, I did mean event groups so my bad -_- About your tip, personally I don't want to separate my events into many event sheets. Too much hassle and to me it's hard to keep track of what is where. This is completely personal opinion of course :) I like to use groups instead.

Another question rise from back of my head: I'm using same group structure as in my first post. Lets pretend that I have a boolean variable called "isActive" in group Enemy/AI.

Just for demonstration,
distance: player, enemy less than 50 > set enemy.isActive = true
when that boolean variable "isActive" is true > set enemy angle to player.X/Y.
else
distance: player, enemy greater than 50 > set enemy.isActive = false
Boolean variable "isActive" is false > set enemy angle to self.X/Y.

What are the benefits if I disable that Enemy/AI group when boolean "isActive" = false? Because I don't see any reason for C2 to check those events in that group if Boolean isn't true in the first place.

I was thinking something like this:
distance: player, enemy less than 50 > set group Enemy/AI > enabled and set enemy.isActive = true
Boolean variable "isActive" is true > set enemy angle to player.X/Y.
else
distance: player, enemy greater than 50 > set enemy.isActive = false
Boolean variable "isActive" is false > set enemy angle to self.X/Y, and set group Enemy/AI > disabled.

really quick and dirty example and I hope everyone will understand :)

What I understand about C2, is that it will check events in every event groups which are active (obviously). If I have that 3000+ events, I think it's not really beneficial to check events from every group if those events aren't used. Using that example above: if group Enemy/AI is active, C2 will check that group and that boolean. Then C2 will run the events depending of the boolean state. BUT if that group is disabled, then C2 will skip it and theoretically save some recourses.

If I'm completely wrong, please correct me. I really want to understand how to optimise events and how C2 is handling things.

-M-
B
16
S
2
Posts: 60
Reputation: 984


Return to How do I....?

Who is online

Users browsing this forum: jorgmaquoi, SignalOne and 19 guests