📄 通过游戏代码学j2me(四).txt
字号:
通过游戏代码学J2ME(四)
package npc7776;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class Plane {
Image img; //图片
int x , y; // 飞机所在位置的坐标
int frameX, frameY; //单个飞机图片的像素大小
int scnX , scnY; // 屏幕高宽
Sprite plane; //精灵类plane
int Move = 3; //移动的距离
boolean b = true; // 一个boolean 值
public Plane(Image imgs,int fX,int fY,int sX,int sY) {
scnX = sX;
scnY = sY;
frameX = fX;
frameY = fY;
img = imgs;
x = y = sX /2 ; // 飞机开始的位置
plane = new Sprite(img,frameX,frameY);// 构造plane
}
// 画飞机
public void drawSelf(Graphics g){
if (b == true){
plane.setPosition(x,y) ;
plane.paint(g) ;
b = false;
}else
plane.paint(g) ;
}
//恢复飞机桢数
public void hf(){
plane.setFrame(0);}
//移动左方法
public void moveLeft(){
getXY();
plane.setFrame(1) ;
if (x - Move > 0){
plane.move(-Move,0) ;
}
}
public void moveRight(){
getXY();
plane.setFrame(2) ;
if (x + Move + frameX < scnX){
plane.move(Move,0) ;
}
}
public void moveUp(){
getXY();
plane.setFrame(0) ;
if (y - Move >0){
plane.move(0,-Move) ;
}
}
public void moveDown(){
getXY();
plane.setFrame(0) ;
if (y+frameY+Move < scnY){
plane.move(0,Move) ;
}
}
//获得当前飞机 X,Y 点
public void getXY(){
x = plane.getX() ;
y = plane.getY() ;
}
}
这是个Sprite类。说到这个类首先先讲讲Layer类,在MIDPv2.0中
可以通过Layer (图层)对象轻松处理游戏背景,物体的移动和实
现动画。图层是可以在游戏画布中单独绘制并能够移动的一些对
象,一般来说,游戏都会有超过一个的图层。例如,背景图层用
来绘制游戏的背景,场景图层用来显示当前的场景,物体图层用
来显示当前场景中移动的物体。例如,用游戏的一个场景来举例,
游戏的背景图是星空,占据整个屏幕;然后在上面覆盖建筑物图
层,这一图层没有覆盖整个屏幕,而且是透明的,没有覆盖和透
明的区域上就会显示出背景;然后最上面才是物体图层显示移动
的主角和障碍物。在MIDP 中TiledLayer类用来显示背景和场景,
Sprite类用来显示移动的物体,这两个类都是直接从Layer 类中
派生的。Sprite对象主要用来解决物体在游戏中的动画、移动和
检测物体间的碰撞。在使用Sprite类时,需要先了解下面几个概
念:画面帧、动画序列、对准点。
1 画面帧是一段动画中的一幅图像,多幅连贯的帧连续播放就可
以产生动画效果。
2 动画序列是指播放动画时播放各个帧的顺序。
3 对准点是对于一个Sprite 对象所包含的图像内的一个坐标点,
在旋转时可以这个点为中心,或者在移动对象时以这个点作为基
准点。默认情况下,这个点位于图像的左上角,也就是图像中的
坐标 (0 , 0)位置。
为了能够使用精灵,首先需要生成画面帧。我们这里用到的飞机
PNG图片(三里有下载),一共三个飞机在那个图片中,第一个飞
机像素大小为24*24,整个图片24*72的.把第一个飞机作为序号0(
第一帧序号从0开始,而不是从一开始),依此类推序号1,2。其次
画面帧是可以旋转的,类似于前面介绍的Image类一样,Sprite 类旋
转可以支持7种旋转方式,这里就不过多介绍了,旋转的时候是以
图片的中心进行旋转。还有个碰撞判断这里就先不做介绍,会在以
后的游戏中介绍。
大家对Sprite类大概有个理解,现在在来说程序。
public Plane(Image imgs,int fX,int fY,int sX,int sY),这里
传递了一个形参,再以后别的类中应用。
public void drawSelf(Graphics g){....}在这里的判断,是为了
确定飞机刚刚显示在屏幕上的初始位置。
下面hf,moveLift,moveRight,moveUp.moveDown这些方法控制飞机
地移动,这里要说一下plane.setFrame(1)就是得到图片序号1
就是当飞机往左移动的时候,显示图片中 序号1 在屏幕上。方法
里的判断语句是为了让飞机不要飞出屏幕,算法还是很容易的。
如果还有什么不明白的可以回帖。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -