Major Softwares

  INDEX PAGE

  1. 簡介
  2. Java, Android和LibGDX好書推介
  3. Java, Android和LibGDX要學的知識
  4. 用Windows寫Java程式
  5. 用Eclipse寫Java程式
  6. 用Eclipse寫Android程式
  7. 用Eclipse寫LibGDX程式
  8. Standard Java Naming Conventions
  9. System.out.println()的用法和意思
  10. Where is main() method in Android?

LibGDX - Splash & Menu Screen

  1. LibGDX: World, Texture, Background, Camera, Viewport, Screen & OpenGL
  2. LibGDX: Texture, TextureRegion, SpriteBatch & Sprite
  3. UML(Unified Modeling Language): Class Diagram
  4. Type Casting, Upcasting & Downcasting
  5. @Override的用法和意思
  6. LibGDX: Scene2d & Graphical User Interface(GUI)
  7. LibGDX: Splash Screen
  8. LibGDX: Texture Packer
  9. LibGDX: BitmapFonts, JSON & Skin
  10. Android: R.java File
  11. Android: onClick事件的5種實現方式
  12. LibGDX: Game Menu Screen
  13. LibGDX: Advanced Game Menu Screen (using Abstract Screen)
  14. LibGDX: Disposable Interface
  15. Java & LibGDX: super keyword
  16. LibGDX: Advanced Game Menu Screen (using AssetManager)
  17. Java: Array, Arrays, List, ArrayList & LibGDX: Array
  18. LibGDX: File I/O (Preferences)
  19. LibGDX: Game Level Selection Screen
  20. LibGDX: Advanced Game Level Selection Screen (using AssetManager)

LibGDX - Tiled 2D Platform Game

  1. LibGDX: Lifecylce (Render() Method)
  2. LibGDX: Delta Time
  3. LibGDX: Animation & Spritesheet
  4. LibGDX: Keyboard, Mouse & Touch Screen Control
  5. Input Control (Polling VS Event Driven Input)
  6. LibGDX: Tiled (Background and Foreground)
  7. LibGDX: Jumping Action
  8. LibGDX: Tiled (Collision Detection)
  9. LibGDX: Tiled (Bullet Class)
  10. LibGDX: Audio (Sound & Music)
  11. LibGDX: Tiled (Scrollable Background with Camera & HUD)
  12. LibGDX: WorldController & WorldRenderer Class

LibGDX/Java - Card Game No.1 - Blackjack

  1. LibGDX: Install & Setup Android Studio IDE
  2. LibGDX: Use Android Studio to Run Java Hello World
  3. LibGDX: Use Android Studio to Run LibGDX Hello World
  4. Adobe Illustrator: Basic Components Part 1
  5. Adobe Illustrator: Basic Components Part 2
  6. Adobe Illustrator: BlackJack Table & Cards
  7. LibGDX: Blackjack Animation
  8. LibGDX: Interpolation
  9. Java: toString() Method
  10. Java: Blackjack Shuffle Methods
  11. LibGDX: Blackjack Shuffle Method
  12. Java: Blackjack Card Game

LibGDX - Others

  1. Making and Displaying App Icon
  2. LibGDX: Displaying Traditional and Simplified Chinese Characters
  3. LibGDX: Handling Different Screen Resolutions

Unity Game Engine & C#

  1. Visual Studio: C# Hello World
  2. Unity: C# Hello World
  3. Unity: Handling Different Screen Resolutions
  4. Unity: Life Cycle
  5. Unity: StartCoroutine, StopCoroutine, IEnumerator & Yield
  6. Unity: Splash Screen
  7. Unity: Fonts, Traditional and Simplified Chinese Characters
  8. Unity: GameObject, Class Object, new & Instantiate
  9. Unity: Start Screen with Glowing Animated Button
  10. Unity: C# Get & Set Modifier
  11. Unity: Delegates & Events
  12. Unity: File I/O, Read & Write Text File & PlayerPrefs
  13. Unity: Game Level Selection Screen
  14. Unity: Game Menu Screen & ScreenManager
  15. Unity: Encrypt and Decrypt Text File
  16. Unity: Options Menu Screen
  17. Unity: Convert Numbers Image to Custom Font

Unity - Card Game No.1 - Blackjack

  1. Unity: Blackjack Card Game - Part 1 (Full Game)
  2. Unity: Blackjack Card Game - Part 2
  3. Unity: Blackjack Card Game - Part 3
  4. Unity: Blackjack Card Game - Part 4
  5. Unity: Blackjack Card Game - Part 5
  6. Unity: Blackjack Card Game - Part 6
  7. Unity: Blackjack Card Game - Part 7

以下是預告-Coming soon!


Secret Weapon No.1

  1. Unity: Card Game No.2

