Thứ Bảy, 9 tháng 3, 2013

một nhân vật trên nền không

đây là bài đơn giản nhất mà ai cũng có thể làm được, và nó là bắt đầu cho những gì đó thật phức tạp sau này. Chúng ta sẽ cho hiện thị ra một hình ảnh của nhân vật và điều hướng nó cũng như hình ảnh mà nó sẽ xuất hiện trên màn hình. Hình ảnh mà ta sử dụng ở đây là một hình ảnh gồm 8 hình ảnh nhỏ, mỗi ảnh nhỏ sẽ gọi là khung ảnh và được tính từ 0, ứng với mỗi khung là một hướng mà nhân vật chúng ta sẽ hiện thị. Mỗi khung là 16x16, vậy 8 khung là 128x16

Và đây là file RPG.java của chúng ta RPG.java
C:\Users\thanhliem\Documents\NetBeansProjects\RPG\src\RPG.java
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class RPG extends Canvas{
    //các biến này bao gồm kích thước màn hình w,h, khung hiện tại hiện thị f, phím nhấn k
    int w,h,f=2,k;
    //biến thời gian ghi lại mốc thời gian di chuyển cuối cùng
    long lm=0;
    //nhân vật được tạo qua lớp Sprite là có sẵn trong GameCanvas
    Sprite nv;
    //hình ảnh sử dụng
    Image im;
  public RPG(){
  setFullScreenMode(true);
  w=getWidth();
  h=getHeight();
  try{
      //tạo hình ảnh trước
  im=Image.createImage("/nv.png");
  //tạo Sprite sau khi đã có hình ảnh, mỗi khung nhỏ là 16x16
  nv=new Sprite(im,16,16);}catch(Exception e){}}
  public void paint(Graphics g){
      //lệnh tô màn hình
  g.setColor(0);
  g.fillRect(0,0,w,h);
  //hàm xử lí di chuyển theo phím bấm
  move();
  //vẽ nhân vật ra màn hình thông qua hàm paint có sẵn của lớp Sprite
  nv.paint(g);
  //cho vẽ lại
  repaint();}
  public void keyPressed(int k){this.k=k;}
  public void keyReleased(int k){this.k=0;}
  //hàm di chuyển sẽ xữ lí phím bấm k để xác định khung của nhân vật
  void move(){
      //ở đây cho kiểm tra nếu lần di chuyển cuối cùng cách thời gian hiện tại 20 milli giây thì cho di chuyển tiếp.
  if(lm<curr()-20&&k!=0){
      //công thức xử lí phím và khung hiện tại để cho ra khung ảnh phù hợp, bạn tự thế vào và xem nó có đúng không nhé.
      f=f%2==0?(-k-1)*2+1:(-k-1)*2;
      //sau khi di chuyển thì cho mốc thời gian lần cuối thay đổi.
      lm=curr();
  }
  //đặt giá trị khung ảnh và vị trí nhân vật trên màn hình.
  nv.setFrame(f);
  nv.setPosition(w/2,h/2);
  }
  //hàm trả về thời gian hiện tại, do sử dụng nhiều lần nên làm riêng một hàm cho khõi phải mất công viết lại.
  long curr(){return System.currentTimeMillis();}
}

Chúng ta cũng cần một Midlet.java để ứng dụng hoạt động được. Midlet.java
C:\Users\thanhliem\Documents\NetBeansProjects\RPG\src\Midlet.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;
public class Midlet extends MIDlet {

    public void startApp() {
   Display.getDisplay(this).setCurrent(new RPG()); }
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
    }
}

Kết quả đây :

source jar

Không có nhận xét nào: