[ANN][Squeak-dev Image] Version 07.6

Blake blake at kingdomrpg.com
Tue Jun 19 08:35:10 UTC 2007

OK, the graphic system in Squeak is called MORPHIC. Whereas before you  
descended your new classes from "Object", now you descend them from  

Morph subclass: #TestMorph
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Max-Morphic'

When a morph wants to draw itself, it calls the drawOn: method. You would  
override this method to make the morphic look like something. For now, our  
morphic will just look like a blue square (the default drawOn does that),  
so we won't have a drawOn method.

OK, now that we have a new morph, let's create an instance. But morphs  
don't exist in a vacuum, they have to exist in a morphic world. Try this  
in a transcript:

TestMorph new openInWorld.

When you "do it", you should see a blue square in the upper left of the  
screen. The morphic world controls when the morphs that are in it (the  
morphs that it "owns") move. A morphic that responds to the passage of  
time is said to be "stepping". If a morphic is stepping, the world calls  
its "step" method.

So, create a step method:

		self position: self position+(1 at 1).

A morphic has a position (or "point") on the screen. Whaat this line of  
code does is say "take the current position and add one to its x position  
and one to its y position". This will move it diagonally. So, if you save  
this, the morphic should start moving, slowly, diagonally toward the lower  

We want to be able to control how the movement starts and stops, so we'll  
make the morphic handle mouse events. We do this by overriding the  

handlesMouseDown: evt
	^ true

then having a mouseDown event:

mouseDown: evt
         	(self isStepping) ifTrue: [self stop] ifFalse: [self start].

"isStepping" is a Morphic event that retruns true if the morphic is  
stepping (responding to time events, remember?), start causes a morphic to  
start stepping, and stop causes it to stop.

So, if you click on the morphic now, it'll start moving unless it is  
moving already, in which case clicking on it will cause it to stop.

The morphic will probalby be moving slowly. I think, by default, a morphic  
world sends one message per second to a morph. But you can request more  
frequent updates with the stepTime method:


The amount returned in stepTime is the number of milliseconds between  
calls to step. So, if yous et it to 1000, our morph will momve about once  
a second (slow). The above is 100 milliseconds, or ten moves a second. On  
my machine, returning a value of 15 is about as fast as it will go. (Less  
than 15 shows no change.) I think "0" means "Go as fast as you can".

In game programming, the timing of steps is critical, so you'll figure out  
how fast the fastest thing can go, and base everything around that.

	This should get you started.

More information about the Squeak-dev mailing list