Advanced Programming

  1. Unity: GPS Programming
  2. Unity: User Login System
  3. Unity: Augmented Reality (AR)

Secret Weapon No.2

  1. Unity: GPS & AR Application

第37節 - LibGDX: Jumping Action

這一節我會介紹用LibGDX的Jumping Action,我在第35節 - LibGDX: Input Control (Polling VS Event Driven Input)介紹過主角圖片(hero1)左右移動的程式設計,這一節會加入跳躍動作(Jumping Action)。

一個2D Platformer Game主要包括以下移動部分(新增跳躍動作):

  1. Standing Left
  2. Standing Right
  3. Walking Left
  4. Walking Right
  5. Jumping Up & Facing Right (including Falling Down)
  6. Jumping Up & Facing Left (including Falling Down)
  7. Jumping Left (including Falling Down)
  8. Jumping Right (including Falling Down)

Movement Summary

以下是所有動作的可能性(新增跳躍動作):

LibGDX: Jumping Action

注意,我會把Falling動作包括在Jumping動作內,只要在空氣中(Jumping或Falling)都叫Jumping。

LibGDX: Jumping Action

製作Spritesheet

LibGDX: Jumping Action
  1. 我在第18節 - LibGDX: Texture Packer介紹過如何用Texture Packer軟件把不同的圖片(.png)合併成一張sprite sheet。以上用了八張簡單圖片做出Standing,Walking和Jumping動作。

Jumping Computational Equation

以下是我們須要用到的Jumping電腦方程式,這條方程式可以用來模擬拋物線動作(Projectile Motion):

LibGDX: Jumping Action
  1. 注意,以上電腦方程式1和2是相同意思,我會在LibGDX內用第2條方程式。

例子1 - deltaTime = 0

LibGDX: Jumping Action
  1. 當 deltaTime = 0,velocity = 300 - (300 x 0) = 300。

例子1 - deltaTime = 1

LibGDX: Jumping Action
  1. 當 deltaTime = 1,velocity = 300 - (300 x 1) = 0。

例子1 - deltaTime = 2

LibGDX: Jumping Action
  1. 當 deltaTime = 2,300 - (300 x 2) = -300。

Terminal Veolocity(終端速度)

Terminal Veolocity(終端速度)就是在流體動力學中,當物體在流體中運動時,在流體向物體運動反方向所施的力下,物體的運動速度因而不變,這時物體所移動的速度就是終端速度,如下圖:

LibGDX: Jumping Action

要在電腦方程式上模擬Terminal Veolocity,可以用以下簡單方法:

LibGDX: Jumping Action
  1. 當velocity小於-300,我們把velocity的數值設定為-300,這樣做就可以模擬Terminal Veolocity。

例子1 - 遊戲開始階段 (Falling to Standing)

遊戲開始時,主角(hero1)會由天空降落地面:

LibGDX: Jumping Action

狀態1(Falling):

我會把Falling動作包括在Jumping動作內,只要在空氣中(Jumping或Falling)都叫Jumping, 則state = Stage.Jumping;

Sprite的座標系統是左X上Y,(0,0)在屏幕的左下角

狀態2(Standing):

當主角(hero1)由天空降落地面後,座標Y是3格tiles,則32x3 = 96。

例子2 - Walking Right

以下是主角(hero1)向右移動的狀態:

LibGDX: Jumping Action

狀態1(Standing Right):

當主角(hero1)向右移動時,State.Standing轉為State.Walking。

狀態2(Walking Right):

當主角(hero1)向右移動時,position.x = position.x + (velocity.x*deltaTime)。

例子3 - Walking Left

以下是主角(hero1)向左移動的狀態:

LibGDX: Jumping Action

狀態1(Standing Left):

向左移動時,isFacingRight = false,則面向左。

狀態2(Walking Left):

向左移動時,velocity=-300,position.x = position.x + (velocity.x*deltaTime)。

例子4 - Jumping Up & Facing Right

以下是主角(hero1)向上跳躍的狀態:

LibGDX: Jumping Action

狀態1(Jumping Up & Facing Right):

當主角(hero1)向上跳躍時,State.Standing轉為State.Jumping。

還有,canJumpAnd Walk = ture,則主角(hero1)在空中時,他可以向左右移動。

另外,要把Jumping模擬拋物線動作(Projectile Motion),可用以下程式:

velocity.y = velocity.y - (velocityMax*deltaTime),或者

velocity.y -=(velocityMax*deltaTime)

狀態2(Top Position & Facing Right):

當主角(hero1)跳到最高點時,velocity.y = 0。

狀態3(Falling Down & Facing Right):

當主角(hero1)降落地面時,velocity.y = -300。

例子5 - Standing Right & Jumping Right or Walking Right & Jumping Right

