java j2me 使用M3G封装

本文介绍了一个基于Java ME平台的3D游戏应用开发案例,利用MIDlet作为主程序入口,通过RetainedCanvas实现游戏画面的绘制,并使用M3G文件加载3D场景资源。文章展示了如何创建游戏循环、控制相机移动以及更新3D世界。

importjavax.microedition.lcdui.Command;
importjavax.microedition.lcdui.CommandListener;
importjavax.microedition.lcdui.Display;
importjavax.microedition.lcdui.Displayable;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.game.GameCanvas;
importjavax.microedition.m3g.Camera;
importjavax.microedition.m3g.Graphics3D;
importjavax.microedition.m3g.Loader;
importjavax.microedition.m3g.World;
importjavax.microedition.midlet.MIDlet;

publicclassRMMIDletextendsMIDletimplementsCommandListener{
privateDisplaymyDisplay=null;

privateRetainedCanvasmyCanvas=null;

privateCommandexitCommand=newCommand("Exit",Command.ITEM,1);

publicRMMIDlet(){
super();
myDisplay=Display.getDisplay(this);
myCanvas=newRetainedCanvas();
myCanvas.setCommandListener(this);
myCanvas.addCommand(exitCommand);
}

publicvoidstartApp(){
myCanvas.init();
myDisplay.setCurrent(myCanvas);
myCanvas.start();
}

publicvoidpauseApp(){
}

publicvoiddestroyApp(booleanunconditional){
myCanvas.stop();
}

publicvoidcommandAction(Commandcmd,Displayabledisp){
if(cmd==exitCommand){
try{
destroyApp(false);
notifyDestroyed();
}catch(Exceptione){
e.printStackTrace();
}
}
}

}

classRetainedCanvasextendsGameCanvasimplementsRunnable{
privatebooleanmRunning=false;

privateThreadmPaintThrd=null;

privateGraphics3DmGraphics3D=Graphics3D.getInstance();

privateWorldmWorld=null;

privateCameramCam=null;

privatelongmWorldStartTime=0;

publicRetainedCanvas(){
super(true);
}

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

}

publicvoidstart(){
mRunning=true;
mPaintThrd=newThread(this);
mPaintThrd.start();
}

publicvoidstop(){
mRunning=false;
try{
mPaintThrd.join();
}catch(InterruptedExceptionex){
}
}

publicvoidrun(){
Graphicsg=getGraphics();
longstartTime;

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(InterruptedExceptionie){
}
}
}

privatevoidcameraForward(){
mCam.translate(0f,0f,0.2f);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值