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

第27節 - Java: Array, Arrays, List, ArrayList & LibGDX: Array

這一節我會介紹Java的Array(陣列), Arrays, List, ArrayList和LibGDX的Array,它們看起來十分相似,但其實各有不同,我會在這節詳細介紹。

為甚麼要學Array?

首先Array不只是Java程式語言獨有的類別,所有程式語言(物件導向或非物件導向)都會用到Array。

另外因為我們將會在第29節 - LibGDX: Game Level Selection Screen運用LibGDX的Array來存取圖片,所以我們必須明白Array的用法。

以下收錄了Java Array, Arrays, List, ArrayList和LibGDX Array的主要用法,我會詳細解釋:

Java:Array,Arrays,List,ArrayList & LibGDX:Array

Java Array的種類

首先Array分為1D, 2D, 3D, 4D, 5D...到無限個D(nD),雖然Java程式語言沒有限制維數(Dimenions),但是Java的VM(Virtual Machine)限制維數為255,所以Java Array分為1D, 2D, 3D...255D,除了以上的Array的種類,還有一種叫不規則Array。

  1. 1D: array[]
  2. 2D: array[][]
  3. 3D: array[][][]
  4. 4D....nD
  5. 不規則Array

Java-1D Array

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個1D Array a[],並初始化row=1,column=10,預設值為零。

  2. 如果沒有設定初始值,預設值為零。

  3. Array index(索引)由a[0]至a[9]。

  4. 我們可以用a.length物件變數來取得Array的元素數目為10。

  5. 因為沒有設定初始值,所以所有Array元素值都是零 (a[0]=0, a[1]=0,......a[9]=0)。

Java - 2D Array

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個2D Array a[][],並初始化row=3和column=4,預設值為零。

  2. 如果沒有設定初始值,預設值為零。

Java - 3D Array

Java:Array,Arrays,List,ArrayList & LibGDX:Array

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個3D Array a[][][],並初始化row=2,column=3,和page/plane=4,預設值為零。

  2. 如果沒有設定初始值,預設值為零。

Java - 規則Array和不規則Array

Java的Array也可以分為規則Array和不規則Array:

規則Array:

  1. 每一row的元素數目都是一樣。

不規則Array:

  1. 每一row的元素數目都不一樣。
  2. 子元素也是陣列,所以又稱「陣列中的陣列」。

以上所介紹的都是規則Array,則是每一行的元素數目都是一樣,例如int a[][]=new int[3][4]; 就代表有三行陣列,每行陣列就有四個元素:

  1. a[0] = new int[] {1,2,3,4};
  2. a[1] = new int[] {5,6,7,8 };
  3. a[2] = new int[] {9,10,11,12};

而不規則Array,每行陣列就可以有不同數目的的元素,例如:

  1. a[0] = new int[] {1,2,3,4,5};
  2. a[1] = new int[] {6,7,8,9};
  3. a[2] = new int[] {10,11};

第一row具有五個元素,第二row具有五個元素,而第三row就具有五個元素。

Java Collections Framework

Collection是集合,有是也稱為Container(容器),它是一個抽象設計方式,它可儲存、取用或操作資料,或把資料從一個地方傳遞到另一地方。而Sun公司再建立一個Java Collections Framework,它把Collection介面和其他介面統一起來。

Java JDK 1.6版的Java Collections Framework就包括以下圖片的不同介面,而其中Collection介面和Map介面就是主要的兩個繼承族譜。

我們只要明白小小關於Java Collections Framwork, Collection介面,List介面,ArrayList類別,Map介面和平Arrays的關係就足夠,如果將來要用到Java Collections Framwork來寫我們的LibGDX遊戲,我會再詳細介紹。

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. Collection介面下就繼承了List介面。

  2. ArrayList類別就實作了List介面。

  3. Arrays類別就繼承了Object類別。

1) Java Array例子1 - Create an Array

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個1D Array a[],並初始化row=1,column=10,預設值為零。

  2. 用for-loop由i=0到i=a.length,把Array a[]的十個元素列印出來,我們可以用a.length物件變數來取得Array的元素數目為10。

  3. 顯示結果,因為沒有設定初始值,預設值為零。

2) Java Array例子2 - initialize an Array

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個1D Array a[],並初始化row=1,column=10,把1至10儲存在a[]上。

  2. 用for-loop由i=0到i=a.length,把Array a[]的十個元素列印出來,我們可以用a.length物件變數來取得Array的元素數目為10。

  3. 顯示結果。

