服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

在j2me游戏使用“精灵”-sprite(图)


  sprite,精灵,顾名思义,专用来代表游戏中的动画角色,比如飞机,坦克等等。在midp1.0中,我们必须自己写专门的类来实现sprite,幸运的是,midp2.0为sprite提供了强力支持,可以创建静态,动态,不透明和透明的sprite,下面我们准备在上次的gamecanvas基础上添加一个sprite并让它动起来。
  
  sprite的主要构造方法有:
  
  sprite(image):构造一个单幅图案的sprite;
  
  sprite(image, int width, int height):构造一个动画sprite,图片将按照指定大小被分为n个frame,通过setframe(int index)就可以让sprite动起来。我们用了一个有透明背景的png图片创建坦克的sprite:
  
 在j2me游戏使用“精灵”-sprite(图)(图一)

  (注意这个图是放大的jpg格式,你需要用photoshop之类的软件处理成有透明背景的png格式,大小为64x16)
  
  我们在eclipse中建立如下工程和目录:
  
 在j2me游戏使用“精灵”-sprite(图)(图二)

  以下是画出sprite的tankgamecanvas.java:
  
  package tank.midp.core;import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;public class tankgamecanvas extends gamecanvas implements runnable {  // 控制方向:  private static int index_of_up = 0;  private static int index_of_down = 1;  private static int index_of_left = 3;  private static int index_of_right = 2;  private boolean isplay; // game loop runs when isplay is true  private long delay; // to give thread consistency  private int currentx, currenty; // to hold current position of the 'x'  private int width; // to hold screen width  private int height; // to hold screen height  private sprite spritetank; // our sprite!  // constructor and initialization  public tankgamecanvas() {    super(true);    width = getwidth();    height = getheight();    currentx = width / 2;    currenty = height / 2;    delay = 20;    // init sprite:    try {      image image = image.createimage("/res/img/player1.png"); // 注意路径      spritetank = new sprite(image, 16, 16); // 大小是16x16    }    catch(exception e) { e.printstacktrace(); }  }  // automatically start thread for game loop  public void start() {    isplay = true;    new thread(this).start();  }  public void stop() { isplay = false; }  // main game loop  public void run() {    graphics g = getgraphics();    while (isplay) {      input();      drawscreen(g);      try {        thread.sleep(delay);      }      catch (interruptedexception ie) {}    }  }  // method to handle user inputs  private void input() {    int keystates = getkeystates();    // left    if ((keystates & left_pressed) != 0) {      currentx = math.max(0, currentx - 1);      spritetank.setframe(index_of_left);    }    // right    if ((keystates & right_pressed) !=0 ) {      if ( currentx + 5 < width)        currentx = math.min(width, currentx + 1);      spritetank.setframe(index_of_right);    }    // up    if ((keystates & up_pressed) != 0) {      currenty = math.max(0, currenty - 1);      spritetank.setframe(index_of_up);    }    // down    if ((keystates & down_pressed) !=0) {      if ( currenty + 10 < height)        currenty = math.min(height, currenty + 1);      spritetank.setframe(index_of_down);    }  }  // method to display graphics  private void drawscreen(graphics g) {    g.setcolor(0); // black    g.fillrect(0, 0, getwidth(), getheight());    // 画一个sprite非常简单:    spritetank.setposition(currentx, currenty);    spritetank.paint(g);    flushgraphics();  }}
  
  运行后的画面如下,可以用上下左右控制坦克:
  
在j2me游戏使用“精灵”-sprite(图)(图三)

扫描关注微信公众号