飛機類設計
飛機是我們游戲中的主物體,需要由玩家直接控制,手段有:鍵盤、鼠標、觸摸屏等等。無論是什么硬件,本質上都是玩家通過硬件改變游戲物體的坐標,從而實現多種多樣的效果。
本節中,我們重點使用鍵盤進行交互。大家學會了使用鍵盤操控游戲物體,通過鼠標或其他,我們只需要通過相關API的幫助即可輕松實現。
鍵盤控制原理
鍵盤和程序交互時,每次按下鍵、松開鍵都會觸發相應的鍵盤事件,事件的信息都封裝到了KeyEvent對象中。
為了識別按下的鍵是哪個鍵, 系統對鍵盤所有按鍵做了編號,每個按鍵都對應相應的數字。 比如:回車鍵對應數字10,空格鍵對應數字32等。這些編號,我們都可以通過KeyEvent對象來查詢,KeyEvent.VK_ENTER 實際就是存儲了數字10。
本游戲中,我們通過“上下左右”鍵來控制飛機的移動,因此我們可以設定四個布爾類型的變量表示四個基本方向。
boolean left,up,right,down;
當按下左鍵時,left=true;當松開左鍵時,left=false;
程序根據四個方向的狀態,進行移動,比如:left=true,即飛機向左移動,那么只需x坐標做減法即可。 其他方向同理。
if (left) {
x -= speed;
}
飛機類:增加操控功能
我們為飛機類增加了4個方向,用來控制飛機的移動。同時,為了后續需求,也增加了live變量,它表示飛機是“活的”還是“死的”,“活的”我們就畫出飛機,“死的”就不畫飛機了。
【示例1】Plane類:增加操控功能
packagecn.sxt.game;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.event.KeyEvent;
publicclassPlaneextendsGameObject {
boolean left, up, right, down;
boolean live = true;
//按下上下左右鍵,則改變方向值。
// 比如:按下上鍵,則e.getKeyCode()的值就是VK_UP,那么置:up=true;
public void addDirection(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
left = true;
break;
case KeyEvent.VK_UP:
up = true;
break;
case KeyEvent.VK_RIGHT:
right = true;
break;
case KeyEvent.VK_DOWN:
down = true;
break;
default:
break;
}
}
case KeyEvent.VK_UP:
up = false;
break;
case KeyEvent.VK_RIGHT:
right = false;
break;
case KeyEvent.VK_DOWN:
down = false;
break;
default:
break;
}
}
@Override
public void drawMySelf(Graphics g) {
super.drawMySelf(g);
// 根據方向,計算飛機新的坐標
if (left) {
x -= speed;
}
if (right) {
x += speed;
}
if (up) {
y -= speed;
}
if (down) {
y += speed;
}
}
public Plane(Image img, double x, double y, int speed) {
super(img, x, y);
this.speed = speed;
}
}
主窗口類:增加鍵盤監聽
我們通過定義KeyMonitor內部類來實現鍵盤監聽功能。定義成內部類是為了方便和外部窗口類(MyGameFrame)交互,可以直接調用外部類的屬性和方法。
【示例2】MyGameFrame類:增加鍵盤監聽功能
//定義為內部類,可以方便的使用外部類的普通屬性
class KeyMonitor extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
plane.addDirection(e);
}
@Override
public void keyReleased(KeyEvent e) {
plane.minusDirection(e);
}
}
我們在launchFrame()方法中,啟動鍵盤監聽:
【示例3】啟動鍵盤監聽
addKeyListener(newKeyMonitor());//增加鍵盤的監聽
至此,我們就實現了“四個方向”靈活移動飛機的功能!讓我們終于可以和游戲物體直接互動了,大家一定要試試哦。
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數據庫從入門到精通
C-手刃移動前端和Web前端
D-J2EE從了解到實戰
E-Java高級框架精解
F-Linux和Hadoop