書馨卡幫你省薪 2024個人購書報告 2024中圖網(wǎng)年度報告
歡迎光臨中圖網(wǎng) 請 | 注冊

Android 3D游戲程序設(shè)計

出版社:清華大學(xué)出版社出版時間:2021-02-01
開本: 大16開 頁數(shù): 453
中 圖 價:¥68.5(4.6折) 定價  ¥149.0 登錄后可看到會員價
加入購物車 收藏
運費6元,滿39元免運費
?新疆、西藏除外
溫馨提示:5折以下圖書主要為出版社尾貨,大部分為全新(有塑封/無塑封),個別圖書品相8-9成新、切口
有劃線標(biāo)記、光盤等附件不全詳細(xì)品相說明>>
本類五星書更多>

Android 3D游戲程序設(shè)計 版權(quán)信息

Android 3D游戲程序設(shè)計 本書特色

《Android 3D游戲程序設(shè)計》通過Java和OpenGL ES開發(fā)Android平臺上的3D游戲。開發(fā)過程中將使用安裝了Android開發(fā)工具(ADT)插件的Eclipse集成開發(fā)環(huán)境(IDE)。本書并不是一本簡單的參考書,而是通過示例和學(xué)習(xí)用例展示游戲開發(fā)中的關(guān)鍵概念。

Android 3D游戲程序設(shè)計 內(nèi)容簡介

《Android 3D游戲程序設(shè)計》詳細(xì)闡述了與Android 3D游戲設(shè)計相關(guān)的解決方案,主要包括Android簡介、Android中的Java語言、3D數(shù)學(xué)知識、基于OpenGL ES的3D圖形學(xué)、運動和碰撞、游戲環(huán)境、創(chuàng)建玩家角色、創(chuàng)建敵方角色、用戶界面、*終的Drone Grid游戲、Android原生開發(fā)包(NDK)、游戲的發(fā)布和市場化運作等內(nèi)容。此外,本書還提供了豐富的示例和代碼,以幫助讀者進(jìn)一步理解相關(guān)方案的實現(xiàn)過程。 本書適合作為高等院校計算機(jī)及相關(guān)專業(yè)的教材和教學(xué)參考書,也可作為相關(guān)開發(fā)人員的自學(xué)教材和參考手冊。

Android 3D游戲程序設(shè)計 目錄

第1章 Android簡介 1

1.1 Android概述 1

1.2 Android SDK 1

1.2.1 Android軟件開發(fā)工具包(SDK)的需求條件 1

1.2.2 Android SDK組件 2

1.2.3 配置開發(fā)環(huán)境 5

1.2.4 Android開發(fā)工具集成開發(fā)環(huán)境 6

1.3 “Hello World”示例程序 11

1.3.1 創(chuàng)建新的Android項目 11

1.3.2 Android模擬器 16

1.3.3 真實的Android設(shè)備 18

1.3.4 主源代碼 19

1.3.5 圖形布局 20

1.3.6 實際的“Hello World”數(shù)據(jù) 22

1.4 本章小結(jié) 22

第2章 Android中的Java語言 23

2.1 Java語言概述 23

2.2 Java注釋 23

2.3 Java基本數(shù)據(jù)類型 24

2.3.1 數(shù)組 24

2.3.2 數(shù)據(jù)修飾符 24

2.4 Java運算符 25

2.4.1 算術(shù)運算符 25

2.4.2 一元運算符 26

2.4.3 條件運算符 26

2.4.4 位運算符和移位運算符 26

2.5 Java流控制語句 27

2.6 Java類 28

2.6.1 包和類 28

2.6.2 訪問包中的類 28

2.6.3 Java接口 29

2.6.4 訪問類變量和函數(shù) 29

2.7 Java函數(shù) 30

2.8 基本的Android Java程序框架 31

2.8.1 Activity類的生命周期 31

2.8.2 Activity類生命周期的關(guān)鍵點 32

2.8.3 查看Activity的生命周期 32

2.9 基本的Android Java OpenGL框架 34

2.9.1 單視圖OpenGL ES應(yīng)用程序 34

2.9.2 OpenGL ES多視圖應(yīng)用程序 37

2.10 3D OpenGL“Hello Droid”示例 40

2.10.1 將項目示例導(dǎo)入Eclipse中 40

2.10.2 MainActivity和MyGLSurfaceView類 40

2.10.3 MyGLRenderer類 42

2.10.4 類概述 46

2.10.5 體驗“Hello Droid”示例程序 47

2.11 本章小結(jié) 49

第3章 3D數(shù)學(xué)知識 51

3.1 向量和向量操作 51

