Articles Archive
Articles Search
Director Wiki
 

The CBT Primer

December 21, 1999
by Jim Rudnick

I would suppose that as one gets better at their craft, the world seems to open up. That is, what was once hidden becomes apparent and for me lately, that means that I've suddenly become immersed in CBTs (Computer-based Training). Oh, yeah, I know, they're not new...but for me they all of a sudden have become very very big in my Director skillSet.

Knowing as we all do, that using multimedia to teach has a much higher retention rate than the normal educational methodology of lectures or reading lessons, means that CBT can often make the difference in ensuring a client's success rate. And if you count a client's success as a part of your own Director portfolio then you must have learned how to program CBTs, and this article isn't for you. Instead, it's for us "newbies" to CBTs and herein I'll try to show how to track 3 different types of learning AND how to measure if the user has completed same.

As well, a definite part of any CBT is the QUIZ at the end of the course. Here, the client gets to test the passing on of information, by developing a quiz that will test for both comprehension and retention of materials covered in the CBT. In my immediate past, I've worked on B I G projects, where the CBT course-taker had to complete 100% of the CD-ROM or DVD-ROM in some cases; then go on to take a complete quiz, which automatically uploaded their scores to the employer's server -- which then graded that person and notified their boss of the employee's score and even made recommendations about other courses to be taken due to the answers that were given and recorded scores. The little movie I've created here to show you how to create a basic CBT is certainly not going to do that, but note that any course material can be tested at almost any level... all one has to do is to track the user's lessons and their scores.

To set up our CBT Primer, my movieScript is as follows... all selfCommented for you to look over should the need arise. Some of the items that I'm setting up are obvious. First, I set up a list called "completedList" to track that the user has successfully completed the three areas of learning contained in my CBT. Then, I've put in a handler that is called by frameScripts to test to see if the user has completed all 3 of the areas of learning, and if so, then to set the QUIZ button back to a full 100% blend... which will then enable that button to be used.

Here's the movieScript (but remember please, that ALL of the scripting herein is made as simple as can be so that everyone will be able to understand it... from us old "set the memberNum of sprite..." folks to the new dot.syntax gurus who seem to be able to make that switch so effortlessly!)

First we need to initialise some variables in the start movie handler. The movie will use a global list called completedList which tracks the status of each section; either zero or one, with one meaning that the secion is complete. Initially there will be a zero in each position in the list (one for each section) to indicate that the user has not finish any of the sections.

on startMovie
  clearGlobals
  
  global completedList
  
  set completedList = [0,0,0]
  
  -- resetting the text member to the top
  set the scrollTop of member "textField" = 0
  -- above resets the checkmarks to not done for 
  -- each of the three areas
  set the memberNum of sprite 22 = member "textB"
  set the memberNum of sprite 23 = member "simB"
  set the memberNum of sprite 24 = member "vidB"
  
  
end

The checkQuiz handler will be called on to check to see if the user has completed all three of the necessary parts of this CBT. Note, that I've done something a little different here, in that should the user have finished, then I've reset the blend of the QUIZ button back to a full 100%. For more details on this, look at the script for the QUIZ button itself which is castmember # 34.

on checkQuiz
  global completedList
  
  if completedList = [1,1,1] then
    -- user has done all three parts of the CBT
    set the blend of sprite 19 = 100
    -- this button will only work if its blend 
    -- is at 100% BTW...
  end if
end

on stopMovie
  clearGlobals
  beep
end

Once the movie is up and running and goes to the MENU area, you are presented with the three areas of learning -- via text, simulation or video. Each of these text buttons will take you to their respective areas and each of them has an "unchecked" checkmark. Successful completion of each of these areas will simply switch that castmember with a "checked" one...a good idea to keep the user aware of how they're doing on the completion of the CBT learning course. Along the right hand edge of the stage sit the three buttons that allow the user to go BACK from any point in the movie; to go to the QUIZ area but only if that button is enabled -- tracked by the list "completedList" as was set up in the movieScript -- and the ubiquitous QUIT button, which does only that. Note, too, that this is a very simple CBT, but in my experience, you often have to save out the user's current progress as a part of the QUIT functionality... a chore we didn't concern ourselves with here.

