racket/collects/teachpack/htdp/Docs/world.thtml
Matthias Felleisen 68dd06713a svn: r9413
2008-04-22 23:50:17 +00:00

113 lines
4.2 KiB
Plaintext

{ (define LIBNAME "Animated Images, Simulating Worlds")
(include "head.tinc") }
<ol>
<li><code>{(idx big-bang)} : Nat Nat Number World -> true</code><br>
<code>(big-bang width height n w)</code>
creates and shows a <code>width</code> x <code>height</code> canvas,
starts the clock,
makes it tick every n seconds,
and makes w the first world
<li><code>{(idx big-bang)} : Nat Nat Number World Boolean -> true</code><br>
<code>big-bang</code> takes an optional fifth argument. If it is
<code>true</code>, the world allows the generation of images from the
animation, including an animated GIF image
<li><code>{(idx on-tick-event)} : (World -> World) -> true</code><br>
<code>(on-tick-event tock)</code> means that DrScheme must call <code>tock</code>
on the current world every time the clock ticks; it uses the result as the next world
<li><code>{(idx on-key-event)} : (World KeyEvent -> World) -> true</code><br>
<code>(on-key-event change)</code> means that DrScheme must call
<code>change</code> on the current world and a (representation of the)
keyevent for every keystroke the programmer (user of the computer) makes; it uses
the result as the next world
<pre>
<code>
;; A KeyEvent is one of:
;; -- Char (char?)
;; -- Symbol (symbol?)
</code>
When the Keyevent is a char, the programmer (user of the computer) has hit an
alphanumeric key. Symbols such as <code>'left</code>, <code>'right</code>,
<code>'up</code>, <code>'down</code>, <code>'release</code> denote arrow keys
or the events of releasing a key on the keypad.
</pre>
<li><code>{(idx on-mouse-event)} : (World Nat Nat MouseEvent ->
World) -> true</code><br> <code>(on-mouse-event clack)</code> means that
DrScheme must call <code>clack</code> on the current world, the current
<code>x</code> and <code>y</code> coordinates of the mouse, and and a
(representation of the) mouse event for every action of the mouse the
programmer (user of the computer) makes; it uses the result as the next
world
<pre>
<code>
;; A MouseEvent is one of:
;; - 'button-down
;; - 'button-up
;; - 'drag
;; - 'move
;; - 'enter
;; - 'leave
</code>
The symbols denote the appropriate action with the mouse and (any of)
its button(s).
</pre>
<li><code>{(idx on-redraw)} : (World -> Scene) -> true</code><br>
<code>(on-redraw world->scene)</code> means that DrScheme calls
<code>world->image</code> whenever the canvas must be redrawn (usually
after a tick event/a keyboard event/a mouse event has occurred);
the function consumes the current world and produces a scene, which is
then displayed in the teachpack's canvas
<li><code>{(idx end-of-time)} : String u Symbol -> World</code><br> When DrScheme
evaluates <code>(end-of-time "the end")</code>, it stops the clock and displays the
given string or symbol; no further tick events, key events, or redraw events
take place until the world is created again.
</ol></p>
<p>For the creation of scenes from the world, use the following functions
plus the functions on images below:
<ol>
<li><code>{(idx nw:rectangle)} : Nat Nat Mode Color -> Image</code><br>
<code>(nw:rectangle width height mode color)</code>
creates a width x height rectangle, solid or outlined,
with its anchor in the NW corner
<li><code>{(idx scene+line)} : Scene Number Number Number Number Color -> Scene</code><br>
<code>(scene+line scene x0 y0 x1 y1 c)</code>
places a line of color <code>c</code> from <code>(x0,y0)</code> to
<code>(x1,y1)</code> into <code>scene</code>;
<code>(x,y)</code> are comp. graph. coordinates;
in contrast to the {(idx image.ss)} <code>add-line</code> function, this
one cuts off those portions of the line that go beyond the boundaries of
the given <code>Scene.</code>
<li><code>{(idx run-movie)} : (Listof Image) -> true </code><br>
<code>(run-movie loi)</code>
shows the list of images in loi in a time-delayed manner;
assume: all images are of the same size
</ol></p>
<hr />
<h3>Image Manipulation</h3>
<p>Finally, the teachpack provides all the functions that image.ss
provides. For completeness, the documentation of this teackpack is
included here:
{(include "image-content.tinc")}
</p>
{(include "foot.tinc")}