Checking for Collisions: Using Functions in Alice By Henry Qin

advertisement
Checking for Collisions:
Using Functions in Alice
By Henry Qin
under the direction of
Professor Susan Rodger
Duke University
July 2008
Step 1: Building the World
This tutorial will demonstrate how to use a tool called a Function in Alice, to tell if
one object is relatively close to another object. In order to do this we will build a
simple world and a simple function to tell if two objects are colliding (on top of
each other).
To build it simply choose a
grass scene in Alice and add
a bunny and a cow from the
animals folder of the local
gallery.
Step 2: Creating a Function
The first thing that we need to do is create a function in the
world.
Click Done to go back to the main window.
Click on world in the object tree and and then the
functions tab.
Click on the gray “Create new function” button.
We are going to name this one “overlapTest.”
Make sure you select the Boolean type.
After you write the name a green tab should appear
on in your method editor.
Step 3: If/Else Condition
Next we need to drag an if/else
statement into the place that
currently says “do nothing.”
Select true.
Now lets go to world level
functions and drag the a < b tab
over the true in the if/else.
Just pick 1 for
both a and b,
they are simply
place holders for
the moment.
Step 3: If/Else Condition
For the first 1 we are
going to go to the cow’s
functions and choose
“cow distance to” bunny,
(the entire bunny).
Now find the function labeled “cow’s width.” Drop on top of the 1 in
the second space.
Step 3: If/Else Condition
Now, click on the down arrow
immediately next to width and select
math.
Select “cow’s width /” and 2 to divide
the width in half.
Click on the down arrow next to the “2 )”. Select math again and
choose “(cow’s width / 2) +” and choose 1 as a placeholder.
Step 3: If/Else Condition
Replace the 1 with the same
expression only this time using the
bunny. Drag in bunny’s width from the
bunny’s functions over the 1. Select
the down arrow next to bunny’s width
and select math. Select “bunny’s
width /” and 2 to divide the width in
half.
Step 4: Return Statements
This function is going to check and see if the cow is closer than the length of the cow’s
width to the bunny. In other words, is the cow colliding with the bunny? We want to
return “true” if the cow is overlapping with the bunny.
Drag a Return statement into the first Do Nothing and select true.
Drag a second Return statement into the remaining Do Nothing and select
false. Since if the cow and bunny aren’t close enough, they are not
colliding.
Step 5: Calling the Function
Now we need to write a
method to call this
function. Lets go into
World.myfirstmethod
and drop in an “if
statement.”
Now drop in your “overlapTest” function on top of the “if statement.”
We want the cow to say
something if overlapTest is
true. Let’s have him say, “We
are colliding, how can this be?”
Step 5: Calling the Function
Now, in the else statement have
the cow say, “Checking… we
are not colliding.”
Now play your world.
Since the cow is next to the bunny
he should say “Checking…..we are
not overlapping.”
Step 5: Calling the Function
Now drag the cow on top of your
bunny in the add objects screen
and play it again.
The cow should say “We are
colliding, how can this be?”
You can use functions like this in your Alice worlds to determine if objects in your
world are within a certain distance of each other. Check out some of the example
worlds that require colliding with another object (such as games where try to
catch something) to see how we can use this code.
That’s all folks!
Download