快速业务通道

J2ME游戏开发技巧 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
(str, 0,0, Graphics.TOP | Graphics.LEFT);  repaint();  while(stopFlag){} } public void keyPressed(int keyCode) {  stopFlag=false; } }

J2ME游戏开发技巧(3)

时间:2011-01-13

首先定义一个boolean类型的stopFlag变量来记录调试标志。一开始它的值为false,进入testFun()函数后,值设为true。显示完str的内容后,因为stopFlag的值为true,所以while语句进入了死循环,程序停了下来。这时可以仔细地看清楚变量的值。然后当按下任意键时,keyPressed()函数捕捉到这一事件,将stopFlag设为false,死循环自动解开。使用此方法非常方便,只要在需要断点的地方放置testFun()语句即可,一个程序可以放置多个testFun()语句,在循环语句中也可以放置testFun()语句。程序运行到testFun()语句会自动停下显示变量值,按任意键程序又会自动运行,程序也不会受到意外的干扰。图1是调试时的截图。

还有一点需要说明,此方法的testFun()语句必须放在run()函数中或者run()函数运行时调用的函数中,否则就会因为while()占用了所有CPU时间而导致keyPressed()函数无法捕捉按键事件,最后导致死机。

此方法只要稍加修改,就可以用做游戏的暂停功能,而且比sleep()方法好,毕竟理论上sleep()方法不能无限期暂停下去。下面给出相应的代码:

public class BlocksCanvas extends Canvas implements Runnable { private boolean stopFlag=false;//暂停标志 ...... public void run() {......  testFun();  ...... }

private void testFun() {  while(stopFlag){} } public void keyPressed(int keyCode) {  int action = getGameAction(keyCode);  if(action== FIRE)stopFlag=!stopFlag; } }

该程序段的功能为,当使用者按下FIRE键时,游戏暂停;再次按下FIRE键,游戏继续运行。

编写自己的工具类

因为手机内存和功能的限制,J2ME只提供了部分的J2SE工具类供使用者调用。所以有时我们不得不编写自己的工具类来实现一些特殊的功能。下面给出的kSet类就类似于J2SE中Set工具类的功能。它用来记录游戏中被删去的方块集合,同时保证集合中没有相同元素。

/** *<p>Description: Set类在J2ME上的实现</p> *<p>Date:2003.2.28</p> *<p>Author:TomJava</p> *<p>email:tomjava@sohu.com</p> */ public class kSet {//用单链表实现 private kSetNode head; public kSet() {  head=null; } //将kSet清空 public void clear() {  head=null; } //向kSet中添加元素           public boolean add(int x,int y) {  kSetNode node=new kSetNode(x,y);  return add(node); } //向kSet中添加元素 public boolean add(kSetNode node) {  if(!contains(node))  {   node.next=head;   head=node;   return true;  }else  {   return false;  } } //判断kSet是否为空 public boolean isEmpty() {  if(head==null)   return true;  else   return false; } //摘下链表头元素并返回此元素 public kSetNode getFirst() {  kSetNode p=head;  head=p.next;  return p; } //遍历kSet,如果有相同元素返回true,否则返回false public boolean contains(kSetNode node) {  kSetNode p = head;  while (p != null) {   if(p.equals(node))return true;   p=p.next;  }  return false; } } //kSet中的元素 public class kSetNode { public int x,y; public kSetNode next;

public kSetNode(int x,int y) {  this.x=x;  this.y=y;  next=null; } public boolean equals(kSetNode node) {  if(node.x==x&&node.y==y)   return true;  else   retu

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号