3.1.1 向量的含義 51

3.1.2 Vector類 54

3.1.3 向量的模 54

3.1.4 向量的標(biāo)準(zhǔn)化 55

3.1.5 向量加法 55

3.1.6 向量乘法 56

3.1.7 向量逆置 57

3.1.8 直角三角形 58

3.1.9 向量點積 58

3.2 矩陣和矩陣操作 60

3.2.1 矩陣的含義 60

3.2.2 Android內(nèi)建Matrix類 61

3.2.3 單位矩陣 61

3.2.4 矩陣轉(zhuǎn)置 61

3.2.5 矩陣乘法 62

3.2.6 逆矩陣 63

3.2.7 齊次坐標(biāo) 63

3.2.8 使用矩陣平移對象 63

3.2.9 使用矩陣旋轉(zhuǎn)對象 64

3.2.10 使用矩陣縮放對象 65

3.2.11 組合矩陣 65

3.3 操控3D空間中的對象 66

3.3.1 構(gòu)建3D對象的模型矩陣 66

3.3.2 向?qū)ο笾刑砑有D(zhuǎn)行為 68

3.3.3 在3D空間中移動對象 69

3.3.4 縮放對象 71

3.4 本章小結(jié) 72

第4章 基于OpenGL ES的3D圖形學(xué) 73

4.1 Android上的OpenGL ES 73

4.1.1 OpenGL對象渲染 73

4.1.2 渲染過程 74

4.2 OpenGL ES著色語言 80

4.2.1 基本數(shù)據(jù)類型 80

4.2.2 向量分量 81

4.2.3 運算符和表達(dá)式 81

4.2.4 程序流控制語句 82

4.2.5 存儲限定符 83

4.2.6 保留變量 84

4.2.7 內(nèi)置函數(shù) 84

4.3 頂點著色器 85

4.4 片元或像素著色器 86

4.5 Shader類 87

4.6 相機(jī) 94

4.7 3D對象網(wǎng)格 100

4.7.1 網(wǎng)格頂點數(shù)據(jù) 100

4.7.2 MeshEx類 101

4.8 光照機(jī)制 107

4.8.1 光照機(jī)制概述 107

4.8.2 PointLight類 108

4.8.3 構(gòu)建法線矩陣 111

4.8.4 頂點著色器中的光照 112

4.8.5 片元著色器光照 115

4.9 材質(zhì) 116

4.9.1 Material類 117

4.9.2 片元著色器中的材質(zhì) 117

4.10 紋理 118

4.10.1 紋理放大和縮小 118

4.10.2 紋理剪裁和重復(fù) 119

4.10.3 Texture類 120

4.10.4 頂點著色器中的紋理 122

4.10.5 片元著色器中的紋理 123

4.11 本章小結(jié) 123

第5章 運動和碰撞 125

5.1 運動行為概述 125

5.1.1 線性速度和角加速度 125

5.1.2 牛頓運動定律 126

5.1.3 重力 127

5.1.4 角速度和角加速度 127

5.1.5 旋轉(zhuǎn)作用力 128

5.2 Physics類 129

5.3 基于作用力的線性運動和角運動示例 135

5.3.1 創(chuàng)建4面紋理立方體 135

5.3.2 調(diào)整Object3d類 136

5.3.3 調(diào)整MyGLRenderer類 137

5.4 碰撞行為概述 139

5.4.1 碰撞檢測 139

5.4.2 調(diào)整MeshEx類 140

5.4.3 調(diào)整Object3d類 143

5.4.4 碰撞類型 144

5.4.5 調(diào)整Physics類 145

5.4.6 碰撞計算 149

5.4.7 *終的Physics類 150

5.5 碰撞計算示例 151

5.5.1 調(diào)整MyGLRenderer類 151

5.5.2 牛頓萬有引力定律 154

5.6 使用頂點著色器創(chuàng)建重力網(wǎng)格 155

5.6.1 修改Physics類 155

5.6.2 修改MeshEx類 155

5.6.3 GravityGridEx類 156

5.6.4 創(chuàng)建新的頂點著色器 167

5.6.5 調(diào)整MyGLRenderer類 170

5.7 本章小結(jié) 175

第6章 游戲環(huán)境 177

6.1 Android中的聲音 177

6.1.1 Sound類 177

6.1.2 調(diào)整Object3d類 178

6.2 音效示例 180

6.3 HUD概述 184

6.3.1 HUD 184

6.3.2 創(chuàng)建BillBoard類 185

6.3.3 創(chuàng)建BillBoardFont類 188

6.3.4 調(diào)整Texture類 189