But on to the CBT itself. First comes text. You're reading some right now. Text has always been the first step in learning, and for some, it's the only step. That said, I believe that text is a solid teacher, but that (as always) the content and its presentation/style makes or breaks the learning experience. Remember that last DULL book you read, or that magazine article that had that great headline or even a great lead, but somewhere just past paragraph 3 you were bored silly... and turned the page? That's what I mean by presentation/style, and while this article is not a 'how to write' course, anyone beginning to program CBTs should remember that the content will often be boring and dull, so we have to test for the completion of the materials in some fashion. It's not enough to just think that the user will read everything because there's a quiz later; instead we'll track their actual use of the text materials. To do that, here's the script that I've written to check that the user read every line of the material...

I put the following in a frameScript where the text block was available for the user to read...

on exitFrame
  global completedList
  
  set bottomsUp = locVToLinePos(member "textField", 120)
  
  if bottomsUp > 128 then
    deleteAt completedList, 1
    addAt completedList, 1, 1
    checkQuiz
    
  end if
   go to the frame
end

To explain this script, here's the skinny. First of all, the lingo command "locVToLinePos()" is used to track the line number of the text member that was scrolled -- to a certain locV of that sprite itself (that is, from the top to the bottom of the scrolling window itself) -- by the user. This text member has 129 lines in it, I know as I counted them and you have to to make this work...and note that word wrapping won't work here... you have to hit ENTER at the end of each line to create a line that can be counted. This command tracks the location of any line of that text member as it 'hit's' the locV that I spec in. That is, if this text member has 129 lines, then I want to know when line number 129 (the end of that text member) hits the bottom of the scrolling window holding that text member...or locV of 140. The total height of this scrolling text member is 145 pixels, so I'm about at the bottom. And while this is rather elementary for the most part, until I started working on CBTs lately, I'd never even heard of this command, let alone used it. But there it is...simple and neat!

Oh, I know... so I'm tracking on whether or not the user actually scrolls the complete text member... what happens if they do, but they don't learn the contents of same? Dunno, that's not my worry, says I. My job is to track that they've HAD the opportunity to learn, not that they did -- the QUIZ will track that for me! My other job, is to update the list "completedList" which we do, by changing the first entry (for the text area) from a 0 to a 1, indicating that the user has completed this area.

Once the user has scrolled the complete text member, they can go back to the MENU by clicking on the BACK button. And in doing so, they now see that there is a checkmark beside the TEXT button, indicating that they've finished this area of learning.

Next, comes our Simulation area, and for this little movie, it's very, very simplistic. All I did was to ask the user to place the three greyScale lineart illustrations of the lion's favorite prey over their silhouettes. Easy, perhaps too easy, but for the most part this is the style and type of user interaction often used in CBTs. Explain something to the user, either via text or pictures and then get them to mimic your recommendations. That's all we did here. To help, I've made the name of the prey "light-up" if the user gets the illustration exactly where it belongs.

This is a fairly long frameScript so let's go through it thoroughly.

This handler does use many hardcoded variables, but only to show you which sprites relate to which shapes. What you want to do here is test for the giraffe (and then the monkey and finally the zebra) to see if it's on top of its silhouette. If it is, then change the colour of the girafee title to let the user know that the placement is correct and increment the simFinish variable. This variable will track how many animals the user has correctly placed.

