⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 通过游戏代码学j2me(四).txt

📁 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 + -