[Squeakland] Bouncing?

Scott Wallace scott.wallace at squeakland.org
Tue Jan 9 06:06:19 PST 2007

Hi, Bob,

Short answer:  The "bounce" of etoys doesn't do what you, or any  
reasonable person, might expect it to.  So yes, you are best off  
computing coordinates directly in your own scripts, rather than  
trying to use "bounce".

Within its limited range of ability, "bounce" can be useful for  
keeping moving objects onscreen without too much effort.

Beyond that, however, "bounce" is a pretty strange beast, best avoided.

However, for anyone still interested, read on...


When I tell a ball "Ball forward by 10" I expect to see it move  
forward, and it does.  When I tell a ball "Ball bounce croak", I  
might well expect to see and hear something happen, some sort of  
reversal of direction, some sort of froggy sound, but instead it  
doesn't seem to do anything.  Why is that?

It's because Squeak's "bounce" has a very narrow and less-than- 
obvious meaning, something along the lines of:  "If I've just crossed  
the edge of my container, then change my direction and position to  
make me appear to have just bounced off the edge and returned to the  

Unless scripts affecting the position of your object have just made  
it cross the edge of its container (from a position previously wholly  
within the container,) telling it to "bounce" will appear to have no  
effect.   Unlike any other etoy command, it has its own implicit,  
built-in "conditional" or "Test" having to do with the motion brought  
about by currently-running scripts, relative to where the edges of  
the container are.  This bit of magic can be used to nice effect in  
some demos, but in practice it's pretty strange if you try to harness  
it for anything interesting.

To meet the beast head-on, paint a Frog, rotate it slightly, drop it  
into a Playfield, then build the script:

	Frog forward by 5
	Frog bounce croak

When you set this script to ticking, the Frog repeatedly goes forward  
by 5 units, but it does not repeatedly "bounce", by any reasonable  
interpretation of the word "bounce", nor does it croak -- in fact the  
bounce request doesn't seem to do anything at all.

Until... the Frog approaches the boundary of its container.  When it  
reaches or crosses such an edge, because of the "bounce" command, it  
magically gets its heading, its x, and its y adjusted to give the  
appearance of "bouncing off the edge of the container".  And only  
then is the croak heard.

This is all that "bounce" can do.  You don't get to choose what the  
object is to bounce off *of* (if the bounce does happen, it will  
always bounce off of whatever edge of its container it has just  
crossed,) nor by how *much* it should bounce (that is computed based  
on its imputed speed, which is based on where it was before and where  
it would be without the bounce afterward) -- nor even *when* the  
bounce will take place (that is based on the "just-reached-edge-of- 
container" test implicitly built into the "bounce" command.)

So to summarize... because of the above limitations, and because or  
the maddening fact that when you tell an object to bounce it usually  
does nothing, I do not  recommend using "bounce" for anything except  
for those familiar, simple "forward by/bounce" scripts.

It would be interesting to hear some suggestions and discussion on  
this list regarding possible improvements to the set of commands in  
the standard etoy vocabulary.


   -- Scott

On Jan 5, 2007, at 4:00 PM, Bob Irving wrote:

> Hi all,
> I've been doing some searching on this topic and haven't been able  
> to find answers to my questions. So....
> I'm trying to use the bounce command in games (like Pong). Can  
> anyone explain to me -
> 1. Does bounce require a playfield to bounce off? I've tried  
> testing to see if a ball's color see the color of a wall, and then  
> bouncing if it does. But that doesn't seem to work. I know the  
> ball's color can see the wall's color, because I've also had it  
> croak if it sees the wall. The ball croaks and keeps on going  
> through the wall.
> 2. Exactly how is the bounce calculated? When I put the ball in a  
> playfield, then make a colored box the same size as the playfield,  
> it will bounce and most of the time the bounce is "true". Every so  
> often the bounce is the opposite of what you expect. Does anyone  
> know why this is? Would I be better off to use a variable for the  
> heading and calculate it, thus inducing the correct "bounce"?
> I hope these questions are clear.
> Thanks in advance,
> Bob Irving
> Middle School Technology Facilitator
> Lancaster Country Day School
> Lancaster, PA
> Blog: http://cougar.e-lcds.org/wordpress/
> "In times of change, learners inherit the earth, while the Learned  
> find
> themselves equipped to deal with a world that no longer exists."
> Eric Hoffer
> _______________________________________________
> Squeakland mailing list
> Squeakland at squeakland.org
> http://squeakland.org/mailman/listinfo/squeakland

More information about the Squeakland mailing list