Pham_loi
Chức vụ: 19:25:23, 28-07-2015 |
Sự điều khiển: keyPressed() và getKeyStates()
Bây giờ thì ta sẽ học cách để đưa lệnh vào cho một trò chơi thông qua các nút bấm. lấy ví dụ của bài học trước, ta sẽ cho di chuyển hình chữ nhật khi các nút được nhấn:
File vd.java vẫn như cũ, file a.java thêm và chỉnh sửa như sau:
<?php
import javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class a extends GameCanvas implements Runnable
{
private vd main;
private Graphics g=getGraphics();
int w,h;
public a(vd main){
super(false);
this.main=main;}
void start(){
w=getWidth();//chieu rong man hinh
h=getHeight();//chieu cao man hinh
Thread t=new Thread(this);
t.start();}
public void run()
{
boolean play=true;
while(play){
g.setColor(0x000000);
g.fillRect(0,0,w,h);
g.setColor(0xffffff);
g.drawRect(w/2,h/2,w/4,h/4);
flushGraphics();
try{Thread.sleep(30);}catch(Exception e){}//cho ngung mot thoi gian
}
}
protected void keyPressed(int key){
if(key==KEY_NUM2){h-=3;}
if(key==KEY_NUM4){w-=3;}
if(key==KEY_NUM6){w+=3;}
if(key==KEY_NUM8){h+=3;}
}
void input(){
int k=getKeyStates();
if(k==UP_PRESSED){h--;}
if(k==LEFT_PRESSED){w--;}
if(k==RIGHT_PRESSED){w++;}
if(k==DOWN_PRESSED){h++;}
}
}
?>
Copy code
import javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class a extends GameCanvas implements Runnable
{
private vd main;
private Graphics g=getGraphics();
int w,h;
public a(vd main){
super(false);
this.main=main;}
void start(){
w=getWidth();//chieu rong man hinh
h=getHeight();//chieu cao man hinh
Thread t=new Thread(this);
t.start();}
public void run()
{
boolean play=true;
while(play){
g.setColor(0x000000);
g.fillRect(0,0,w,h);
g.setColor(0xffffff);
g.drawRect(w/2,h/2,w/4,h/4);
flushGraphics();
try{Thread.sleep(30);}catch(Exception e){}//cho ngung mot thoi gian
}
}
protected void keyPressed(int key){
if(key==KEY_NUM2){h-=3;}
if(key==KEY_NUM4){w-=3;}
if(key==KEY_NUM6){w+=3;}
if(key==KEY_NUM8){h+=3;}
}
void input(){
int k=getKeyStates();
if(k==UP_PRESSED){h--;}
if(k==LEFT_PRESSED){w--;}
if(k==RIGHT_PRESSED){w++;}
if(k==DOWN_PRESSED){h++;}
}
}
?>
Copy code
Ta thấy trong khi sử dụng protected void keyPressed(int key){} mỗi lần nhấn nút chỉ có tác dụng một lần, còn đối với getKeyStates() thì lại có tác dụng khi nhấn giữ. Đó là do getKeyStates() đựơc sử dụng trong một function tự tạo và được gọi vào vòng lặp liên tục mỗi khi vòng lặp lại.
keyPressed(int key) nhận các giá trị theo nút bấm: KEY_NUM0 ->KEY_NUM9 và 48-> 57 (từ 0->9), KEY_STAR (phím *), KEY_POUND (phím #), -6(phím chọn trái), -7(phím chọn phải), -1(phím chuyển lên),-2(phím chuyển xuống), -3(phím chuyển trái), -4(phím chuyển phải), -5(FIRE, phím OK)
và getKeyStates() nhận các giá trị: UP_PRESSED (lên), DOWN_PRESSED (xuống), LEFT_ PRESSED (trái), RIGHT_ PRESSED (phải), FIRE_ PRESSED (phím OK)
Chỉnh sửa lúc 2016-07-10 19:52 bởi Pham_loi
: 0 ♥
Trực Tuyến:
Khách: 1