以下是主角(hero1)向右Standing並向右跳躍,或是向右Walking再向右跳躍:

注意1,向右Standing並向右跳躍,可以同時按下"Space"和"->"鍵

注意2,向右Walking再向右跳躍,可以按下"->"鍵,再按下"Space"鍵

LibGDX: Jumping Action

狀態1(Jumping Up & Facing Right):

當主角(hero1)向上跳躍時,State.Standing轉為State.Jumping。

還有,canJumpAnd Walk = ture,則主角(hero1)在空中時,他可以向左右移動。

另外,要把Jumping模擬拋物線動作(Projectile Motion),可用以下程式:

velocity.y = velocity.y - (velocityMax*deltaTime),或者

velocity.y -=(velocityMax*deltaTime)

狀態2(Top Position & Facing Right):

當主角(hero1)跳到最高點時,velocity.y = 0。

狀態3(Falling Down & Facing Right):

當主角(hero1)降落地面時,velocity.y = -300。

LibGDX程式

例子1 - Movement & Jumping Action (with Tiled Map Background & Foreground)

這個例子會用LibGDX示範向右移動和跳躍的動作:

DesktopLauncher.java

LibGDX: Jumping Action
  1. DesktopLauncher是PC Desktop的Starter Class,我們在DesktopLauncher內設定顯示的大小為1024 X 768 px。

LibGDX: Jumping Action
  1. 把hero1Atlas.pack和hero1Atlas.png儲存到Android的Assets文件夾內(/data/...)。

  2. 把map.tmx和tileAtlas.png儲存到Android的Assets文件夾內(/map/...)。

MyDemo37_1.java

LibGDX: Jumping Action
  1. 建立State (enum type)。

  2. 建立變數(Variable)。

  3. 建立新的Jumping Right和Jumping Left動作。

  4. 設定State.Standing動作。

  5. 設定State.Walking動作。

  6. 設定State.Jumping動作。

  7. 設定Teminal Velocity。

  8. 當主角(hero1)由天空降落地面後,座標Y是3格tiles,則32x3 = 96。

  9. 建立KeyDown()方法的程式碼,這個方法就是供給Keyboard使用,當Keys.Left按下時,主角(hero1)向左移動,State.Standing轉為State.Walking,再設定其他Variables。

  10. 當Keys.Right按下時,主角(hero1)向右移動,State.Standing轉為State.Walking,再設定其他Variables。

  11. 當企立時按Keys.Space (Keys.SPACE, State.Standing)或移動時同時按Keys.Space (Keys.SPACE, State.Walking),主角(hero1)便會向左右跳躍,再設定其他Variables。

  12. 當keyUp()時,State.Walking轉為State.Standing,主角(hero1)就會企立。

  13. 建立touchDown()方法的程式碼,這個方法可以供給Mouse或Touch Screen使用,將屏幕的下半部分分成左右兩部分,左下半部分主角(hero1)向左移動,State.Standing轉為State.Walking,再設定其他Variables。

  14. 將屏幕的下半部分分成左右兩部分,右下半部分主角(hero1)向右移動,State.Standing轉為State.Walking,再設定其他Variables。

  15. 將屏幕的上半部分分成左中右三部分,中心上部分主角(hero1)向上跳躍,State.Standing轉為State.Jumping,再設定其他Variables。

  16. 將屏幕的上半部分分成左中右三部分,左上角部分主角(hero1)向左跳躍,State.Standing轉為State.Jumping,再設定其他Variables。

  17. 將屏幕的上半部分分成左中右三部分,右上角部分主角(hero1)向右跳躍,State.Standing轉為State.Jumping,再設定其他Variables。

  18. 當touchUp()時,State.Walking轉為State.Standing,主角(hero1)就會企立。

Mouse Control & Touch Screen Control

以下對Mouse Control和Touch Screen Control作補充:

LibGDX: Jumping Action
  1. 將屏幕的下半部分分成左右兩部分,右下半部分主角(hero1)向右移動,State.Standing轉為State.Walking,再設定其他Variables。

  2. 將屏幕的上半部分分成左中右三部分,中心上部分主角(hero1)向上跳躍,State.Standing轉為State.Jumping,再設定其他Variables。

  3. 將屏幕的上半部分分成左中右三部分,左上角部分主角(hero1)向左跳躍,State.Standing轉為State.Jumping,再設定其他Variables。

  4. 將屏幕的上半部分分成左中右三部分,右上角部分主角(hero1)向右跳躍,State.Standing轉為State.Jumping,再設定其他Variables。

  5. 當touchUp()時,State.Walking轉為State.Standing,主角(hero1)就會企立。

執行程式:

LibGDX: Jumping Action

以下是LibGDX: Jumping Action程式執行的動畫:

第37節 - LibGDX: Jumping Action

Download above code and sample pictures here!