赛迪网 > IT技术 Java > (最新更新)Java基础
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

J2ME游戏开发技巧 (2)

发布时间:2006.04.03 14:43     来源:www.0240.cn    作者:

编写自己的工具类

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

**


*

Description: Set类在J2ME上的实现




*

Date:2003.2.28




*

Author:TomJava




*

email:tomjava@sohu.com




*/

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


return false;


}





public int getX()


{


return x;


}





public int getY()


{


return y;


}


}

kSetNode类负责记录被删除方块的坐标,它重载equals()方法用来判断两个方块是否是同一个方块。kSet类是由kSetNode对象组成的没有相同元素的集合,用单链表实现,并且提供了 getFirst()、add()、clear()、isEmpty()、contains()等方法供其它类调用。编写和使用一些这样的工具类,将大大加快编程的速度,也使程序变得更加清晰。

矫正屏幕坐标

   GridOne这个游戏是专门为MotoT720开发的,也就是说游戏背景图片大小和MotoT720型手机的大小是相等的。如果它在那些屏幕比MotoT720大的手机上运行,游戏背景图片会显示在屏幕左上角而影响美观,这时就要用到屏幕矫正技术,使得游戏背景图片居中显示。矫正屏幕坐标代码如下:

public class BlocksCanvas extends Canvas implements Runnable


{


private final int addX;//坐标矫正


private final int addY;


private final int SCREEN_X;//屏幕顶点


private final int SCREEN_Y;


private final int WAITBLOCK_X;//等待方块顶点


private final int WAITBLOCK_Y;


private final int SCORES_X;//分数顶点


private final int SCORES_Y;


private final int STAR_X;//五角星的顶点


private final int STAR_Y;

public BlocksCanvas()


{


//取得当前手机屏幕的高度和宽度


height = getHeight();


width = getWidth();



 

//坐标矫正量


addX = (width-120)/2;


addY = (height-142)/2;



 

//初始化屏幕参数


SCREEN_X = addX + 48;//屏幕顶点


SCREEN_Y = addY + 10;


WAITBLOCK_X = addX + 19;//等待方块顶点


WAITBLOCK_Y = addY + 103;


SCORES_X = addX + 36;//分数顶点


SCORES_Y = addY + 34;


STAR_X=addX+4;//五角星的顶点


STAR_Y=addY+70;


}


}

首先把所有有关屏幕的参数都定义成private final int型变量。这里之所以加上final 修饰符,是因为不希望变量附初值后,它们的值会发生变化;之所以不加static修饰符,是因为要在其函数中初始化变量,而不是在定义时就初始化好了。先用getHeight()和getWidth()函数取得当前手机屏幕的高度和宽度,再计算出需要的偏移量addX和addY,然后加到各屏幕参数上,这样游戏内容就会居中显示了。图2与图3是效果比较图。







   图2 矫正前








   图3 矫正后

   还有一点需要注意,用getHeight()取得的并不是手机屏幕的真实高度,而是手机屏幕的高度减去Command标签高度,因为屏幕需要留出地方显示Command标签。  

<<上一页 1 2 3 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· J2ME平台简介 (04-03) · NetBeans 4.0创建J2ME手机RSS阅读器 (04-03)
· J2ME开发站点资源 (04-03) · 使用J2ME与MIDP进行手机开发的全工略 (04-03)
· 用简单的J2ME程序测试MIDlet生命周期 (04-03) · J2ME中使用记录存储系统(RMS)存储信息 (04-03)
· MVC模式在J2ME项目中的实际应用 (04-03) · 在J2ME手机编程中内存的优化三招 (04-03)
· J2ME开发中记录管理系统的详细介绍 (04-03) · J2ME开发中如何从MIDlet中调用JSP页面 (04-03)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 回顾ERP市场发展经历 提醒CIO选型需理性
· 网银系统拥堵 SOA从治病良方到罪魁祸首
· 国产ITIL运维先行者 四大厂商角力BI市场
· 金融行业GSN专题解决方案 企业网解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统