6.3.5 創(chuàng)建BillBoardCharacterSet類 189

6.3.6 創(chuàng)建HUDItem類 194

6.3.7 創(chuàng)建HUD類 196

6.3.8 調(diào)整Object3d類 202

6.4 HUD創(chuàng)建示例 203

6.5 數(shù)據(jù)持久化 212

6.5.1 調(diào)整Orientation類 213

6.5.2 調(diào)整Physics類 214

6.5.3 調(diào)整Object3d類 214

6.6 保存持久化數(shù)據(jù) 214

6.6.1 調(diào)整MyGLRenderer類 214

6.6.2 調(diào)整MyGLSurfaceView類 216

6.6.3 調(diào)整MainActivity類 217

6.7 本章小結(jié) 217

第7章 創(chuàng)建玩家角色 219

7.1 創(chuàng)建玩家圖形 219

7.1.1 創(chuàng)建Mesh類 219

7.1.2 調(diào)整Object3d類 220

7.1.3 調(diào)整使用Object3d類的其他類 222

7.1.4 創(chuàng)建Pyramid類 223

7.1.5 創(chuàng)建PowerPyramid類 224

7.2 創(chuàng)建玩家的視點和輸入 225

7.2.1 調(diào)整MyGLRenderer類 226

7.2.2 調(diào)整MyGLSurfaceView類 228

7.3 創(chuàng)建玩家的武器和彈藥 229

7.4 創(chuàng)建爆炸效果 239

7.4.1 創(chuàng)建PolyParticleEx類 239

7.4.2 創(chuàng)建SphericalPolygonExplosion類 244

7.4.3 調(diào)整Object3d類 252

7.5 生成游戲?qū)ο蟮慕y(tǒng)計數(shù)據(jù) 253

7.5.1 創(chuàng)建Stats類 253

7.5.2 調(diào)整Object3d類 255

7.6 射擊目標(biāo) 256

7.6.1 創(chuàng)建玩家的武器系統(tǒng) 259

7.6.2 處理碰撞問題 263

7.6.3 調(diào)整onDrawFrame()函數(shù) 265

7.7 本章小結(jié) 268

第8章 創(chuàng)建敵方角色 269

8.1 創(chuàng)建Arena對象 269

8.2 人工智能概述 273

8.3 創(chuàng)建坦克敵方角色 275

8.3.1 創(chuàng)建坦克圖形 275

8.3.2 創(chuàng)建坦克狀態(tài) 276

8.3.3 創(chuàng)建車輛命令 278

8.3.4 創(chuàng)建坦克狀態(tài)并處理命令 284

8.3.5 創(chuàng)建車輛的轉(zhuǎn)向類 286

8.3.6 創(chuàng)建坦克的巡邏/攻擊狀態(tài) 288

8.3.7 創(chuàng)建坦克對象的有限狀態(tài)機(jī) 299

8.3.7 創(chuàng)建坦克對象的Driver類 303

8.3.9 調(diào)整Physics類 307

8.3.10 調(diào)整Object3d類 309

8.3.11 創(chuàng)建坦克對象 310

8.4 ArenaObject3d類和Tank類 318

8.5 本章小結(jié) 326

第9章 用戶界面 327

9.1 創(chuàng)建主菜單系統(tǒng) 327

9.1.1 MenuItem類 327

9.1.2 MainMenu類 329

9.2 創(chuàng)建高分榜 332

9.2.1 HighScoreEntry類 332

9.2.2 HighScoreTable類 334

9.3 創(chuàng)建高分輸入系統(tǒng) 342

9.4 用戶界面示例 350

9.5 本章小結(jié) 360

第10章 *終的Drone Grid游戲 361

10.1 組織和控制敵方角色分組 361

10.1.1 ArenaObjectSet類 361

10.1.2 TankFleet類 372

10.2 GamePlayController類 376

10.3 保存和加載游戲狀態(tài) 385

10.3.1 調(diào)整MainActivity類 386

10.3.2 調(diào)整MyGLRenderer類 386

10.4 根據(jù)游戲結(jié)束狀態(tài)添加游戲 388

10.5 Drone Grid游戲示例 392

10.6 本章小結(jié) 404

第11章 Android原生開發(fā)工具包(NDK) 405

11.1 NDK概述 405

11.2 NDK系統(tǒng)需求條件 405

11.3 Android平臺兼容性 406

11.4 安裝Android NDK 406

11.5 Android NDK的使用方式 407

11.6 Java本地接口概述 407

11.6.1 Java接口指針 408

11.6.2 加載和鏈接本地C/C++方法 408

