[Part 6 of 8]
The next manifestation of our movie adds the opposite behavior-starting with a fully-boxed image and ending up with a regular image. This version still uses a button to implement the transition, but provides a transition to a new image. With a little work, this sort of implementation could be used to progress through a series of images. You might, for example, create a list of member references and then cycle through them. The movie is simplified by using hard-coded references to the original and new images, but converting to variables would be simple. Here's the new version, including the second image (did I mention that that's me in the pictures?).
Getting weird characters when you try to download? Right-Click (Win) or Ctrl-Click (Mac) and use SAVE THIS LINK AS... and select SOURCE in the dialogue box
The startMovie and stopMovie handlers in the movie script are identical to the previous versions. The mouseUp handler is only changed by the addition of a global variable gOutgoing that lets the movie know whether the image is the "from" image getting boxy (gOutgoing = TRUE) or the "to" image that is getting less boxy.
on mouseUp global stepNumber, isTransforming, gOutgoing isTransforming = TRUE stepNumber = 1 gOutgoing = TRUE -- Means alter the FROM image, -- as opposed to the NEXT image. end
The exitFrame handler, on the other hand, has some extensive changes. Like the exitFrame handler in the mosiac2 movie, this behavior is intended to be dropped onto a sprite. Notice how the gOutgoing variable is used to determine whether the "from" image is being modified or the "to" image:
on exitFrame global stepNumber, isTransforming, gOutgoing, gSourceImage if isTransforming = TRUE then w = member("crouchA").width h = member("crouchA").height -- Create an image object imSource = image(w, h, the colorDepth) -- Create an image object that is -- smaller, but watch out for -- divide-by-zero. if stepNumber <> 0 then imSmall = image(w/(stepNumber*4), h/(stepNumber*4), the colorDepth) else imSmall = image(w, h, the colorDepth) end if if gOutgoing then imSource = member("crouchA").image.duplicate() stepNumber = stepNumber + 1 if stepNumber > 10 then stepNumber = 10 gOutgoing = FALSE end if else -- Now to bring in the new image -- New image needs to start off in -- mosaic form imSource = member("standA").image.duplicate() stepNumber = stepNumber - 1 if stepNumber = -1 then isTransforming = FALSE end if end if imSmall.copyPixels(imSource, imSmall.rect, imSource.rect) imSource.copyPixels(imSmall, imSource.rect, imSmall.rect) gSourceImage.image = imSource sprite(1).member = gSourceImage end if end
For the outgoing modification process the same stepNumber counter is used, only this time it counts down instead of up. As the counter gets smaller, so do the sizes of the mosaics used in the modification. Everything else, such as the copyPixels operations, works pretty much the same as before.