on exitFrame
  global completedList
  
  set simFinish = 0
  if the loc of sprite 15 = the loc of sprite 10 then
    set the ink of sprite 25 = 6
    set simFinish = simFinish + 1
  end if
  
  if the loc of sprite 15 <> the loc of sprite 10 then
    set the ink of sprite 25 = 36
    -- used just to reset the color of the GIRAFFE text
    -- to its original if the user hasn't placed 
    -- the artwork correctly...
 end if
  if the loc of sprite 16 = the loc of sprite 11 then
    set the ink of sprite 26 = 6
    set simFinish = simFinish + 1
     -- same for the monkey here
  end if
  
  if the loc of sprite 16 <> the loc of sprite 11 then
    set the ink of sprite 26 = 36
  end if
  if the loc of sprite 17 = the loc of sprite 12 then
    set the ink of sprite 27 = 6
    set simFinish = simFinish + 1
    -- same for the zebra here...    
  end if
  
  if the loc of sprite 17 <> the loc of sprite 12 then
    set the ink of sprite 27 = 36
  end if
  
  if simFinish = 3 then
  
    deleteAt completedList, 2
    addAt completedList, 2, 1
    checkQuiz
    
  end if
  
  go to the frame
  
end

The last thing the handler does is check the simFinsihed variable to see if the user has successfully placed all three animals. If the variable simFinish = 3, then all 3 of the pieces have been properly placed and the user has completed the simulation section so I update my completedList to record a 1 in the second location...

And if the user has completed this section, we make a call to the checkQuiz handler to test to see if the user has now finished all the sections in the CBT.

So far then, we've checked that the user has completed 2 of our three parts of the CBT and that hopefully as they know that there is a Quiz coming up, that they have actually learned the materials too... Moving to our last section, the Video one is again a lesson on making sure that the user watches the complete video, from start to finish -- and we leave the learning to them. Here's the frameScript that I used to track the viewers Video watching.

To track whether or not the user has watched the whole video, we simply set a variable to the length of the movie, and then when the movie is done it will set that variable to TRUE.

on exitFrame
  global completedList
  
  -- still tracking the list to see if is completed yet...
  
  set videoDone = member(28).duration
  if the movieTime of sprite 10 < videoDone then
    -- do nothing
  else
    deleteAt completedList, 3
    addAt completedList, 3, 1
    checkQuiz
  end if
  
  go to the frame
end

Well, that's about it when it comes to simple methodology to track a user's progress through a CBT, and yup there are many more, much more difficult ways to do same. Worked on some of those and they were very detailed and involved objects and OOP and lotsa bug killing. But for easy to use, simple methodology, the three methods outlined herein work just fine.

Oh, the Quiz....well, if you finished all three of the sections, then clicked on the QUIZ button, you should have found that this little puppy is all about CBT functionality... and not QUIZ stuff. That's for my next article! Let me know how you think that QUIZ should be too, if you'd like. Multiple choice? True/False? Short answers? They're all done all of the time, and I'll try to cover lots of them! Bye and remember, when it comes to CBTs... you can lead a horse to water but you can't let 'em drink till they've finished every section!

A sample movie is available for download in Mac (481K) or PC (371K) format. The sample movie requires a fairly large QuickTIme file to fully function. It is available as a separate download in ZIP (2.5 MB) format.

Beginning with HyperCard on a Mac Plus over 12 years ago, Jim began his digital career as a developer, programmer and owner of his own multimedia firm, KKT Interactive. Moving from HyperCard to SuperCard was a natural transition, as was the move to Director 4.0 almost 5 years ago. Since then, Jim has worked on honing his knowledge by teaching both Director and Lingo for community colleges and digital studios in and around the Toronto area. Jim was also a member of the Director 6 BetaTeam, which successfully brought that version of Director to the marketplace in mid 1997. Jim's true strengths are his ability to create assets while conceiving, coding and test programming routines at great length, all the while remaining on-time and on-budget contracting for clients that include QuakerState Oil, MercedesBenz, Reuters, the AdLib AdAgency, Simon & Schuster, SAAB, the New York Yankees and the VanHorne Winery.

Copyright 1997-2017, Director Online. Article content copyright by respective authors.