[ANN][Squeak-dev Image] Version 07.6
damien.cassou at gmail.com
Tue Jun 19 10:14:54 UTC 2007
I think it's the wrong thread. Please post again somewhere else :-)
2007/6/19, Blake <blake at kingdomrpg.com>:
> 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