Skip to main content

When onExit Runs

Here’s the sequence:
  1. Event occurs (learner taps, moves, makes a choice, etc.)
  2. Condition is checked (if any). If true, transition is allowed.
  3. onExit actions run (in the order you defined them)
  4. Transition actions run (actions on the transition itself, if any)
  5. onEntry actions of the next state run
  6. Next state is fully set up and waiting for interaction
This is important to remember: onExit runs before the next state’s onEntry.

Common onExit Actions

Adding onExit Actions

Properties panel On Exit tab showing Stop Audio and Stop Video actions with Add Action button

On Exit tab with cleanup actions — Stop Audio and Stop Video ready to run when the learner leaves this state

1

Select a state on the canvas

Click the state node in the steps list or on the canvas.
2

In the Properties panel, select the On Exit tab

You’ll see a list of actions already in this state’s onExit (if any) and an Add Action button.
3

Click the Add Action button

The same action picker used for On Entry appears — search or browse by category.
4

Select the action type you want

Common onExit actions include Stop Audio, Hide Panel, Reset Object, Set Variable.
5

Configure the action

Expand the action to set its parameters.

Pairing onEntry and onExit: Setup and Cleanup

A best practice is to pair onEntry actions with corresponding onExit actions. If you set something up in onEntry, clean it up in onExit.

Example: Audio Setup and Cleanup

State 1: “Listen to Instructions”
When exiting this state, the audio stops before the next state begins. If you didn’t stop it, the audio might continue playing while the next state’s narration tries to play — confusing for the learner.

Example: Visual Guidance

State 2: “Identify the Problem”
Highlights are removed as the learner moves to the next state. The next state gets a fresh visual canvas.

Example: Object Position Reset

State 3: “Move the Pump”
If the learner then goes back (using a Back event) to re-read instructions, the pump is reset. Alternatively, if they move to a new scenario, the pump is in the correct starting position.

Saving Progress with onExit

Use onExit to save important data before moving to the next state: Example: Tracking Correct Answers State 4: “Quiz Question 1”
Before leaving this state, increment the score if the learner was right. This data persists to the next state and beyond. Example: Attempt Tracking State 5: “Try Again”
Every time the learner leaves this state, increment the attempt counter. Use this later in a condition to limit retries.
There is no separate “Increment Counter” action — incrementing is done with Set Variable and an AXL expression like attempts + 1.

The Complete Execution Sequence

Here’s a detailed example to show how onExit, transitions, and onEntry work together: Scenario: Learner is in “Move the Pump” state. They successfully move the pump, triggering a transition to “Confirm Position” state.

onExit Best Practices

If you play audio in onEntry, stop it in onExit. Prevents audio overlap.
If you show a text panel in onEntry, hide it in onExit (or let the next state’s onEntry show something new).
If the learner interacts with 3D objects (move, rotate), consider resetting them in onExit so the next state starts fresh.
Save learner choices, scores, and attempt counts before leaving a state.
Avoid long delays. If onExit takes too long, there’s a gap between states. Learners expect smooth transitions.
Preview your training and verify that when you leave a state, audio stops, panels close, and the next state loads cleanly.

Common Mistakes to Avoid

Don’t forget to stop audio: If you play audio in onEntry but don’t stop it in onExit, the audio continues into the next state, creating a confusing experience.
Don’t reset data you need later: If you set a variable in onEntry to track something important, don’t clear it in onExit. Decide: does this variable need to persist across states?
Don’t overload onExit with too many actions: If you have 5+ onExit actions, consider whether some of that logic belongs in the next state’s onEntry instead.

Next Steps

Learn about: