Director Tutorials

 

Primary Event Handlers -
Screensaver Lingo

This page looks at the use of Primary Event Handlers to create scripts that could be used in a screensaver type application. There are 4 primary event handlers - keydownScript, mouseDownScript, mouseUpScript, timeoutScript.

Lingo instructions (or messages) are executed following a hierarchical system. Primary event handlers are at the top of the message hierarchy and so will always be executed first (assuming they have been defined). Lingo or handlers are set to primary event handlers and will be executed whenever the event occurs. Primary event handlers will always pass down the event message unless you use the dontPassEvent command.

For example:
A user presses the mouse button generating a mouseDown event. Director will immediately look for a primary event handler relating to this event (i.e. mouseDownScript). If the primary event handler has been defined, it will be executed first. If a mouseDown sprite behavior exists, it will be executed next (or first if the mouseDownScript does not exist).

The order of the message hierarchy is:
primary event handler -> sprite behavior -> cast member script -> frame script - > movie script

In our screensaver movie we only need one movie script to check if a key has been pressed, the mouse has moved or the mouse button has been pressed.

Movie script

global gMouseLoc
on startMovie
  gMouseLoc = the mouseLoc
  -- records the initial location of the mouse
  the keyDownScript = "CheckForKey"
  -- when any key is pressed,
  -- handler CheckForKey will be activated
  the mouseDownScript = "if the mouseDown then halt"
  -- when the mouse is pressed, Director will halt
end

-- on idle handler will execute when no other handler
-- is being called
on idle
  if the mouseLoc <> gMouseLoc then halt
  -- if the mouse is moved from its starting position,
  -- Director will halt
end


on
CheckForKey
  halt
end

In the startMovie handler we record the initial mouse location and we define 2 primary event handlers. For the keyDownScript primary event handler, we assign a custom handler, and for the mouseDownScript, we assign a single statement.

We could have replaced the line:
the keyDownScript = "CheckForKey"
with
the keyDownScript = "halt"

The CheckForKey handler is used to illustrate a custom handler can be assigned to a primary event handler. This would usually be done if there were a number of instructions relating to this event.

On Windows, the easiest way to convert a projector with the above script to a screensaver is to rename the exe file to a screensaverName.scr. However, when the screensaver is launched, it may be executed multiple times (as many as your memory can store). There are a number of programs that convert Director projectors to screensavers. AnySaver is free for Windows that activates the exe file rather than convert the projector itself. Other screensaver utilities can be found here.

If we want to create a screensaver-type movie that will exist within a larger application, we will need to create a timeout in all our 'content' movies. We can use the Timeout event (the only user variable event) as follows:

Movie script

on startmovie
  the timeoutLength = 10*60*60
 
-- set the timeout to 10 minutes
  -- time is measured in ticks, 60 ticks = 1 second
  the timeoutScript = "screensaver"
  -- go to handler screensaver when the timeout occurs
end

-- go to screensaver handler
on screensaver
  if the lastEvent > 10*60*60 then go to movie \
"screensaver"
  -- lastEvent function returns the amount of time
  -- passed since the last user event occurred
  -- user events are either a mouse click, mouse
  -- movement or key press
end

If we then use the movie script at the top of this page in our screensaver movie, we could replace the halt command (when the screensaver ends) to a go to movie "main" statement, where main is the movie we go back to after the screensaver is deactivated.