3) Java Array例子3 - initialize an Array without "new"

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個1D Array a[],但new可以忽略,並初始化row=1,column=10,把1至10儲存在a[]上。

  2. 用for-loop由i=0到i=a.length,把Array a[]的十個元素列印出來,我們可以用a.length物件變數來取得Array的元素數目為10。

  3. 顯示結果。

4) Java Array例子4 - for-loop Statement

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個1D Array a[],但new可以忽略,並初始化row=1,column=10,把1至10儲存在a[]上。

  2. 這次用另一個for-loop,for(int arrayA: a),建立一個int Array變數(arrayA),它把a[]的所有元素列印出來。

  3. 顯示結果。

5) Java Arrays例子1 - Arrays.sort()類別方法

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個1D Array a[],但new可以忽略,並初始化row=1,column=10,把1至10儲存在a[]上。

  2. 用for-loop,for(int arrayA: a),把a[]的所有元素列印出來。

  3. 用Arrays.sort()方法,把Array的元素排序,最後顯示結果。

6) Java Arrays例子2 - Arrays.fill()類別方法

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個1D Array a[],但new可以忽略,並初始化row=1,column=10,把1至10儲存在a[]上。

  2. 用for-loop,for(int arrayA: a),把a[]的所有元素列印出來。

  3. 用Arrays.fill()方法,把Array的元素儲存為"5",最後顯示結果。

7) Java Arrays例子3 - Arrays.toSpring()類別方法

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個1D Array a[],但new可以忽略,並初始化row=1,column=10,把1至10儲存在a[]上。

  2. 用for-loop,for(int arrayA: a),把a[]的所有元素列印出來。

  3. 用Arrays.toString()方法,把Array的元素儲存為字串stringA,最後顯示結果。

8) Java Arrays例子4 - Arrays.add(), Arrays.size()和Arrays.get()類別方法

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個Integer類別的ArrayList物件(arrayAs)。
    注意,int是否Java的primitive type,而Integer是Java的類別,所以我們可以利用ArrayList類別產生一個帶有Integer類別元素的物件arrayAs。

  2. 用ArrayList的add()方法,加入5個元素(1至5)。

  3. 用Arrays.size()方法,顯示arrayAs的元素數目。

  4. 用for-loop,for(int i=0; i<arrayAs.size(); i++),再用arrayAs.get()方法把arrayAs的所有元素儲存到value變數上,最後顯示結果。

9) Java ArrayList例子1 - indexOf()和LastIndexOf()物件方法

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個Integer類別的ArrayList物件(arrayAs)。
    注意,int是否Java的primitive type,而Integer是Java的類別,所以我們可以利用ArrayList類別產生一個帶有Integer類別元素的物件arrayAs。

  2. 用ArrayList的add()方法,加入9個元素(1,1,2,3,3,4,3,5,2)。

  3. 用indexOf(2)方法,顯示第一次出現"2"的元素。
    注意,indexOf(2)是第3個元素,不是第2個元素,因為由"0"開始計算(0,1,2)。

    用lastIndexOf()方法,顯示最後一次出現包括"3"的元素。

  4. 最後顯示結果。

10) Java ArrayList例子2 - clear()和isEmpty()物件方法

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個Integer類別的ArrayList物件(arrayAs)。
    注意,int是否Java的primitive type,而Integer是Java的類別,所以我們可以利用ArrayList類別產生一個帶有Integer類別元素的物件arrayAs。

  2. 用ArrayList的add()方法,加入1個元素"1",再用ArrayList的isEmpty()方法回傳一個人boolean值,因為我們加入了1個元素"1",所以isEmpty()回傳的值是否false。

  3. 用ArrayList的clear()方法,清除ArrayList物件(arrayAs),所以isEmpty()回傳的值是否true,
    最後顯示結果。

11) Java ArrayList例子3 - toArray()物件方法

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 建立一個Integer類別的ArrayList物件(arrayAs)。
    注意,int是否Java的primitive type,而Integer是Java的類別,所以我們可以利用ArrayList類別產生一個帶有Integer類別元素的物件arrayAs。

  2. 用ArrayList的add()方法,加入9個元素(1,2,3,4,5)。

  3. 用ArrayList的toArray()方法,把ArrayAs的元素複製到ArrayBs,最後顯示結果。

12) Java ArrayList例子4 - Create an ArrayList Object

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. ArrayList其中一種好處就是除了可以傳入預設的primitive type變數,還可以傳入一個自定的類別(例子:Programmer類別)。

  2. 用ArrayList的add()方法,加入value=1, name="Peter"和value=2, name="Mary"。

  3. 用for-loop,for(Programmer p: arrayAs),把arrayAS的所有元素列印出來。
    注意,System.out.println(p) = System.out.println(p.toString()),因為System.out.println()方法預設用 toString()方法顯示結果。

