J2ME 3D编程——第一个3D程序(附源代码)
更多文章请访问:http://blog.csdn.net/mailbomb
<!----><o:p> </o:p>
参考WTK2.2提供的demo,完成了第一个3D程序,虽然很简单,而且有些问题还不是很清楚,还是把代码共享出来和愿意学习J2ME 3D编程的朋友一起学习。
关于3D编程的资料,可以查阅我的blog。
<o:p> </o:p>
关于代码的编译和运行说明如下:
1、 以下代码在J2ME WTK2.2下面编译通过。
2、 代码分为两个文件:First3DCanvas.java和First3DMIDlet.java。
3、 使用J2ME WTK2.2建立新的工程,主MIDlet类为:first3d. First3DMIDlet
4、 将代码保存在你的工程目录下的first3d目录下。
5、 将J2ME WTK安装目录下的
apps\Demo3D\res\com\superscape\m3g\wtksamples\retainedmode\content目录中的swerve.m3g文件复制到你的工程目录下的res目录下。<o:p></o:p>
6、 你的工程建立后,设置工程,通过WTK界面中的“设置”按钮打开设置窗口,在“API选择”中,设置“目标平台”为:自定义;“简档”为“MIDP2.0”;“配置”为“CLDC1.1”;选中“Mobile 3D Graphics for J2ME(JSR184)”。
7、 这样你就可以编译和运行以下代码了。
<o:p> </o:p>
源代码如下:
// First3DMIDlet.java
package first3d;
<o:p> </o:p>
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
<o:p> </o:p>
public class First3DMIDlet extends MIDlet {
private First3DCanvas displayable = new First3DCanvas();
<o:p> </o:p>
public void startApp() {
Display.getDisplay(this).setCurrent(displayable);
}
<o:p> </o:p>
public void pauseApp() {}
<o:p> </o:p>
public void destroyApp(boolean unconditional) {}
}
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
// First3Dcanvas.java
package first3d;
<o:p> </o:p>
import javax.microedition.lcdui.*;
import javax.microedition.m3g.*;
import java.util.*;
<o:p> </o:p>
/**
* 第一个3D程序
*/
public class First3DCanvas
extends Canvas
implements Runnable {
/**World对象*/
private World myWorld = null;
/**Graphics3D对象*/
private Graphics3D g3d = Graphics3D.getInstance();
/**Camera对象*/
private Camera cam = null;
private int viewport_x;
private int viewport_y;
private int viewport_width;
private int viewport_height;
private long worldStartTime = 0;
//重绘时间
private int validity = 0;
<o:p> </o:p>
<o:p> </o:p>
public First3DCanvas() {
//启动重绘界面的线程
Thread thread = new Thread(this);
thread.start();
try {
//导入3D图片
myWorld = (World) Loader.load("/swerve.m3g")[0];
viewport_x = 0;
viewport_y = 0;
viewport_width = getWidth();
viewport_height = getHeight();
cam = myWorld.getActiveCamera();
//设置cam对象
float[] params = new float[4];
int type = cam.getProjection(params);
if (type != Camera.GENERIC) {
//calculate window aspect ratio
float waspect = viewport_width / viewport_height;
<o:p> </o:p>
if (waspect < params[1]) {
float height = viewport_width / params[1];
viewport_height = (int) height;
viewport_y = (getHeight() - viewport_height) / 2;
}
else {
float width = viewport_height * params[1];
viewport_width = (int) width;
viewport_x = (getWidth() - viewport_width) / 2;
}
}
worldStartTime = System.currentTimeMillis();
}
catch (Exception e) {}
}
<o:p> </o:p>
protected void paint(Graphics g) {
//清除背景
g.setColor(0x00);
g.fillRect(0, 0, getWidth(), getHeight());
//和3D对象绑定
g3d.bindTarget(g);
g3d.setViewport(viewport_x, viewport_y, viewport_width, viewport_height);
long startTime = System.currentTimeMillis() - worldStartTime;
validity = myWorld.animate((int)startTime);
try {
g3d.render(myWorld);
}
finally {
g3d.releaseTarget();
}
}
<o:p> </o:p>
public void run() {
try{
while(true){
//重绘图形
repaint(viewport_x, viewport_y, viewport_width, viewport_height);
}
}catch(Exception e){}
}
}<o:p></o:p>
分享到:
相关推荐
【标题】"我的第一个J2ME程序(计算器)" 涉及到的知识点主要围绕Java Micro Edition (J2ME) 开发,特别是如何利用J2ME来创建一个基础的计算器应用。J2ME是Java平台的一个子集,专门用于嵌入式设备和移动设备,如早期...
这个压缩包“j2me开发程序源代码”包含了若干个与J2ME相关的源代码文件,对于想要学习或深入理解J2ME编程的人来说极具价值。下面,我们将详细探讨J2ME开发中的关键知识点,以及这些源代码可能涵盖的内容。 1. **...
【坦克大战程序源代码J2ME】是一款基于Java Micro Edition(J2ME)平台开发的经典游戏——坦克大战的源代码实现。J2ME是Java的一个子集,主要用于嵌入式设备和移动设备上的应用程序开发,如早期的手机游戏。本项目...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
综上所述,J2ME手机游戏“打地鼠”涉及到的不仅是编程技术,还包括了游戏设计、用户体验、资源管理和性能优化等多个方面,对于想要学习移动游戏开发的人来说,这是一个很好的实践项目。通过分析和理解这款游戏的源码...
本篇文章将深入探讨一个基于J2ME的简单游戏——接砖块游戏的源代码,通过分析其核心机制和编程技巧,帮助读者理解游戏开发的基本流程。 接砖块游戏,顾名思义,玩家需操控一个可移动的平台来接住下落的砖块,以获得...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
**J2ME手机游戏MIDP1.0游戏入门** ...通过学习这个教程,初学者将掌握MIDP1.0的基础知识,能够创建出自己的第一个手机游戏——五子棋。在这个过程中,他们将深化对J2ME的理解,为更复杂的移动应用开发打下坚实基础。
要运行这个程序,首先需要使用`javac`编译器将源代码编译为字节码(`.class`文件),然后使用`java`命令执行编译后的字节码。这就是Java程序的基本生命周期:编译和运行。 【Java语言特性】 1. **面向对象**:Java...
J2ME作为Java的一个子集,主要用于嵌入式设备和移动设备上的应用程序开发,包括手机、电视和游戏机等。此项目的源码开源,为开发者提供了深入理解游戏开发流程和技术细节的机会。 一、J2ME基础 J2ME是Sun ...
`.java`文件是Java源代码文件,而`.class`文件是编译后的字节码文件。类是由`.java`文件定义的,并在编译后生成相应的`.class`文件。 ### 访问控制与封装 在Java中,`private`、`protected`、`public`和`default`...
这个“第二个JAVA ME程序——批量添加后缀”项目,显然旨在教授如何利用Java ME进行文件操作,特别是对文件名进行批量处理,比如添加特定的后缀。 在Java ME中,文件操作比在Java SE(标准版)或Java EE(企业版)...
第1章 嵌入式系统基础. 1.1 嵌入式系统简介 1.1.1 嵌入式系统定义 1.1.2 嵌入式系统与PC 1.1.3 嵌入式系统的特点 1.2 嵌入式系统的发展 1.2.1 嵌入式系统现状 1.2.2 嵌入式系统发展趋势 1.3 嵌入式操作系统...