编写自己的工具类
因为手机内存和功能的限制,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
下一页>>
|