⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maincanvas.java

📁 j2me功能越发强大
💻 JAVA
字号:
package demo;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.m3g.Appearance;
import javax.microedition.m3g.Camera;
import javax.microedition.m3g.Graphics3D;
import javax.microedition.m3g.Light;
import javax.microedition.m3g.Transform;
import javax.microedition.m3g.TriangleStripArray;
import javax.microedition.m3g.VertexArray;
import javax.microedition.m3g.VertexBuffer;


public class MainCanvas extends GameCanvas implements Runnable{
	private boolean	m_bRunning;				//控制项目运行
	private VertexArray m_vaPos;				//顶点数组
	private VertexArray m_vaColor;
	private VertexBuffer m_VB;	
	private Camera	m_Camera;					//摄像机对象
	private Light	m_Light;					//灯光对象
	private Graphics3D m_G3D;					
	private TriangleStripArray m_TSA;			//三角形带对象
	private float m_fRotY = 0.0f;
	private float m_fPosY = 0.0f;
	
	public MainCanvas(){
		super(true);
		Reset();
		Start();								//启动线程
	}
	public void Reset(){
		//定义顶点位置信息
		short[] vert = 
		{ 	//顶点坐标
			0,5,0,	0,5,5,	5,5,5,	5,5,0,
			0,0,0,	0,0,5,	5,0,5,	5,0,0		
		};
		try{//m_vaPos是VertexArray对象
			m_vaPos =new VertexArray(vert.length/3,3,2);  
			m_vaPos.set(0,vert.length/3,vert);
		}
		catch (Exception e){ 
			e.printStackTrace();
		}
		//定义顶点颜色信息
		byte[] vertColor = 
		{ 	//顶点颜色
			(byte)255,0,0,				0,(byte)255,0,		
			0,0,(byte)255,				(byte)255,(byte)255,0,			
			0,(byte)255,(byte)255,		(byte)255,0,(byte)255,
			0,0,0,						(byte)255,(byte)255,(byte)255
		};
		try{
			m_vaColor =new VertexArray(vert.length/3,3,1);  
			m_vaColor.set(0, vertColor.length/3, vertColor);
		}
		catch (Exception e){ 
			e.printStackTrace();
		}
		m_VB = new VertexBuffer();
		m_VB.setPositions(m_vaPos, 1.f, null);
		m_VB.setColors(m_vaColor);
		
		//定义顶点索引序列
		int[]  indexs = { //注意三角形的正面方向
			0, 1, 3, 2, 		//构成立方体顶面的三角形带
			7, 6, 4, 5,			//构成立方体底面的三角形带
			1, 5, 2, 6,			//构成立方体前面的三角形带
			7, 4, 3, 0,			//构成立方体后面的三角形带
			0, 4, 1, 5,			//构成立方体左面的三角形带
			2, 6, 3, 7			//构成立方体右面的三角形带
		};
		//将顶点索引,切割成6个三角形带,每个三角形带由4个顶点构成
		int[] stripLens = { 4, 4, 4, 4, 4, 4 };
	
		m_TSA = new TriangleStripArray( indexs, stripLens );
		
		//获取当前的Graphics3D对象
		m_G3D = Graphics3D.getInstance();
		
		//创建“摄像机”
		m_Camera = new Camera();
		float aspect = (float) getWidth() / (float) getHeight();
		m_Camera.setPerspective(30.0f, aspect, 1.0f, 1000.0f);
		m_Camera.translate(0, 0, 1);
		//将“摄像机”添入G3D
		m_G3D.setCamera(m_Camera, null);
		
		//创建灯光,并将灯光添入G3D
		m_Light = new Light();
		m_Light.setMode(Light.OMNI);
		m_Light.setColor(0xFF00FFFF);
		m_G3D.addLight(m_Light, null);
	}
	public void Start(){
		m_bRunning = true;
		Thread thread = new Thread(this);		//分配新线程
		thread.start();							//线程启动
	}
	public void run() {						//新线程自动调用此方法
		//获得系统当前时间,并将时间换算成毫秒
		long T1 = System.currentTimeMillis();
		long T2 = T1;
		while(m_bRunning){
			T2 = System.currentTimeMillis();
			if( T2 - T1 > 100 ){			    //间隔100毫秒
				T1 = T2;
				Input();
				Logic();
				Paint();
			}
		}
	}
	public void Stop(){						//终止游戏
		m_bRunning = false;
	}
	public void Input(){
		int keyStates = getKeyStates();
		if( ( keyStates & GameCanvas.UP_PRESSED ) != 0 )
			m_fPosY --;
		if( ( keyStates & GameCanvas.DOWN_PRESSED ) != 0 )
			m_fPosY ++;
		if( ( keyStates & GameCanvas.LEFT_PRESSED ) != 0 )
			m_fRotY --;
		if( ( keyStates & GameCanvas.RIGHT_PRESSED ) != 0 )
			m_fRotY ++;
	}
	public void Logic(){
	}
	public void Paint(){
		Graphics g = getGraphics();
		//与屏幕绑定
		m_G3D.bindTarget(g);
		//清空背景
		m_G3D.clear(null);
		Appearance ap = new Appearance();
		//设置转换
		Transform tran = new Transform();
		//平移
		tran.postTranslate( 0.0f, m_fPosY, -25.0f );
		//旋转
		tran.postRotate( m_fRotY, 0.0f, 1.0f, 0.0f );
		tran.postRotate( 15, 1.0f, 0.0f, 0.0f );
		//渲染实物
		m_G3D.render(m_VB, m_TSA, ap, tran);
		//释放绑定对象
		m_G3D.releaseTarget();
		
		flushGraphics();
	}
}

⌨️ 快捷键说明

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