11.6.3 命名的本地函數(shù) 409

11.6.4 本地函數(shù)參數(shù) 409

11.6.5 C/C++本地函數(shù)格式 410

11.6.6 本地類型 410

11.6.7 引用類型 410

11.6.8 JNI簽名類型 411

11.6.9 調(diào)用Java中的本地代碼并訪問本地代碼中的Java方法 412

11.6.10 JNI函數(shù) 413

11.7 Android JNI Makefile 414

11.8 基于JNI和本地代碼的“Hello World”示例 415

11.9 向Drone Grid游戲中添加本地函數(shù) 419

11.9.1 計算本地代碼中的重力 419

11.9.2 從本地代碼中旋轉(zhuǎn)對象 420

11.9.3 從本地代碼中計算碰撞的反作用力 424

11.10 本章小結(jié) 428

第12章 游戲的發(fā)布和市場化運作 429

12.1 創(chuàng)建*終的發(fā)布文件 429

12.2 測試.apk發(fā)布文件 432

12.3 Android市場和策略列表 435

12.3.1 Google Play 435

12.3.2 Amazon Appstore 435

12.3.3 Samsung Apps Store 436

12.3.4 Aptoide 436

12.3.5 Appitalism 436

12.3.6 GetJar 437

12.3.7 SlideMe 437

12.3.8 Soc.Io Mall 437

12.3.9 用戶自己的網(wǎng)站 437

12.4 Android廣告網(wǎng)絡(luò)列表 438

12.4.1 AppFlood 438

12.4.2 Appwiz 439

12.4.3 LeadBolt 439

12.4.4 AppBucks 440

12.4.5 AdMob 441

12.4.6 StartApp 442

12.4.7 其他廣告網(wǎng)絡(luò)和營銷公司 444

12.5 Android游戲評論網(wǎng)站 447

12.6 其他有用的網(wǎng)站 452

12.7 本章小結(jié) 452

展開全部

Android 3D游戲程序設(shè)計 節(jié)選

