Navigation with Lingo
One of the simplest tasks you can do with Lingo is to control the flow of your movie. You can tell the movie to jump straight from frame 4 to frame 12, for instance. Or, you could tell it to jump from frame 17 back to frame 9.
Better still, you can tell the movie to wait on a frame, and then let the user control the movie by associating navigation commands with buttons.
Navigation With the go Command
The go command is the most basic Lingo navigation command. If you are building a presentation with Director, you will want to use various Lingo navigation commands to allow the user to move through the screens of your presentation.
You can make the movie jump to a frame number by simply telling it to go. Open the Score panel and the Message panel. The playback head should be on frame 1. Now, in the Message panel, type go 5.
The playback head should proceed to frame 5. A more common form of this command is to use the full statement go to frame 5. This is a little more readable.
You can also tell the movie to go to the next marker. Create a marker label for frame 7 simply called "intro". Do this by clicking on the marker/label bar above the frame numbers in the Score. Then, in the Message panel type go to frame "intro".
You can put this code into a button using the on mouseUp handler. For instance, to create a button that will jump to the "intro" frame, all you need is to attach this script to the button:
on mouseUp go to frame "intro" end
Use the go command to jump to frames based on the current location of the movie. When you issue a go to the frame command, the frame is actually the frame number of the frame that you are on. You can test this in the Message panel:
put the frame -- 7
So in order to go to the next frame, just issue a command like this:
go to the frame + 1
If you want to jump ahead to the next labeled frame, use the special syntax go next. For instance, if frame 1 is labeled "menu", frame 2 is empty, and frame 3 is labeled "summary", and the movie is on frame 1, then go next will take the movie to frame 3.
Similarly, you can use go previous to jump to the previously labeled frame relative to the current frame. Table 3.3 shows all the variations of the go command.
Table 3.3 The Many Versions of the go Command
go to frame x
The movie goes to frame number X.
go to frame 7
go to frame "x"
The movie goes to the frame labeled X.
go to frame "credits"
go to the frame
The movie begins the current frame over again.
go to the frame
go to the frame + x
The movie jumps ahead X frames.
go to the frame + 1
go to the frame - x
The movie jumps back X frames
go to the frame - 1
The movie jumps to the next labeled frame.
The movie jumps to the labeled frame immediately before the current frame
The movie jumps back to the currently labeled frame.
The movie jumps forward X labeled frames.
The movie jumps back X labeled frames.
Jumps to the frame or movie, and remembers where it came from
play frame 40
Returns to the frame where the last play command was issued.
The play and play done commands will be covered in more detail in the next section.
The most confusing concept is the difference between the current label and the previous label. Figure 3.4 shows the Score with some labeled frames. The playback head is between two of them in frame 7. Frame 5 is labeled "that", frame 1 is labeled "this", and frame 10 is labeled "other". If you were to execute a go loop, the movie would jump back to "that", because it is the closest marker just before the playback head. However, a go previous command takes the movie back to "this", which is considered the previous label.
Figure 3.4 The playback head is between two labeled frames. "that" is considered the current label and "this" is the previous one.
The function marker() is used to get frame label information from the Score. It takes one number as a parameter. If that number is a 0, it returns the name of the current label marker. If it is a -1, it returns the name of the previous marker. A 1 returns the name of the next marker.
play and play done
A second way to navigate around a movie is to use the play command. The basic command works just like a go, but there is a major difference. The play command actually remembers which frame the movie was on when the command was issued. That way, the play done command can be used to return the playback head to the original frame.
Suppose you have three labels named "menu", "chapter1", and "chapter2" in the Score. A button on the frame labeled "menu" can issue this command:
play frame "chapter1"
Then, another button on the frame labeled "chapter1" can issue a play done to have the playback head return to the frame "menu". The same play done button and behavior can be reused in the frame labeled "chapter2".
You could, in fact, issue the initial play command anywhere in the movie and Director will remember that frame and use it with the play done command.
Jumping to Other Movies
Both go and play can be used to jump to another movie as well as a frame in the current movie. The syntax is simply an extension of what you have already read about.
Here is a behavior that opens another movie and starts playing it from frame 1:
on mouseUp go to movie "nextMovie.dir" end
Director is actually smart enough to assume the correct extension at the end of a movie name if you leave it off. This way, you don't have to worry about having a .dir extension on a Windows file but not on a Mac file. It also solves the problem of changing the movie's filename to have a .dxr or a .dcr when you protect or compress it later.
If you don't want to have the movie start playing on frame 1, you can specify the frame by extending the command a bit:
on mouseUp go to frame "intro" of movie "nextMovie.dir" end
You can use the same format with the play command. The power of the play command really shines here. You can have a button that takes users to a completely separate movie and enables them to navigate there. When they are finished, they can press a button that executes a play done command and they will return to the previous movie. The play done command even returns users to the correct frame in that movie.
Example: Creating a Simple Presentation
The set of files presentation1.dir and presentation2.dir contain a simple presentation built in Director. It has been designed to teach basic navigation techniques.
In the first sample movie, you can see the four frames of the presentation. Each contains information about one of four countries. Each frame is labeled in the Score. Figure 3.5 shows what the Score looks like.
Figure 3.5 The Score shows the four frames in the presentation.
Each frame has a frame script applied to it. This looks like the looping frame script mentioned earlier in this chapter.
on exitFrame go to the frame end
By using this script, the movie will remain on each frame, without advancing automatically to the next frame in the Score.
Each of the four frames contains several sprites. The first two sprites of the Score are stretched across all four labeled frames. These include the title bar background and the title. You can see the title bar and title at the top of Figure 3.6.
Figure 3.6 This simple presentation shows information about countries.
There is also a world map graphic and another border around the text area that are stretched across all frames.
Then each screen contains a separate set of three sprites: the city name, the text information about the city, and a circle to indicate the position of the city on the map.
The city name and text information sprites each use a different cast member on each frame. So there are four city name members and four city information members. The circle for the map is just one member. Each of the four sprites that use this single member have it positioned at the different location on the Stage.
Two other sprites that are stretched across the Score are the two buttons at the bottom of the screen. They look like arrows pointing left and right.
These are actually the same member in the Cast. The right button sprite uses that member as-is. But the left button member uses a sprite ability to flip itself horizontally to create a mirror image. This way we only need one Cast member for both the left and right buttons.
These two buttons are the only other place in the movie where there are scripts. On the left button, we'll use this script:
on mouseUp go previous end
On the right button, we'll use this script:
on mouseUp go next end
This will allow the user or presenter to navigate between the four frames. Try the movie out and look at each sprite and script.
Example: A Presentation Menu Screen
This simple presentation movie simulates a basic PowerPoint presentation. However, it would be much more useful if information were available more easily to the user. For instance, the user should be able to jump to any screen in the movie, not just the previous or next screen.
To do this, we'll add a menu frame to the movie. This will be the first frame. The other four frames will be moved down two frames to the right. Do this by selecting the sprites and dragging them to the right. Then drag the markers as well.
Figure 3.7 shows the new Score for movie presentation2.dir. The first frame is labeled "menu" and contains the title box and title text sprites just like the four other frames.
Figure 3.7 This Score includes a menu frame.
The menu frame includes four buttons. These are the same bitmap member, but stacked vertically on the Stage, one under the other. Overlaid on top of that is a text member that gives each button a label. By using the same exact button four times and a text member on top of them, we make it easy to add new buttons or change the text on the existing ones. The end-user doesn't know or care that the text and buttons are really separate elements.
Each button is a rectangular graphic with a triangle on the left and a gray area filling out the rectangle to the right. Figure 3.8 shows the bitmap in the Paint Editor. The reason that the gray area doesn't appear in the previous figure is that the Stage itself is the same shade of gray.
Figure 3.8 The gray part of this bitmap will blend with the gray color of the Stage.
Since the entire area of a button is clickable, making the buttons larger than they appear will give the user a larger space to click on. In this case, the user will be able to click on the area under the text.
The scripts for each button will be very similar. Here is the script for the first one. The rest of the button scripts use different frame names.
on mouseUp go to frame "US" end
We'll also add another button to the movie to allow the user to get back to the menu frame. This button only needs to be on the content frames, not the menu frame. This menu button will allow the user to jump back to the menu to select another city.
on mouseUp go to frame "menu" end
With presentation2.dir, the user can navigate through the same content in a very different way. They can select a city and jump right to that screen. Then can then return to the menu and select another city. The next and previous arrow buttons are still there as another option.