HTML5 Games
Bejeweled
Quake II
Bejeweled
Quake II
Emberwind
Tank World
public class MyGame implements Game { public void init() { // initialize game. } public void update(float delta) { // update world: // delta indicates the time-step } public void paint(float alpha) { // render world: // alpha indicates time in the range [0, 1) between world frames }} |
pointer().setListener(new Pointer.Adapter() { public void onPointerStart(Pointer.Event event) { // Handle mouse down event. }});keyboard().setListener(new Keyboard.Adapter() { public void onKeyDown(Event event) { // Handle key down event. }}); |
public void init() { bg = graphics().createSurfaceLayer(); graphics.rootLayer().add(bg); Layer catGirl = graphics().createImageLayer('catGirl.png'); graphics.rootLayer().add(catGirl);}public void paint(float alpha) { Surface surf = bg.surf(); surf.clear(); surf.drawImage(cloud, cloudX, cloudY);} |
public void init() { Sound music = assets().getSound('ambient.mp3'); music.setLooping(true); music.play(); squawk = assets().getSound('squawk.mp3');}public void somethingHappened() { squawk.play();} |
public void init() { Image image = assets().getImage('bird.png'); Sound sound = assets().getSound('squawk.mp3'); // Completion callbacks are available image.addCallback(new ResourceCallback<Image>() { public void done(Image resource) { imageReady = true; } public void error(Throwable err) { imageFailed(); } }); // Text is necessarily async assets().getText('level.json', new ResourceCallback<String>() { public void done(String resource) { loadLevel(json().parse(resource)); } public void error(Throwable err) { gameOver(); } });} |
public void saveState() { Writer json = json().newWriter(); json.key('id'); json.value(playerId); json.key('score'); json.value(playerScore); net().post('/saveState', json.write(), new Callback<String>() { public void onSuccess(String result) { } public void onFailure(Throwable cause) { tryAgain();} });} |
public void init() { world = new World(gravity, true); Body ground = world.createBody(new BodyDef()); PolygonShape groundShape = new PolygonShape(); groundShape.setAsEdge(new Vec2(0, height), new Vec2(width, height)); ground.createFixture(groundShape, 0.0f); world.setContactListener(new ContactListener() { public void beginContact(Contact contact) { ... } public void endContact(Contact contact) { ... } // ... }}public void update(float delta) { // Fix physics at 30f/s for stability. world.step(0.033f, 10, 10);} |
public class MyGame implements Game { public void init() { int width = 640; int height = 480; CanvasImage bgImage = graphics().createImage(width, height); Canvas canvas = bgImage.canvas(); canvas.setFillColor(0xff87ceeb); canvas.fillRect(0, 0, width, height); ImageLayer bg = graphics().createImageLayer(bgImage); graphics().rootLayer().add(bg); }} |
Image cloudImage = assets().getImage("images/cloud.png");ImageLayer cloud = graphics().createImageLayer(cloudImage);graphics().rootLayer().add(cloud);float x = 24.0f;float y = 3.0f;cloud.setTranslation(x, y); |
public void paint(float delta) { x += 0.1f * delta; if (x > bgImage.width() + cloudImage.width()) { x = -cloudImage.width(); } cloud.setTranslation(x, y);} |
Image ballImage = assetManager().getImage("images/ball.png");GroupLayer ballsLayer = graphics().createGroupLayer();graphics().rootLayer().add(ballsLayer);pointer().setListener(new Pointer.Adapter() { @Override public void onPointerEnd(Pointer.Event event) { ImageLayer ball = graphics().createImageLayer(ballImage); ball.setTranslation(event.x(), event.y()); ballsLayer.add(ball); }}); |
float physUnitPerScreenUnit = 1 / 26.666667f;Vec2 gravity = new Vec2(0.0f, 10.0f);world = new World(gravity, true);ballsLayer.setScale(1f / physUnitPerScreenUnit); |
class Ball { public initPhysics() { BodyDef bodyDef = new BodyDef(); bodyDef.type = BodyType.DYNAMIC; body = world.createBody(bodyDef); FixtureDef fixtureDef = new FixtureDef(); fixtureDef.shape = new CircleShape(); fixtureDef.circleShape.m_radius = 0.5f; fixtureDef.density = 1.0f; body.createFixture(fixtureDef); }} |
float worldWidth = physUnitPerScreenUnit * width;float worldHeight = physUnitPerScreenUnit * height;Body ground = world.createBody(new BodyDef());PolygonShape groundShape = new PolygonShape();groundShape.setAsEdge(new Vec2(0, worldHeight), new Vec2(worldWidth, worldHeight));ground.createFixture(groundShape, 0.0f); |
Image blockImage = assetManager().getImage("images/block.png");float blockWidth = blockImage.width() * physUnitPerScreenUnit;float blockHeight = blockImage.height() * physUnitPerScreenUnit;GroupLayer blocksLayer = graphics().createGroupLayer();blocksLayer.setScale(1f / physUnitPerScreenUnit);Body blocksBody = world.createBody(new BodyDef()); |
for (int i = 0; i < 4; i++) { ImageLayer block = graphics().createImageLayer(blockImage); block.setTranslation((1+2*i)*blockWidth, worldHeight-height); blocksLayer.add(block); PolygonShape shape = new PolygonShape(); shape.setAsBox(blockWidth/2f, blockHeight/2f, block.transform().translation(), 0f); blocksBody.createFixture(shape, 0.0f);} |
public void initNails() { for (int x = 100; x < bgImage.width() - 100; x += 50) { for (int y = 150; y < 450; y+= 100) { canvas.setFillColor(0xffaaaaaa); canvas.fillCircle(x, y, radius); CircleShape circleShape = new CircleShape(); circleShape.m_radius = 5f*physUnitPerScreenUnit; circleShape.m_p.set(x*physUnitPerScreenUnit, y*physUnitPerScreenUnit); FixtureDef fixtureDef = new FixtureDef(); fixtureDef.shape = circleShape; fixtureDef.restitution = 0.6f; ground.createFixture(fixtureDef); } }} |
int[] pointsTable = {-10, 10, 50, 10, -10};int points = 0;public void update(float delta) { for (Ball ball : balls) { Vector pos = ball.layer.transform().translation(); if (pos.y() >= scoringHeight) { int slot = (int)pos.x() / (int)scoringWidth; points += pointsTable[slot]; points = Math.max(0, points); ballsLayer.remove(ball.layer); world.destroyBody(ball.body); removeBalls.add(ball); } }} |
Image pointsFontImage;void init() { pointsLayer = graphics().createGroupLayer(); pointsLayer.setScale(3.0f, 3.0f); pointsFontImage = assetManager().getImage("images/font.png"); graphics().rootLayer().add(pointsLayer);}void update { float x = 0f; pointsLayer.clear(); for (char c : Integer.toString(points).toCharArray()) { ImageLayer digit = graphics().createImageLayer(pointsFontImage); digit.setSourceRect((c - '0' + 9) % 10; * 16, 0, 16, 16); pointsLayer.add(digit); digit.setTranslation(x, 0f); x += 16f; }} |