Popfly Game Creator has an event system separate from that of the Silverlight event system (although some events are triggered by Silverlight or browser events). Most Popfly Game Creator events are queued up and executed at a specific time each frame in the order they are listed in the actor or scene’s behavior dialog.
An example of how you can take advantage of this is jumping. In order to make sure actors only jump when they are on the ground, you can reset a property to 0 ever frame (the jump shortcut uses the property “CanJump”). Then after that behavior, you can add a “while colliding” behavior that triggers whenever the actor collides with a solid on the bottom of the actor after reset behavior and sets CanJump to 1. Finally, for your jump motion behavior, you can set a filter to check whether CanJump is 1 to only allow the actor to jump when it is touching the ground. If you create the behaviors in a different order than you would like them executed, use the up/down arrows to the left of the event button to arrange them as required.

There are several exceptions to the rule that all events execute in the order seen in the behaviors dialog:
- The first exception is property change events. Property change events occur once per frame after the Popfly Game Creator engine has updated the physics of your game but before collisions are resolved, so that collisions as a result of a behavior responding to a property change event are resolved before drawing. Property change events triggered by behaviors responding to property change events do not execute until the next frame.
- The second exception is collision events (but not uncollide events) which execute during the collision check so that you have an opportunity to resolve the collision yourself before the PGC engine does this for you.
- The final exception is scene change behaviors. These execute when they would normally, but the scene does not change until that frame has finished executing and the next frame begins.
To aid you in understanding the timing of a frame, here is the javascript used to perform the update:
GameEngine.prototype.update = function()
{
// 0) Scene changes - these must happen first so that we can run
// all on load events
this.doSceneChanges();
// 1) Take care of anything we need to do to have up to date input
// ready.
this.inputUpdate();
// 2) Execute all behaviors whose event preconditions are satisfied
// in the order the user specified them. (Exceptions are SceneChange
// behaviors which should be the last to execute, collision events
// which execute immediately to allow the user a chance to handle them,
// disappear events which happen immediately since their owner won't be
// around the next frame as a listener to execute them and property
// change events which should happen right before we check for
// collisions.)
this.executeStandardBehaviors();
// 3) Update the locations of our actors
this.physicsUpdate();
// 4) Execute property change behaviors
this.executePropertyChangeBehaviors();
// 5) Check for and resolve collisions (and execute collision events)
this.resolveCollisions();
// 6) Draw
this.draw();
// 7) Cleanup
this.frameCleanup();
};