230 likes | 247 Views
Learn about guidelines for class-level methods, parameterized versions, expressions, built-in functions, and more in visual programming. Improve your coding skills today!
E N D
CS320n –Visual Programming Class-level Methods and Inheritance – Part 2 Mike Scott (Slides 4-3-2) Thanks to Wanda Dann, Steve Cooper, and Susan Rodger for slides.
What We Will Do Today • Work on more class level methods • Learn about built in functions • Learn to use expressions • Review the asSeenBy option Class Level Methods - Part 2
Guidelines for Class-Level Methods • Should a method be a class-level method or a world-level method? • For class level methods • avoid hard coded references to other objects • avoid calls to world level methods • Play a sound only if has been imported and saved as part of the new class. (sounds can be imported to world or individual objects) • If these guidelines are not followed and an instance of a class is added to another world, an error message is generated Class Level Methods - Part 2
Bad Example 1 A class level method should not call world-level methods. Class Level Methods - Part 2
Bad Example 2 Class Level Methods - Part 2
But I want to skate around things • Is it reasonable to want a class-level method for the advanced skater where she skates around things? • In this particular case, a penguin? Class Level Methods - Part 2
Solution • A solution is to write a class-level method with an object parameter that allows you to pass in the specific object. cleverSkater.skateAround Parameter: whichObject Do in order Do together cleverSkater turn to face whichObject cleverSkater lift right leg cleverSkater move to whichObject cleverSkater turn around whichObject Class Level Methods - Part 2
Parameterized Version of skateAround • Making the object to skate around a parameter now removes the tie to the penguin in this world calling skateAround Class Level Methods - Part 2
Translating design into code • Most of the skateAround storyboard design is straightforward and easy to code. • The last two steps, however, require some thought: advancedSkater move to target -- What distance should the cleverSkater move? advancedSkater turn around target -- how do we tell cleverSkater to turn (in a circle) around another object? Class Level Methods - Part 2
The distance to move • We can work out how far to move the skater based on initial position of objects and a little experimentation • Pick a distance, play the movie, more or less, refine until it looks good • Is this a very general solution though? • only works for one initial set up • look to make it work for many set ups Class Level Methods - Part 2
Built-in Functions. (a.k.a. questions) • The built-in function, distance to can be used to determine the distance the skater must move. Class Level Methods - Part 2
Calling the Function • drag and drop the function advancedSkater distance to from the function menu to the distance portion of the move method and pick expressions -> target • call to move looks like this now Class Level Methods - Part 2
Problem? • What will happen when the skateAround method is called? Class Level Methods - Part 2
Too Much • Skater intersects penguin • told to move forward the distance to the target • moves skater all the way so centers of objects coincide • distance measured center to center Class Level Methods - Part 2
Expressions • We don’t want the skater to move all the way to the target • to avoid collision use math operator and create an expression that moves to within 2 meters • Math operators is Alice: +, -, *, / • Example: Class Level Methods - Part 2
Creating an Expression 1 3 2 4 Class Level Methods - Part 2
More on Expressions • Creating expressions with the pop up menus can be a pain • In this case, text based programming languages may be easier to use Class Level Methods - Part 2
Result of Expression Stops before running over penguin And skates around What if alreadyless than 2 metersfrom an object? Class Level Methods - Part 2
asSeenBy • To have the skater skate around another object, pass whichObject as an argument to the asSeenBy parameter in a turn instruction. • yes, passing a parameter to another method as a parameter • For more details on asSeenBy, review Tips & Techniques 2. Class Level Methods - Part 2
More on AsSeenBy • Use invisible objects or dummy objects (isShowing property set to false) to have objects fly around in circles • Example: Have gunfighters circle each other Class Level Methods - Part 2
Circling Gunfighters Class Level Methods - Part 2
Testing • Each time you create a new class, test it: • Add an instance of the new class to a new world. • Write a short testing program to test each new method. • Testing increases your confidence in the ability to reuse your code in other worlds. Class Level Methods - Part 2