您的位置:首页 > 编程语言 > Java开发

java j2me 使用M3G封装

2009-10-22 13:20 267 查看
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.m3g.Camera;
import javax.microedition.m3g.Graphics3D;
import javax.microedition.m3g.Loader;
import javax.microedition.m3g.World;
import javax.microedition.midlet.MIDlet;

public class RMMIDlet extends MIDlet implements CommandListener {
private Display myDisplay = null;

private RetainedCanvas myCanvas = null;

private Command exitCommand = new Command("Exit", Command.ITEM, 1);

public RMMIDlet() {
super();
myDisplay = Display.getDisplay(this);
myCanvas = new RetainedCanvas();
myCanvas.setCommandListener(this);
myCanvas.addCommand(exitCommand);
}

public void startApp() {
myCanvas.init();
myDisplay.setCurrent(myCanvas);
myCanvas.start();
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
myCanvas.stop();
}

public void commandAction(Command cmd, Displayable disp) {
if (cmd == exitCommand) {
try {
destroyApp(false);
notifyDestroyed();
} catch (Exception e) {
e.printStackTrace();
}
}
}

}

class RetainedCanvas extends GameCanvas implements Runnable {
private boolean mRunning = false;

private Thread mPaintThrd = null;

private Graphics3D mGraphics3D = Graphics3D.getInstance();

private World mWorld = null;

private Camera mCam = null;

private long mWorldStartTime = 0;

public RetainedCanvas() {
super(true);
}

public void init() {
try {
mWorld = (World) Loader.load("/p.m3g")[0];
mCam = mWorld.getActiveCamera();
mCam.translate(0, 0, -1.5f);
mCam.setOrientation(180, 0, 1, 0);
} catch (Exception e) {
e.printStackTrace();
}
mWorldStartTime = System.currentTimeMillis();

}

public void start() {
mRunning = true;
mPaintThrd = new Thread(this);
mPaintThrd.start();
}

public void stop() {
mRunning = false;
try {
mPaintThrd.join();
} catch (InterruptedException ex) {
}
}

public void run() {
Graphics g = getGraphics();
long startTime;

while (mRunning) {
cameraForward();
startTime = System.currentTimeMillis() - mWorldStartTime;
mWorld.animate((int) startTime);
mGraphics3D.bindTarget(g);
mGraphics3D.render(mWorld);
mGraphics3D.releaseTarget();
flushGraphics();
try {
Thread.sleep(100);
} catch (InterruptedException ie) {
}
}
}

private void cameraForward() {
mCam.translate(0f, 0f, 0.2f);
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