第8章 創(chuàng)建敵方角色 本章討論Drone Grid游戲中敵方角色的創(chuàng)建,包括Arena對象和坦克角色,其復(fù)雜程度也隨之上升。為了理解敵方角色的行為,我們需要考查與有限狀態(tài)機(jī)相關(guān)的基本概念及其相關(guān)類(由計算機(jī)控制的坦克角色)。隨后,本章將探討實現(xiàn)坦克角色的其他類。*后,我們還將通過示例展示相關(guān)類的應(yīng)用方式。8.1 創(chuàng)建Arena對象 Arena對象是一類簡單的敵方角色對象,并可在重力網(wǎng)格區(qū)域內(nèi)行進(jìn)。此類角色在重力網(wǎng)格內(nèi)以直線方式移動,直至到達(dá)網(wǎng)格邊界或與玩家金字塔碰撞。在到達(dá)網(wǎng)格邊界或與金字塔碰撞后,該對象將以相反的方向運動,并保持相同的速度。 ArenaObject3d類繼承自O(shè)bject3d類,如下所示。 public class ArenaObject3d extends Object3d m_ArenaObjectID變量可加載一個字符串,用以標(biāo)識游戲場景中的個體對象,如下所示。 private String m_ArenaObjectID = "None"; m_XmaxBoundary和m_XminBoundary變量分別加載游戲網(wǎng)格或游戲場景中沿x軸的*大和*小邊界值,如下所示。 private float m_XMaxBoundary = 1; private float m_XMinBoundary = 0; m_ZmaxBoundary和m_ZminBoundary變量分別加載游戲場景中沿z軸的*大和*小邊界值,如下所示。 private float m_ZMaxBoundary = 1; private float m_ZMinBoundary = 0; 當(dāng)Arena對象與地面碰撞時,m_HitGroundSFXIndex變量加載播放音效的句柄(如果存在),如下所示。 private int m_HitGroundSFXIndex = -1; 當(dāng)Arena對象爆炸時,m_ExplosionSFXIndex變量加載播放音效的句柄,如下所示。 private int m_ExplosionSFXIndex = -1; ArenaObject3d()構(gòu)造函數(shù)調(diào)用Object3d類的構(gòu)造函數(shù),隨后針對Arena對象設(shè)置游戲場景邊界,如代碼清單8.1所示。代碼清單8.1 ArenaObject3d()構(gòu)造函數(shù) ArenaObject3d(Context iContext, Mesh iMesh, MeshEx iMeshEx, Texture[] iTextures, Material iMaterial,Shader iShader, float XMaxBoundary,float XMinBoundary,float ZMaxBoundary,float ZMinBoundary) { super(iContext, iMesh, iMeshEx, iTextures, iMaterial, iShader); m_XMaxBoundary = XMaxBoundary; m_XMinBoundary = XMinBoundary; m_ZMaxBoundary = ZMaxBoundary; m_ZMinBoundary = ZMinBoundary; } 通過創(chuàng)建聲音的資源ID和加載該聲音的聲音池并調(diào)用Object3d類中的AddSound()函數(shù),CreateExplosionSFX()函數(shù)創(chuàng)建一個新的爆炸音效。相應(yīng)地,m_ExplosionSFXIndex變量加載新創(chuàng)建聲音的索引,如代碼清單8.2所示。代碼清單8.2 創(chuàng)建爆炸音效 void CreateExplosionSFX(SoundPool Pool, int ResourceID) { m_ExplosionSFXIndex = AddSound(Pool, ResourceID); } PlayExplosionSFX()函數(shù)播放爆炸的音效(如果存在),也就是說,利用爆炸音效索引調(diào)用Object3d類中的PlaySound()函數(shù),如代碼清單8.3所示。代碼清單8.3 播放爆炸音效 void PlayExplosionSFX() { if (m_ExplosionSFXIndex >= 0) { PlaySound(m_ExplosionSFXIndex); } } 通過音效的資源ID和該聲音所存儲的聲音池并調(diào)用Object3d類中的AddSound()函數(shù),CreateHitGroundSFX()函數(shù)創(chuàng)建一個新的音效。隨后,新創(chuàng)建的聲音索引被返回并被置于m_HitGroundSFXIndex中,如代碼清單8.4所示。代碼清單8.4 創(chuàng)建撞擊地面的音效 void CreateHitGroundSFX(SoundPool Pool, int ResourceID) { m_HitGroundSFXIndex = AddSound(Pool, ResourceID); } PlayHitGoundSFX()函數(shù)針對Arena對象撞擊地面播放其音效,如代碼清單8.5所示。代碼清單8.5 播放撞擊地面的音效 void PlayHitGoundSFX() { if (m_HitGroundSFXIndex >= 0) { PlaySound(m_HitGroundSFXIndex); } } RenderArenaObject()函數(shù)負(fù)責(zé)將Arena對象繪制至屏幕上。此外還測試對象是否剛好撞擊地面。若是,則播放撞擊地面的音效,并重置Physics類中的撞擊地面的狀態(tài),如代碼清單8.6所示。代碼清單8.6 渲染Arena對象 void RenderArenaObject(Camera Cam, PointLight light) { // Object hits ground boolean ShakeCamera = GetObjectPhysics().GetHitGroundStatus(); if (ShakeCamera) { GetObjectPhysics().ClearHitGroundStatus(); PlayHitGoundSFX(); } DrawObject(Cam, light); } UpdateArenaObject()函數(shù)負(fù)責(zé)更新Arena敵方角色對象,如代碼清單8.7所示。代碼清單8.7 更新Arena對象 void UpdateArenaObject() { if (IsVisible() == true) { // Check Bounds for Z if (m_Orientation.GetPosition().z >= m_ZMaxBoundary) { Vector3 v = GetObjectPhysics().GetVelocity(); if (v.z > 0) { v.z = -v.z; } } else if (m_Orientation.GetPosition().z = m_XMaxBoundary) { Vector3 v = GetObjectPhysics().GetVelocity(); if (v.x > 0) { v.x = -v.x; } } if (m_Orientation.GetPosition().x <= m_XMinBoundary) { Vector3 v = GetObjectPhysics().GetVelocity(); if (v.x < 0) { v.x = -v.x; } } } // Update Physics for this object UpdateObject3d(); } UpdateArenaObject()函數(shù)執(zhí)行下列各項操作。 (1)如果對象處于可見狀態(tài),則UpdateArenaObject()函數(shù)持續(xù)更新操作;否則該函數(shù)將返回。 (2)檢查*大z邊界,以查看對象是否位于其外部,若是且遠(yuǎn)離邊界,則逆置對象速度的z分量。隨后檢查*小z邊界,以查看對象是否位于外部,若是且遠(yuǎn)離邊界,則逆置對象速度的z分量。 (3)針對x邊界,重復(fù)步驟(2),并逆置對象速度的x分量,而非z分量。 圖8.1顯示了當(dāng)前Arena對象示例。另外,本章后續(xù)示例還將使用該對象。

商品評論(0條)
暫無評論……
書友推薦
本類暢銷
編輯推薦
返回頂部
中圖網(wǎng)
在線客服