J2ME开发全程简述(三)开发周边(中)

十五、J2ME 3D编程的一些资料
随着J2ME技术的发展,以及硬件速度的提升,3D游戏程序将慢慢的变成主流,最近想学习这一块的编程,所以收集了一些资料,和大家一起分享:
  
    1、JSR184
  JSR184是Nokia公司起草的一个关于3D API的规范,下载地址为:http://www.forum.nokia.com/main/1,,1_0_10,00.html#jsr184
  2、Nokia的3D编程资料http://www.forum.nokia.com/main/1,6566,21,00.html
  3、3D引擎,一个简单的开放源代码的3D游戏引擎:http://www.j2me.com.cn/Soft_Show.asp?SoftID=19
  国内一个合作开发3D引擎的项目:http://gceclub.sun.com.cn/NASApp/sme/jive/thread.jsp?forum=11&thread=8593
  4、一款3D游戏产品:http://games.sina.com.cn/newgames/2004/04/040217696.shtml
  5、支持3D的开发工具:当前一些高端的手机支持3D开发,支持3D开发的开发工具中,通用的有SUN的J2MEWTK2.2。专用的是厂商提高的支持JSR184的SDK。

十六、3D编程——第一个3D程序
参考WTK2.2提供的demo,完成了第一个3D程序,虽然很简单,而且有些问题还不是很清楚,还是把代码共享出来和愿意学习J2ME 3D编程的朋友一起学习。关于代码的编译和运行说明如下:
  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目录下。
  6、你的工程建立后,设置工程,通过WTK界面中的“设置”按钮打开设置窗口,在“API选择”中,设置“目标平台”为:自定义;“简档”为“MIDP2.0”;“配置”为“CLDC1.1”;选中“Mobile 3D Graphics for J2ME(JSR184)”。
  7、这样你就可以编译和运行以下代码了。
    源代码如下:

// First3DMIDlet.java

package first3d;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class First3DMIDlet extends MIDlet {
private First3DCanvas displayable = new First3DCanvas();
public void startApp() {
Display.getDisplay(this).setCurrent(displayable);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
}

// First3Dcanvas.java

package first3d;
import javax.microedition.lcdui.*;
import javax.microedition.m3g.*;
import java.util.*;
public class First3DCanvas extends Canvas implements Runnable {
private World myWorld = null;
private Graphics3D g3d = Graphics3D.getInstance();
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;
public First3DCanvas() {

Thread thread = new Thread(this);
thread.start();

try {
 myWorld = (World) Loader.load("/swerve.m3g")[0];
 viewport_x = 0;
 viewport_y = 0;
 viewport_width = getWidth();
 viewport_height = getHeight();
 cam = myWorld.getActiveCamera();

 float[] params = new float[4];
 int type = cam.getProjection(params);
 if (type != Camera.GENERIC) {
  float waspect = viewport_width / viewport_height;
  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) {}
}

protected void paint(Graphics g) {
g.setColor(0x00);
g.fillRect(0, 0, getWidth(), getHeight());
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();}
 }

public void run() {
 try{
 while(true){
  repaint(viewport_x, viewport_y, viewport_width, viewport_height);
  }}catch(Exception e){}
 }
}

十七、在J2ME网络编程中使用CMWAP代理
在中国移动提供的网络连接中,分为CMNET和CMWAP两种,其中CMNET可以无限制的访问互联网络,资费比较贵。CMWAP类似一个HTTP的代码,只能访问支持HTTP的应用,但是资费便宜,稳定性比较差。在实际的J2ME网络编程中,一般需要提供以CMWAP代理的方式连接网络,在J2ME中,连接的代码和直接连接有所不同,代码如下:
HttpConnection http = (HttpConnection)Connector.open(("http://10.0.0.172/"+url);
http.setRequestProperty("X-Online-Host",ServerName);

    例如你需要访问的地址为:http://www.test.com/login/loginServlet
   则上面的代码就为:
    HttpConnection http = (HttpConnection)Connector.open(("http://10.0.0.172/"+"login/loginServlet");
    http.setRequestProperty("X-Online-Host",”www.test.com”);
 
  在实际使用过程中,只需要使用实际需要访问的地址的域名或者IP来代替ServerName,例如示例中的“www.test.com”,使用后续的地址类代替代码中的url,例如示例中的“login/loginServlet”,就可以实际的使用CMWAP代理来进行连接了。

十八、J2ME中的时间处理全攻略
时间处理在程序开发中相当常见,下面对于时间处理做一个简单的说明。

  一、时间的表达方式
  时间在J2ME中有两种表达方式:
  1、以和GMT1970年1月1号午夜12点和现在相差的毫秒数来代表
  这种方式适合比较两个时间之间的差值。
  2、以对象的形式来表达

  二、时间处理的相关类
  时间处理在J2ME中涉及三个类:
  1、System类
  long time = System. currentTimeMillis();
  使用该方法可以获得当前时间,时间的表达方式为上面提到的第一种。
  2、Date类
  Date date = new Date();
  获得当前时间,使用对象的形式来进行表达。
  3、Calendar类
  Calendar calendar = Calendar. getInstance();

  三、时间处理的具体操作
  1、以上三种表达方式的转换:
  a)将System类获得的时间转换为Date对象
  Date date = new Date(System. currentTimeMillis());
  b)将Date类型的对象转换为Calendar类型的对象
  Calendar calendar = Calendar. getInstance();
  Date date = new Date();
  calendar.setTime(date);
  2、使用Calendar完成一些日期操作:
  Calendar是时间处理中最常用也是功能最强大的类,可以用它来获得某个时间的日期、星期几等信息。
  获得日期:
  Calendar calendar = Calendar. getInstance();
  ……
  int day = calendar.get(Calendar. DATE);
  获得日期、年份、星期的操作和这个类似。
  需要注意的是:Calendar中表示月份的数字和实际相差1,即1月用数字0表示,2月用数字1表示,……12月用数字11表示。

十九、J2ME中随机数字处理全攻略
在程序中生成随机数字,用处比较,如人工智能领域等等,这里对于在J2ME中生成随机数的操作进行一个简单的整理,希望对大家能有帮助。

  J2ME和J2SE不同,不能使用Math类的random来生成随机数字,只能使用java.util包的Random类来生成随机数字。
  1、创建Random类型的对象:
  Random random = new Random();
  Random random = new Random(10010010);
  以上两种是创建Random对象的方式,第一种使用默认构造方法,和以下的代码作用完全等价:
  Random random = new Random(System. currentTimeMillis());
  相当与使用当前时间作为种子数字来进行创建。第二种方式通过自己来指定种子数字来进行创建。大家可以根据需要使用以上两种方式的任一种。

  2、生成随机数字:
  创建好了随机对象以后,我们就可以来生成随机数字了:生成随机整数:
  int k = random.nextInt();
    生成随机长整数:
  long l = random.nextLong();

  3、生成指定范围的数字:例如生成0-10之间的随机数字:
  int k = random.nextInt();
  int j = Math.abs(k % 10);
  首先生成一个随机整数k,然后用k和10取余,最后使用Math类的abs方法取绝对值,获得0-10之间的随机数字。
  获得0-15之间的随机数,类似:
  int k = random.nextInt();
  int j = Math.abs(k % 15);
  获得10-20之间的随机数字:
  int k = random.nextInt();
  int j = Math.abs(k % 10) + 10;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值