Bản quyền Devlin's lab.
Trong phần này, chúng ta sẽ tạo lớp MIDlet để chạy game. Bạn nên bắt đầu với Part 1 trước nếu chưa xem. Bây giờ, hãy mở source code của MIDlet ra. Ta sẽ khai báo vài biến dưới dòng khai báo lớp.
biến myCanvas được khai báo với kiểu giá trị clsCanvas, là lớp ta vừa viết. Biến isPaused sẽ cho chúng ta biết MIDlet có đang tạm dừng hay không. Tiếp theo, chúng ta thêm vài dòng code vào hàm startApp( ) để bắt đầu vòng lặp game và hiện thực lớp clsCanvas.
Đối tượng Display chịu trách nhiệm hiển thị mọi thứ lên màn hình. Trong code dưới đây, Display sẽ liên kết với MIDlet và đặt đối tượng clsCanvas là đối tượng hiện tại được hiển thị trên thiết bị. Chúng ta cũng gọi phương thức start( ) của clsCanvas để bắt đầu thread ( luồng ) và khởi động vòng lặp.
Tiếp theo, chúng ta sửa phương thức pause( ) để biến isPause được cập nhật mỗi khi MIDlet mất kiểm soát hay được ẩn đi.
Cuối cùng ta thêm code để giải phóng tài nguyên MIDlet đã chiếm dụng khi game kết thúc. Code này được thêm vào phương thức destroyApp( )
Dưới đây là source code của lớp midMain.java
Còn đây là code hoàn chỉnh của lớp clsCanvas
Ok, chúng ta đã xong mẫu game đầu tiên. Bạn có thể thử ngay để xem những gì mình vừa làm được:
Bạn có thể download code ở đây : myGame.rar (26.4 Kb)
Bài học hom nay đến đây là kết thúc. Tôi sẽ dùng mẫu này cho những phần sau của bài học. Nếu bạn có thắc mắc, hãy mail cho tôi scorpion06.vs.knight@gmail.com hoặc liên hệ trực tiếp đến Devlin tại trang blog của anh ta: http://devlinslab.blogspot.com/
Chúc các bạn thành công !!
Trong phần này, chúng ta sẽ tạo lớp MIDlet để chạy game. Bạn nên bắt đầu với Part 1 trước nếu chưa xem. Bây giờ, hãy mở source code của MIDlet ra. Ta sẽ khai báo vài biến dưới dòng khai báo lớp.
public class midMain extends MIDlet {
private clsCanvas myCanvas;
public boolean isPaused = false;
...
...
biến myCanvas được khai báo với kiểu giá trị clsCanvas, là lớp ta vừa viết. Biến isPaused sẽ cho chúng ta biết MIDlet có đang tạm dừng hay không. Tiếp theo, chúng ta thêm vài dòng code vào hàm startApp( ) để bắt đầu vòng lặp game và hiện thực lớp clsCanvas.
public void startApp() {
// check if MIDlet was paused
if (!isPaused){
// initialized only once
// create an instance of clsCanvas
myCanvas = new clsCanvas(this);
// get display
Display d = Display.getDisplay(this);
// make clsCanvas visible
d.setCurrent(myCanvas);
// launch the thread/start main loop
myCanvas.start();
}
//no longer paused
isPaused = false;
}
Đối tượng Display chịu trách nhiệm hiển thị mọi thứ lên màn hình. Trong code dưới đây, Display sẽ liên kết với MIDlet và đặt đối tượng clsCanvas là đối tượng hiện tại được hiển thị trên thiết bị. Chúng ta cũng gọi phương thức start( ) của clsCanvas để bắt đầu thread ( luồng ) và khởi động vòng lặp.
Tiếp theo, chúng ta sửa phương thức pause( ) để biến isPause được cập nhật mỗi khi MIDlet mất kiểm soát hay được ẩn đi.
public void pauseApp() {
// MIDlet is paused or not the active window
isPaused = true;
}
Cuối cùng ta thêm code để giải phóng tài nguyên MIDlet đã chiếm dụng khi game kết thúc. Code này được thêm vào phương thức destroyApp( )
public void destroyApp(boolean unconditional) {
myCanvas = null;
// close MIDlet
notifyDestroyed();
}
Dưới đây là source code của lớp midMain.java
package pkgGame;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.*;
public class midMain extends MIDlet {
private clsCanvas myCanvas;
public boolean isPaused = false;
public void startApp() {
// check if MIDlet was paused
if (!isPaused){
// initialized only once
// create an instance of clsCanvas
myCanvas = new clsCanvas(this);
// get display
Display d = Display.getDisplay(this);
// make clsCanvas visible
d.setCurrent(myCanvas);
// launch the thread/start main loop
myCanvas.start();
}
//no longer paused
isPaused = false;
}
public void pauseApp() {
// MIDlet is paused or not the active window
isPaused = true;
}
public void destroyApp(boolean unconditional) {
myCanvas = null;
// close MIDlet
notifyDestroyed();
}
}
Còn đây là code hoàn chỉnh của lớp clsCanvas
package pkgGame;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
public class clsCanvas extends GameCanvas implements Runnable {
private boolean isRunning = true;
private Graphics g;
private midMain p;
public clsCanvas(midMain parent) {
super(false);
p = parent;
}
public void start(){
// creat a new instance of the Thread class
Thread thread = new Thread(this);
// launch the thread
thread.start();
}
public void run() {
g = getGraphics();
while(isRunning){
// get key state
int iKey = getKeyStates();
// check if FIRE or 5 is pressed
if ((iKey & FIRE_PRESSED) != 0){
// signal an exit
isRunning = false;
}
//set drawing color to black
g.setColor(0x000000);
//fill the whole screen with black
g.fillRect(0, 0, getWidth(), getHeight());
// set drawing color to white
g.setColor(0xffffff);
//display a string
g.drawString("Basic Java ME Game Template", 2, 2, Graphics.TOP | Graphics.LEFT);
//display the key states in white
g.drawString(Integer.toString(iKey), 2, 22, Graphics.TOP | Graphics.LEFT);
flushGraphics();
try{
// make this thread sleep for 30 ms
Thread.sleep(30);
} catch(Exception e){
}
}
// mark as garbage
g = null;
// close the MIDlet
p.destroyApp(true);
p = null;
}
}
Ok, chúng ta đã xong mẫu game đầu tiên. Bạn có thể thử ngay để xem những gì mình vừa làm được:
Emulator output : Basic Java ME Game Template
Bạn có thể download code ở đây : myGame.rar (26.4 Kb)
Bài học hom nay đến đây là kết thúc. Tôi sẽ dùng mẫu này cho những phần sau của bài học. Nếu bạn có thắc mắc, hãy mail cho tôi scorpion06.vs.knight@gmail.com hoặc liên hệ trực tiếp đến Devlin tại trang blog của anh ta: http://devlinslab.blogspot.com/
Chúc các bạn thành công !!
Không có nhận xét nào:
Đăng nhận xét