racket/collects/htdch/graphics/GameWorld.djava
2006-07-06 22:30:02 +00:00

59 lines
1.5 KiB
Plaintext

package graphics;
import scheme.lib.htdch.graphics.rename;
import scheme.lib.mred.mred;
public abstract class GameWorld extends World {
dynamic timer;
public GameWorld() {
super(new View());
}
public World endOfWorld() {
timer.stop();
return this;
}
World nextWorld = this;
void oneStepPrivate(World oldWorld, World newWorld) {
((GameWorld) newWorld).timer = ((GameWorld) oldWorld).timer;
newWorld.display = oldWorld.display;
display.allowImage(false);
// oldWorld.erase();
newWorld.draw();
display.allowImage(true);
}
//Produces a World that will animate with a clock tick of rate
public final boolean animate( int width, int height, int rate ) {
class TimerCallBack {
public void callBack() {
World old = GameWorld.this.nextWorld;
GameWorld.this.nextWorld = GameWorld.this.nextWorld.onTick();
GameWorld.this.oneStepPrivate(old, GameWorld.this.nextWorld);
}
}
class KeyCallBack {
public void callBack(String key) {
World old = GameWorld.this.nextWorld;
GameWorld.this.nextWorld = GameWorld.this.nextWorld.onKey(key);
GameWorld.this.oneStepPrivate(old,GameWorld.this.nextWorld);
}
}
display.display(width, height);
dynamic tCB = new TimerCallBack();
display.keyCallBack(rename.innerToFunction(1, new KeyCallBack()));
timer = rename.newObject(mred.timerObj, rename.innerToFunction(0,tCB));
timer.start(rate, false);
return true;
}
}