13.5-全棧Java筆記:打飛機遊戲實戰專案|KeyEvent|Plane|live
飛機類設計
飛機是我們遊戲中的主物體,需要由玩家直接控制,手段有:鍵盤、滑鼠、觸控式螢幕等等。無論是什麼硬體,本質上都是玩家通過硬體改變遊戲物體的座標,從而實現多種多樣的效果。
本節中,我們重點使用鍵盤進行互動。大家學會了使用鍵盤操控遊戲物體,通過滑鼠或其他,我們只需要通過相關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
相關文章
- Java實現飛機大戰遊戲Java遊戲
- python及pygame雷霆戰機遊戲專案實戰01 控制飛機PythonGAM遊戲
- Java小遊戲——飛機大戰Java遊戲
- Vue+Express全棧開發專案實戰技能:從0到1打造完整電商專案VueExpress全棧
- python 打飛機專案 ( 基類封裝 )Python封裝
- “打飛機”怎麼就成了流量遊戲?遊戲
- cocos2dx遊戲開發——微信打飛機學習筆記(九)——BulletLayer的搭建遊戲開發筆記
- python 打飛機專案 ( 讓敵機發射子彈 )Python
- 飛機大戰和javaweb商城專案JavaWeb
- JMeter實戰-全棧效能測試第3、4章讀書筆記JMeter全棧筆記
- 遊戲引擎數學庫 Plane遊戲引擎
- java飛機大戰小遊戲作業二次開發Java遊戲
- Python全棧工程師之從網頁搭建入門到Flask全棧專案實戰(6) - Flask表單的實現Python全棧工程師網頁Flask
- Python全棧工程師之從網頁搭建入門到Flask全棧專案實戰(5) - Flask中的ORM使用Python全棧工程師網頁FlaskORM
- canvas繪製“飛機大戰”小遊戲,真香!Canvas遊戲
- 飛機小專案
- Python學習筆記——爬蟲之Scrapy專案實戰Python筆記爬蟲
- Python全棧工程師之從網頁搭建入門到Flask全棧專案實戰(7) - 線上問答系統Python全棧工程師網頁Flask
- 開課吧Web全棧架構師正式課(Vue.JS及實戰專案)Web全棧架構Vue.js
- Vue2.x實戰餓了麼專案筆記(一)Vue筆記
- [MAUI 專案實戰] 筆記App(二):資料庫設計UI筆記APP資料庫
- WEB實戰:使用MERN技術棧開發專案Web
- kubernetes學習筆記 (三):阿里雲遊戲業務實戰筆記阿里遊戲
- JAVA專案:Java實現飛揚的小鳥(Flappy Bird)JavaAPP
- 一探全棧專案真面目全棧
- iOS – RxSwift 專案實戰記錄iOSSwift
- 全棧低程式碼專案,你手寫一個企業級的低程式碼全棧專案全棧
- 深入理解Java虛擬機器筆記1: OOM實戰Java虛擬機筆記OOM
- 微信飛機大戰小遊戲編寫分享(上)遊戲
- [Swift]SpriteKit實現類似畫素鳥的小遊戲 - Crashy PlaneSwift遊戲
- 環境資料記錄和分析全棧專案總結十全棧
- 環境資料記錄和分析全棧專案總結九全棧
- 環境資料記錄和分析全棧專案總結四全棧
- 環境資料記錄和分析全棧專案總結二全棧
- 環境資料記錄和分析全棧專案總結七全棧
- 環境資料記錄和分析全棧專案總結六全棧
- 環境資料記錄和分析全棧專案總結五全棧
- 環境資料記錄和分析全棧專案總結三全棧
- 環境資料記錄和分析全棧專案總結一全棧