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

第30節 - LibGDX: Advanced Game Level Selection Screen (using AssetManager)

這一節我會介紹LibGDX-Advanced Game Level Selection Screen (using AssetManager),我會把第29節 - LibGDX: Game Level Selection Screen重寫,加入AssetManager類別,我們須要用到以下主要章節:

  1. 第26節 - LibGDX: Advanced Game Menu Screen (using AssetManager)
  2. 第29節 - LibGDX: Game Level Selection Screen

LevelScreen.java

以下是LevelScreen.java執行後的畫面:

注意1,這個LevelScreen預設只有10個Levels,所以只有一頁,如果將來須要多頁再作詳細介紹。

注意2,這個LevelScreen暫時沒有設定按鈕工能,我會在介紹Level 1的遊戲製作時再詳細介紹。

LibGDX-Advanced Level Screen using AssetManager

執行結果:

以下是LibGDX-Advanced Game Level Selection Screen (using AssetManager)程式執行的結果:


AssetManager

以下是把第29節 - LibGDX: Game Level Selection Screen重寫,加入AssetManager類別:

LibGDX-Advanced Level Screen using AssetManager
  1. 首先把LevelScreen.java內的textureAtlas刪除,因為我們會在Assets.java內用AssetManager類別把levelatlas.pack加載。

  2. 建立一個類別方法(static loadLevel())方法,這樣做我們就可以在程式的任何位置呼叫Assets.loadLevel();方法,這方法內就包含了AssetManager類別的load()方法,它把levelatlas.pack加載。

    load()方法就是用來加載levelatlas.pack 。

  3. 再建立一個類別方法((static setLevel()),它把levelatlas.pack傳入textureAtlas物件內,這樣做我們可以在程式的任何位置呼叫Assets.setLevel();方法,再用Assets.textureAtlas物件。

用AssetManager類別重寫Game Level Selection Screen

以下詳細介紹用AssetManager類別重寫Game Level Selection Screen的每一個類別程式:

Assets Resources

LibGDX-Advanced Level Screen using AssetManager
  1. 建立文件夾fonts,把carterone.fnt和carterone.png傳入assets/fonts/內。

  2. 把levelAtlas.pack,levelAtlas.png,mainmenu.json,mainmenu.pack,mainmenu.png,mainmenu2.png和splashscreen.png傳入assets/內。

  3. 在MyDemo30-core/src/com.hkprogram.mydemo30/內建立所有.java程式檔案。

DesktopLauncher.java

LibGDX-Advanced Level Screen using AssetManager
  1. DesktopLauncher是PC Desktop的Starter Class,我們在DesktopLauncher內設定顯示的大小為500x700px。

Assets.java

以下是Assets.java程式:

LibGDX-Advanced Level Screen using AssetManager
  1. 建立一個類別方法(static loadLevel())方法,這樣做我們就可以在程式的任何位置呼叫Assets.loadLevel();方法,這方法內就包含了AssetManager類別的load()方法,它把levelatlas.pack加載。

    load()方法就是用來加載levelatlas.pack 。

  2. 再建立一個類別方法((static setLevel()),它把levelatlas.pack傳入textureAtlas物件內,這樣做我們可以在程式的任何位置呼叫Assets.setLevel();方法,再用Assets.textureAtlas物件。

MyDemo30.java

以下是MyDemo30.java程式:

LibGDX-Advanced Level Screen using AssetManager
  1. 在MyDemo30.java內把MyDemo30 extends Game。

    除了呼叫Assets.load()方法外,再Assets.loadLevel()方法,別忘記呼叫Assets.manager.finishLoading()方法。

SplashScreen.java

我在第17節 - LibGDX: Splash Screen介紹過Splash Screen的製作,Splash Screen跳到Game Menu Screen,再按不同按鈕跳到不同的畫面,這裡不再詳細介紹。

LibGDX-Advanced Level Screen using AssetManager
  1. 我們運用Assets.update()方法回傳一個boolean值(true or false),如果值是false,則是加載Assets尚未完成,我們可以爭取時間,執行Assets.setMenuSkin();設定menuSkin。

  2. 再執行Assets.setLevel();設定textureAtlas物件。

MainScreen.java

我在第26節 - LibGDX: Advanced Game Menu Screen (using AssetManager)介紹過MainScreen.java,內容完全一樣,這裡不再詳細介紹。

LibGDX-Advanced Level Screen using AssetManager

AbstractScreen.java

我在第26節 - LibGDX: Advanced Game Menu Screen (using AssetManager)介紹過AbstractScreen.java,內容完全一樣,這裡不再詳細介紹。

LibGDX-Advanced Level Screen using AssetManager

LevelStatus.java

以下是LevelStatus.java程式:

LibGDX-Advanced Level Screen using AssetManager
  1. 建立一個新檔案,檔案名是MyDemo30prefs,再建立一個Preferences物件(prefs)。

  2. 建立一個public static put()方法,這樣做我們就可以在程式的任何地方呼叫LevelStatus.put()。

    當檔案MyDemo29prefs建立後,我們就可以用putInteger()方法儲存資料。
    levelclear=9代表level 1至9過了關,level 10未過關。
    level1=1表level1是1粒星
    level2=2代表level2是2粒星
    level3=3代表level3是3粒星
    level4=1代表level4是1粒星
    level5=2代表level5是2粒星
    level6=3代表level6是3粒星
    level7=1代表level7是1粒星
    level8=2代表level8是2粒星
    level9=3代表level9是3粒星
    level10=1代表level10是1粒星

    注意,因為level10未過關,所以以上level10的星星數目沒有特別用途。 最後別忙記用prefs.flush()方法,把資料真正儲存到MyDemo30prefs上。

  3. 建立一個public static get()方法,這樣做我們就可以在程式的任何地方呼叫LevelStatus.get()。

    如要讀取資料,我們就可以用getInteger()方法讀取資料,並把資料儲存在level[0]至level[9] Array內。
    level[0]=1粒星
    level[1]=2粒星
    level[2]=3粒星
    level[3]=1粒星
    level[4]=2粒星
    level[5]=3粒星
    level[6]=1粒星
    level[7]=2粒星
    level[8]=3粒星
    level[9]=1粒星

    注意,在getString(level1,0)方法內的"0"代表如果找不到MyDemo30prefs檔案,就把指定的數字"0"儲存到level1上。

LevelScreen.java

以下是LevelScreen.java程式,把LevelScreen類別繼承AbstractScreen抽象類別:

LibGDX-Advanced Level Screen using AssetManager
  1. 在於show()方法內呼叫super.show()方法,這樣做就可以呼叫父類別(AbstractScreen.java)的show()方法:

    i) 建立Button物件(backButton),把getSkin()和backbutton圖片傳入。
    ii) 設定它們的位置和用介面元件的addListener()方法監聽"Click"事件。
    iii) 用setInputProcessor()方法把stage傳入,再設定touch和key input事件。

  2. 把LevelScreen.java內的textureAtlas刪除,因為我們會在Assets.java內用AssetManager類別把levelatlas.pack加載。

  3. 把textureAtlas.getRegions()方法轉為Assets.textureAtlas.getRegions()方法,因為我們會在Assets.java內設定了Assets.textureAtlas物件。

  4. 用Stage類別的addActor()方法把backButton加入舞台上。

  5. 加入stage.act()方法和stage.draw()方法:

    1-stage.act();-更新所有Actor(則是backButton)。
    2-stage.draw();-把所有Actor顯示在屏幕上(則是backButton)。

  6. 刪除textureAtlas.dispose()方法,因為我們會在Assets.java內用AssetManager類別把levelatlas.pack加載。

  7. 因為我們加入了stage.act()方法和stage.draw()方法,最後別忘記把在dispose()方法內輸入stage.dispose();。

OptionsScreen.java

我在第26節 - LibGDX: Advanced Game Menu Screen (using AssetManager)介紹過OptionsScreen.java,內容完全一樣,這裡不再詳細介紹。

LibGDX-Advanced Level Screen using AssetManager

CreditsScreen.java

我在第26節 - LibGDX: Advanced Game Menu Screen (using AssetManager)介紹過CreditsScreen.java,內容完全一樣,這裡不再詳細介紹。

LibGDX-Advanced Level Screen using AssetManager

FacebookScreen.java

我在第26節 - LibGDX: Advanced Game Menu Screen (using AssetManager)介紹過FacebookScreen.java,內容完全一樣,這裡不再詳細介紹。

LibGDX-Advanced Level Screen using AssetManager

執行結果:

以下是LibGDX - Advanced Game Level Selection Screen (using AssetManager)程式執行的結果:



Download above code and sample pictures here!