Xtras for Sale
Home (Spotlight) | TOC | Products & Ordering | Technical Info | Contact Zeus

Errata in
Director 6 Documentation

Copyright © 1996-1997. Zeus Productions. All Rights Reserved.

Errata in the Director 6Learning Lingo manual

Page 10 reads:
The shape appears as cast member 1 in the Cast window and becomes sprite 1 in frames 1 through 28". - The number of frames spanned depends on default sprite span set by the Preferences>Sprite>Span Duration option.

Page 11:
Screen shot of script is missing "on mouseUp...end"

Page 11 should read:
"To test your script:
2. Click the mouse on the sprite (not "Stage") several times"

Page 11 states:
"...if the computer has working, the computer should beep each time you click". The system beep will work without external speakers on the Macintosh, through the computer's internal speaker. On Windows systems without a sound card, it may also work via the internal speaker. (not confirmed).

Page 13
Setting the forecolor of sprite may only work properly in 8-bit mode (256 colors).

Page 13 should read:
"...responds to the user releasing (not "clicking") the mouse button (a mouseUp (not "mouseDown") event in Lingo) and sends the message change."

Page 13 should read:
"Each time you release (not "press") the mouse button, the sprite changes color. (Sometimes the sprite (not "circle", it is actually a rounded rectangle) can change to the same color as the Stage, in which case it seems to disappear until the color changes again.)"

It may also remain the same color if the random number used for the color happens to be the same as the previous color.

Page 13:
"In fact, when the user clicks the sprite, the sprite and movie script both run."
This is incorrect. Because mouseUp handlers are used in both the sprite script and movie script, the mouseUp event is intercepted and consumed by the sprite script. You could either use "pass" to pass it onto the movie script, or use a mouseDown handler in the sprite script, and a mouseUp handler in the movie script, (or vice-versa) in which case the events would be processed separately by the two scripts.

The statements on page 13 would be correct if a mouseDown handler were used in the movie script instead of the mouseUp script shown.

Page 13:
"The movie script runs when the user clicks the button."

If they are in fact using a mouseUp handler in the movie script, this should read:

"The movie script runs when the user releases the mouse button over the Stage, but not over the sprite."

The sprite scripts runs when the user releases the button over the sprite, but only if the mouseDown occured over the sprite.

Page 14 and 15
The Message/Events table is missing the "alertHook", "moveWindow" and "startUp" messages. The "getBehaviorDescription" and "getProperyDescriptionList" messages are each one word (they are shown with a continuation character, which is technically correct but hard to read). The table also does not include the primary event handlers (timeoutScript, mouseUpScript, mouseDownScript, keyDownScript and keyUpScript).

Page 17 states:
"The cast member number of individual score scripts also appear in the Score over the sprites and frames that the script is attached to."

This is only true if the Score display mode is set to "Behavior" (formerly "Script").

Page 17 states:
"Whenveer the cast member is assigned to a sprite, the cast member's script is available"

This is only true if there is not an overriding sprite script.

Page 20 should read:
"The mouseDown and mouseUp messages are first available to the mouseDownScript (not "on mouseDown") and mouseUpScript (not "on mouseUp") primary event handlers..."

Page 20:
mouseUp events are only passed to sprite scipts and cast member scripts if the mouse was first depressed over the sprite, and then released over the sprite. If the mouseDown occurs over the Stage or another sprite, the mouseUp event is not sent to the sprite over which the mouse is released. See mouseUpOutside.

Page 20:

If the emulateMultiButtonMouse property is FALSE, holding down the Control key on the Macintosh while clicking the mouse button generates standard mouseUp and mouseDown events.

Page 21 should read:
"...is available to the timeOutScript primary event handler".

