Pham_loi
Chức vụ: 02:37:06, 02-06-2016 |
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
C:\Users\thanhliem\Documents\NetBeansProjects\RPG\src\RPG.java
<?php
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();}
}
?>
Copy code
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();}
}
?>
Copy code
Chúng ta cũng cần một Midlet.java để ứng dụng hoạt động được.
C:\Users\thanhliem\Documents\NetBeansProjects\RPG\src\Midlet.java
<?php
/*
* 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) {
}
}
?>
Copy code
/*
* 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) {
}
}
?>
Copy code
Kết quả đây :
Source: RPG-49912.zip
Jar: RPG-44072.jar
: 0 ♥
Trực Tuyến:
Khách: 1