SlideShow with custom transition
From Directorforum Collaboration Wiki
This example demonstrates how to generate custom transitions with Imaging Lingo and a single bitmap image sprite.
Contents |
SlideShow
Description
This example consists of 1 single bitmap image sprite, a frame script (frameloop) and one behavior attached to the bitmap sprite.
The behavior uses two castlibs to generate the slideshow. First castlib is called "lbxSlides" and contains all the images of the slideshow. The second castlib is called "lbxTransition" and contains the individual frames of our custom transition. These transition images must be grayscale to avoid performance killing grayscale conversion on runtime!
You can create your own custom transitions and it's completely up to you how many images the transition is made of. Just make sure, you set the timeout object (pTransitionTime) to an interval > transition time.
Lingo Code
-- lbxAnimatedTransition.ls -- initial version by Martin Schaefer property pSprite, pMember property pTransitionCast property pTransFrameTotal property pTransFrameCount property pTransitionActive property pTransitionAlpha property pTransitionTime property pTransitionImage property pSlidesCast property pSlidesList property pSlidesCount property pShowTimer property pCurrentSlide property pNextSlide on beginSprite me -- basic properties for slideshow bitmap sprite pSprite = sprite(me.spriteNum) pMember = pSprite.member pMember.image.useAlpha = FALSE -- CUSTOM PROPERTIES FOR SLIDESHOW (only edit here!) ---- set transition effect castlib pTransitionCast = castLib("lbxTransition") ---- select the castlib containing the slides pSlidesCast = castlib("lbxSlides") ---- set total duration of each frame (incl. transition duration) pTransitionTime = 4000 -- /CUSTOM PROPERTIES FOR SLIDESHOW -- transition properties pTransitionImage = image(pMember.image.width, pMember.image.height, 32, true) pTransFrameTotal = pTransitionCast.member.count pTransFrameCount = 1 pTransitionActive = FALSE pTransitionAlpha = image(pMember.image.width, pMember.image.height, 8, #grayscale) -- get all slides from selected castlib pSlidesList = [] castMemberCount = pSlidesCast.member.count if castMemberCount > 0 then repeat with i = 1 to castMemberCount pSlidesList.add(pSlidesCast.member[i]) end repeat pSlidesCount = pSlidesList.count end if -- set initial slide to be displayed pMember.image = pSlidesList[1].image -- set timeout for each frame transition pShowTimer = timeout().new("lbxSlideshowTimer", pTransitionTime, #lbxTransition, me) end on endSprite me pShowTimer.forget() pShowTimer = VOID pMember.image = pSlidesList[1].image pTransitionImage = VOID pTransitionAlpha = VOID end on enterFrame me if pTransitionActive = TRUE then lbxComposeTransitionFrame() end if end on lbxTransition -- switch transition state to active if pSlidesCount > 1 AND pNextSlide < pSlidesCount then pCurrentSlide = pCurrentSlide + 1 pNextSlide = pCurrentSlide + 1 pTransitionActive = TRUE else if pSlidesCount = 1 then -- no transition with 1 slide only pTransitionActive = FALSE else if pSlidesCount = 0 then -- no slides found in selected slides castlib pShowTimer.forget() pShowTimer = VOID alert "No slides available!" end if end on lbxComposeTransitionFrame -- compose transition frames while transition is active if pTransFrameCount <= pTransFrameTotal then pMember.image.copyPixels(pSlidesList[pCurrentSlide].image, pMember.image.rect, pSlidesList[pCurrentSlide].image.rect) pTransitionImage.copyPixels(pSlidesList[pNextSlide].image, pMember.image.rect, pSlidesList[pNextSlide].image.rect) pTransitionImage.useAlpha = TRUE pTransitionAlpha.copyPixels(pTransitionCast.member[pTransFrameCount].image, pTransitionAlpha.rect, pTransitionCast.member[pTransFrameCount].image.rect) pTransitionImage.setAlpha(pTransitionAlpha) pMember.image.copyPixels(pTransitionImage, pMember.image.rect, pTransitionImage.rect) pTransFrameCount = pTransFrameCount + 1 else pSlidesList[pCurrentSlide].unload() pTransFrameCount = 1 pTransitionActive = FALSE end if end
Download
lbxTransitionDemo.zip - D11 project file (3.12MB)
The below Transition Packs are 960x540px and should scale up or down nicely in your project. If you want to create you own transition packs ... the above behavior is open to any size you want.
Soft Organic Transitions
- lbxTransition01.zip - Castlib (2.79MB)
- lbxTransition02.zip - Castlib (3.60MB)
- lbxTransition03.zip - Castlib (2.52MB)
- lbxTransition04.zip - Castlib (2.51MB)
- lbxTransition05.zip - Castlib (1.27MB)
- lbxTransition06.zip - Castlib (2.02MB)
- lbxTransition07.zip - Castlib (1.87MB)
- lbxTransition08.zip - Castlib (1.70MB)
- lbxTransition09.zip - Castlib (2.33MB)
- lbxTransition10.zip - Castlib (2.11MB)
- lbxTransition11.zip - Castlib (0.86MB)
- lbxTransition12.zip - Castlib (1.56MB)
- lbxTransition13.zip - Castlib (2.12MB)
- lbxTransition14.zip - Castlib (1.56MB)
- lbxTransition15.zip - Castlib (2.08MB)
- lbxTransition16.zip - Castlib (1.53MB)
Wipe Transitions
- lbxBlockDissolve.zip - Castlib (0.02MB)
- lbxBlockDissolveSmall.zip - Castlib (0.04MB)
- lbxDoorsWipeHor.zip - Castlib (0.09MB)
- lbxDoorsWipeVer.zip - Castlib (0.09MB)
- lbxGridWipeDoors.zip - Castlib (1.46MB)
- lbxGridWipeRadial.zip - Castlib (1.31MB)
- lbxGridWipeRect.zip - Castlib (1.31MB)
- lbxIrisWipe.zip - Castlib (0.04MB)
- lbxJawSpikes.zip - Castlib (0.07MB)
- lbxJawSpikesRot.zip - Castlib (0.25MB)
- lbxVenetianBlinds.zip - Castlib (0.04MB)
- lbxVenetianBlindsSoft.zip - Castlib (0.12MB)
- lbxVenetianBlindsSoftRot.zip - Castlib (1.64MB)
If you want to contribute some more self-made Transition Packs ... well, go ahead :)