13) LibGDX Array例子1 - Texture類別

我在第12節 - LibGDX: Texture, TextureRegion, SpriteBatch & Sprite介紹過Texture和TextureRegion的分別。

以下例子用第18節 - LibGDX: Texture Packer制作一個numbers.pack和numbers.png檔案,如下圖:

Java:Array,Arrays,List,ArrayList & LibGDX:Array

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 把一張levelscreen.png圖片傳入assets/內。

  2. 用Texture產生一個Texture物件(texture)然後把圖片(levelscreen.png)傳入

  3. 在Render()內運用batch.begin(),batch.draw()和batch.end()來繪製texture物件顯示在屏幕上。

    要把Texture圖片移位,我們可以用batch.draw()的簡單版,第2和第3個參數就是用來設定Texture左下角在World Coordinate的位置(x,y)。因為我們的levelscreen.png是500X700px,所以只要把texture左移"500/2" px,下移"700/2"px(i.e. -500/2,-700/2)就可以完成圖片至中的效果。

程式執行結果如下(這例子的程式碼和圖片可以在本節尾部下載):

Java:Array,Arrays,List,ArrayList & LibGDX:Array

14) LibGDX Array例子2- TextureRegion類別

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 用Texture產生一個Texture物件(texture)然後把圖片(levelscreen.png)傳入。

  2. 用TextureRegion產生一個TextureRegion物件(textureRegion)然後把texture物件傳入,再設定區域位置和大小。

  3. 在Render()內運用batch.begin(),batch.draw()和batch.end()來繪製texture物件顯示在屏幕上。

程式執行結果如下(這例子的程式碼和圖片可以在本節尾部下載):

Java:Array,Arrays,List,ArrayList & LibGDX:Array

15) LibGDX Array例子3 - TextureAtlas類別和findRegion()方法

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 用TextureAtlas類別產生一個TextureAtlas物件(atlas)然後把圖片(numbers.pack)傳入。

  2. 用TextureRegion的findRegion()方法把 "picture1", "picture2", "picture3", "picture4" 和"picture5"傳入TextureRegion物件。

    注意,findRegion()方法是TextureRegion類別的方法,因為TextureAtlas類別是繼承int是TextureRegion類別,所以也可以用findRegion()方法。
  3. 在Render()內運用batch.begin(),batch.draw()和batch.end()來繪製textureRegion物件顯示在屏幕上。

程式執行結果如下(這例子的程式碼和圖片可以在本節尾部下載):

Java:Array,Arrays,List,ArrayList & LibGDX:Array

16) LibGDX Array例子4 - TextureAtlas類別,findRegion()方法和TextureRegion[] Array

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 用TextureAtlas類別產生一個TextureAtlas物件(atlas)然後把圖片(numbers.pack)傳入。

  2. 用TextureRegion的findRegion()方法把 "picture1", "picture2", "picture3", "picture4" 和"picture5"傳入傳入TextureRegion Array。

    注意,findRegion()方法是TextureRegion類別的方法,因為TextureAtlas類別是繼承int是TextureRegion類別,所以也可以用findRegion()方法。
  3. 在Render()內運用batch.begin(),batch.draw()和batch.end()來繪製textureRegion Array顯示在屏幕上。

程式執行結果如下(這例子的程式碼和圖片可以在本節尾部下載):

Java:Array,Arrays,List,ArrayList & LibGDX:Array

17) LibGDX Array例子5 - Create an Array 物件和getRegions()方法

Java:Array,Arrays,List,ArrayList & LibGDX:Array
  1. 用TextureAtlas類別產生一個TextureAtlas物件(atlas)然後把圖片(numbers.pack)傳入。

  2. 建立一個AtlasRegion類別的Array物件(atlasArrays), 用TextureAtlas類別的getRegions()方法把 "picture1", "picture2", "picture3", "picture4" 和"picture5"傳入atlasArrays。
  3. 用Array的get()方法把 "picture1", "picture2", "picture3", "picture4" 和"picture5"傳入傳入TextureRegion Array。

  4. 在Render()內運用batch.begin(),batch.draw()和batch.end()來繪製textureRegion Array顯示在屏幕上。

程式執行結果如下(這例子的程式碼和圖片可以在本節尾部下載):

Java:Array,Arrays,List,ArrayList & LibGDX:Array

Download above code and sample pictures here!