[ANN][Squeak-dev Image] Version 07.6

Damien Cassou 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
> "Morphic":
>
> 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:
>
> step
>                 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
> right.
>
> 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:
>
> 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:
>
> stepTime
>         ^100
>
> 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.
>
>


-- 
Damien Cassou



More information about the Squeak-dev mailing list