Page 21:
The "on moveWindow" message is omitted under the "Using movie windows" heading (which should read 'Using Movies-in-a-Window" anyway)

Page 22:
"Strategies for placing handlers," omits mention of Parent Scripts and Primary Event Handlers.

Primary event handlers are also convenient for changing the handlers dynamically, which is harder to do with, say, movie scripts.

Page 23:
"Tips for placing handlers," omits mention of externally linked casts which are ideal for holding scripts used in mutiple DIR movies.

Page 24:
Table of Lingo Elements has an error:
"Attributes of a object. For example the depth of member (not colorDepth) is a property of a bitmap."

Page25 states:
"Lingo is not case sensitive."
Although this is true in most cases, it is not universally true in Lingo. (provide details)

Page 29:
The example of using "if..then...else" to check the clickOn within a mouseDown handler is technically accurate, but extremely poor programming technique. It is much better accomplished by using mouseDown handlers attached to each clickable sprite, and using a catch-all mouseDown handler in the frame script if desired. The frame script will only be reached if one of the desired sprites is not clicked on.

Page 31 should read:
"The on rolloverTest handler first assigns..."

Page 32 has a typo:
The example shows "repeat with n = 10 down to 1" in one place, and "repeat with n = 10 down to 2" in another. The graphic/chart also omits the end repeat command, and the puppetSprite 1, TRUE iteration of the loop.

Page 33:
The example else clause:
		else set the name = EMPTY
		end if
should be split on two lines, such as:
			set the name = EMPTY
		end if
Failure to do so will cause the "end if" to end the current handler.

Page 34 should read:
"Unless the handler uses the term global or property to declare that a variable is global, or a property, the variable is automatically a local variable."

Page 34 reads:
"Parameters in the calling statement must be in the same order that they follow in the first line of the handler and they much be surrounded by parentheses"

While this is good programming practice, parentheses are only strictly required if the caller wants to receive a return value from the called handler.

Page 39 reads:
"Use the set command to test and set conditions."

The "set" command is not exactly used to test conditions. Use "put" to display the current state of a property, and "if" to test a condition. You can use "set" to record a condition, and then perform a test later, such as:
		set x = the mouseH
		if x = 5 then alert "the mouseH was 5!"
Page 39 states:
"For example, the timeoutLapsed property, which indicates the length of time since the last timeout, can only be tested."

The timeoutLapsed property can also be set, such as:
		set the timeoutLapsed = 0
Page 40:
Although the "and" and "or" logical operators test whether two logical expressions are true or false, the "not" operator operates on a single expression.

The table on Logical Operators is mistaken. "And" determines whether both expressions are TRUE, but not whether both are FALSE. "Or" determines whether either (not both) expressions are TRUE.

Page 45 states:
"If the current frame has a marker, the statement go to marker(0) loops in the current frame. "
This is true, If the current frame does not have a marker, however, this command sends the playback head to the previous marker. If there is no previous marker, it sends the playback head to the next marker. If there are no markers, it sends the playback head to frame 1.

Page 45 states that:
"go to the marker + 1" sends the playback head to the next marker. This is completely wrong and generates a syntax error. Use "go marker (1)" instead.

Page 54 states:
"You can test a handler by writing it in a Movie Script or Score Script window and then calling it from the Message window."

Handlers in Score Scripts are not generally testable from the Message window. Doing so will generate a "Handler not defined" error unless you specify the target script, such as:
myCustomHandler (script x) where x is the Score script's member number.

Page 56 states:
"The Step Script button runs the current line of Lingo, runs any nexted handlers that the line calls, and then stops at the next line in the handler."

The Step Script button actually only executes one handler, including nested handlers, each time you hit it. If a line includes one or more nested handlers, you need to hit the Step Script button multiple times before it will step to the next line of Lingo in the current handler.

Page 57:
The Comment and Uncomment buttons affect any hilighted lines of Lingo, not just the current line.

Page 60 has a number of mistatements under "When to use puppets":
Not all sprite properties require that the sprite be puppeted for the changes to last beyond the current sprite. For example, the visible of sprite property affects the channel permanently, whether the sprite is puppeted or not.

The puppetTempo and and puppetPalette settings are cancelled whenever the playback heads loops in the current frame, or moves backward in the Score, not only when entering a frame with a new palette or tempo setting.

Page 61 under, "How to make a sprite channel a puppet" should read:
Put a sprite channel under Lingo's control, or return control to the Score, by using the puppetSprite command, followed by the channel number, a comma, and the value TRUE or FALSE respectively.

Page 64:
The discussion of the puppetPalette's duration conflicts with the discussion on page 60. Furthermore, the puppetPalette setting is cancelled whenever the playback heads loops in the current frame, or moves backward in the Score, not only when issuing a "puppetPalette 0" command.

Page 71:
The example handler sets the horizontal (not vertical) location of the sprite to 250, and the vertical (not horizontal) location of the sprite to 300.

Page 71:
The mouseDown example is very wrong. The example is missing the keyword "point" and a closing parentheses:
		on mouseDown
			set the loc of sprite 9 to point (the mouseH, the mouseV)
Furthermore, the example above sets the sprite to the current position of the cursor, not of the last mouse click. For the latter, use:
		set the loc of sprite 9 to the clickLoc
Page 72:
For digital video cast members, the default registration point is the center of the cast member, not its upper left corner.

Page 74:
The table's description of the scrollTop or member property seems wrong to me, but perhaps I just misunderstand their intent.

Page 77 should read:
"The on checkName handler checks whether the answer contains (not "is") the string "Einstein". If "Einstein" is contained in the content of the cast member Answer, the playback head goes to the next marker. If "Einstein" is not contained in the content of Answer, the playback head goes to the marker Try Again."

Page 79:
The example currently checks "the lastKey" (which is the time since a key was last pressed) instead of the variable named "lastKey"
		set lastKey = the key
		case (lastKey) of
Page 81:
The example is completely wrong. It should read:
		on exitFrame
			if rollOver(25) the go next
Page 81:
The rightMouseDown message also applies to the Mac (not just Windows) if the "emulateMultiButtonMouse" property is set.

Page 87 should read:
Test and set a specific channel's sound level by using the volume of sound property (not "the soundLevel"). You can also use the volume of sprite command to test and set the volume of digital video sprites.

Page 87:
The example is completely wrong. It should read:
	on playThunder whichChannel
		set oldChanVolume = the volume of sound whichChannel
		set the volume of sound whichChannel = 255 

		set oldSoundLevel = the soundLevel
		set the soundLevel = 7

		puppetSound "Thunder"

		repeat while soundBusy(1)
		end repeat

		set the volume of sound whichChannel = oldChanVolume 
		set the soundLevel = oldSoundLevel
Page 89 reads:
"Lingo can keep animation, sounds, and digital video synchronized by starting, stopping, or pausing sound and digital video or by chaning the movie tempo as needed."

The above statement is highly misleading. Lingo does not provide automatic synchronization. You need to manually attempt to synrhronize media via Lingo. The movie tempo is not a reliable method for accomplishing this. You need to use a timer, and manually advance the playback head via Lingo to maintain appropriate synch, as described on the subsequent pages.

Page 90:

In the first example "startTimer" should be one word.

Page 90 reads:
"The first on exitFame handler should appear in the frame preceding the frame that the digital video starts in."

The script shown in the book (which checks the duration of member property) will fail if the digital video sprite is not present in that frame of the Score. The digital video sprite must appear in the score when the script is executed, although the digital video itself may be paused at that time.

Page 91 reads:
"Calculate the number of frames the digital video needs by multiplying the length, in seconds, by the tempo, which is measured in frames per second."

As Director's frame rate is not guaranteed, that method is completely unreliable. Instead of tweening out digital video sprites in the Score, use Lingo to wait for a particular point or to synchronize events.

...much more to come...

Home (Spotlight) | Table of Contents | Links | Contact Info

Place an Order | Products for Sale | Licensing | Downloads

TechNotes | FAQs | E-Mail Zeus | GuestBook | Glossary

[End of Page]

Copyright © 1996-1997. Zeus Productions. All Rights Reserved.

(This page last revised September 27, 1997)