m3gcanvas.java

来自「3D手机游戏开发实例源代码」· Java 代码 · 共 88 行

JAVA
88
字号
import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import javax.microedition.m3g.*;import java.io.*;public class M3GCanvas extends GameCanvas implements Runnable {    private Graphics3D g3d ;    private World world;    private int iStartTime;    private static final String FILE_NAME = "/cartrack.m3g";    public M3GCanvas(){        super(true);                try        {            world = (World)Loader.load(FILE_NAME)[0];        } catch (IOException e)        {            System.out.println("Load failed (" + e.getMessage() + ")");            e.printStackTrace();                   }              //  traverse(world);         iStartTime = (int)System.currentTimeMillis();        Thread t = new Thread(this);        t.start();    }    public void run() {        Graphics g = getGraphics();        while(true) {        g3d = Graphics3D.getInstance();        g3d.bindTarget(g);        try{        g3d.clear(null);        world.animate((int) System.currentTimeMillis() - iStartTime);        world.align(null);        g3d.render(world);        }catch(Exception e){            System.err.println(e);        }finally{            g3d.releaseTarget();        }        flushGraphics();            try {                Thread.sleep(200);             }            catch (InterruptedException e) {                            }        }    }      private void traverse(Node aNode)    {        if (aNode instanceof Mesh)        {            Mesh mesh = (Mesh)aNode;            for (int i = 0; i < mesh.getSubmeshCount(); i++)            {                Appearance app = mesh.getAppearance(i);                CompositingMode cm = new CompositingMode();                cm.setBlending(CompositingMode.ALPHA_ADD);                app.setCompositingMode(cm);                app.setTexture(0, null);                Material mat = new Material();                mat.setColor(Material.AMBIENT | Material.DIFFUSE | Material.SPECULAR, 0xff000000);                mat.setColor(Material.EMISSIVE, 0xff444444);                app.setMaterial(mat);            }        }        if (aNode instanceof Group)        {            Group group = (Group)aNode;            for (int i = 0; i < group.getChildCount(); i++)            {                traverse(group.getChild(i));            }        }    } }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?