13.5-全棧Java筆記:打飛機遊戲實戰專案|KeyEvent|Plane|live

weixin_34290000發表於2017-07-31

飛機類設計

飛機是我們遊戲中的主物體,需要由玩家直接控制,手段有:鍵盤、滑鼠、觸控式螢幕等等。無論是什麼硬體,本質上都是玩家通過硬體改變遊戲物體的座標,從而實現多種多樣的效果。

本節中,我們重點使用鍵盤進行互動。大家學會了使用鍵盤操控遊戲物體,通過滑鼠或其他,我們只需要通過相關API的幫助即可輕鬆實現。

鍵盤控制原理

鍵盤和程式互動時,每次按下鍵、鬆開鍵都會觸發相應的鍵盤事件,事件的資訊都封裝到了KeyEvent物件中。

為了識別按下的鍵是哪個鍵, 系統對鍵盤所有按鍵做了編號,每個按鍵都對應相應的數字。 比如:Enter鍵對應數字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

相關文章