Java tutorial
/** * */ package com.google.gwt.maeglin89273.shared.test.volcanogame.component; import java.util.ArrayList; import org.jbox2d.common.Vec2; import org.jbox2d.dynamics.World; import com.google.gwt.canvas.dom.client.Context2d; import com.google.gwt.user.client.Random; import com.google.gwt.maeglin89273.game.mengine.component.GeneralComponent; import com.google.gwt.maeglin89273.game.mengine.component.Physical; import com.google.gwt.maeglin89273.game.mengine.component.Spacial; import com.google.gwt.maeglin89273.game.mengine.core.AssetManager; import com.google.gwt.maeglin89273.game.mengine.core.MEngine; import com.google.gwt.maeglin89273.game.mengine.layer.Camera.WorldBounds; import com.google.gwt.maeglin89273.game.mengine.physics.PixelAABB; import com.google.gwt.maeglin89273.game.mengine.physics.Point; import com.google.gwt.maeglin89273.game.mengine.sprite.SpriteSheet; import com.google.gwt.maeglin89273.game.mengine.utility.*; /** * @author Maeglin Liao * */ public class VolcanoWorld extends GeneralComponent implements Spacial { private final ArrayList<Physical> fireballs = new ArrayList<Physical>(); private final Volcano volcano; private final World world; private final SpriteSheet background; private final SpriteSheet clouds; /* (non-Javadoc) * @see com.google.gwt.maeglin89273.game.mengine.utility.component.Spacial#isOutOfBounds(com.google.gwt.maeglin89273.game.mengine.utility.component.Physical) */ public VolcanoWorld(int width, int height) { super(new Point(0, 0), width, height); this.background = MEngine.getAssetManager().getSpriteSheet("volcano_background.png"); this.clouds = MEngine.getAssetManager().getSpriteSheet("clouds.png"); world = new World(new Vec2(0, -10f), true); volcano = new Volcano(this, new Point(250, 425)); } @Override public boolean isOutOfBounds(PixelAABB aabb) { if (aabb.getTopY() > height || aabb.getRightX() < 0 || aabb.getLeftX() > width) return true; return false; } /* (non-Javadoc) * @see com.google.gwt.maeglin89273.game.mengine.utility.component.Spacial#add(com.google.gwt.maeglin89273.game.mengine.utility.component.Physical) */ @Override public void add(Physical c) { fireballs.add(c); } public void erupt() { add(new FireBall(this, new Point(volcano.getLeftCraterPoint().getX() + Random.nextInt(Volcano.CRATER_WIDTH + 1), volcano.getTopY()), 2 + Random.nextInt(5))); } /* (non-Javadoc) * @see com.google.gwt.maeglin89273.game.mengine.utility.component.Spacial#remove(com.google.gwt.maeglin89273.game.mengine.utility.component.Physical) */ @Override public void remove(Physical c) { fireballs.remove(c); } /* (non-Javadoc) * @see com.google.gwt.maeglin89273.game.mengine.utility.component.Spacial#getWorld() */ @Override public World getWorld() { return world; } /* (non-Javadoc) * @see com.google.gwt.maeglin89273.game.mengine.utility.component.GeneralComponent#update() */ @Override public void update() { world.step(1 / 60f, 8, 3); for (int i = fireballs.size() - 1; i >= 0; i--) { fireballs.get(i).update(); } } /* (non-Javadoc) * @see com.google.gwt.maeglin89273.game.mengine.utility.component.GeneralComponent#draw(com.google.gwt.canvas.dom.client.Context2d) */ @Override public void draw(Context2d context) { context.drawImage(background.getImage(), 0, 0); volcano.draw(context); context.save(); //context.setShadowBlur(12); for (Physical fireball : fireballs) { fireball.draw(context); } /*context.setShadowBlur(3); context.setShadowOffsetX(4); context.setShadowOffsetY(4); context.setShadowColor("rgba(65,65,65,0.3)");*/ context.drawImage(clouds.getImage(), 20, 30); context.restore(); } @Override public WorldBounds getBounds() { return new WorldBounds(new Point(0, 0), getWidth(), getHeight()); } }