2016-01-01 44 views
2

我對Java編程相當陌生,而且我在創建這些對象的過程中遇到了一些障礙。對象陣列邏輯問題

這裏的代碼示例:

public static Sprite backwardNullHelm   = new Sprite(16, 0, 0, SpriteSheet.armor); 
public static Sprite backwardNullHelm_1   = new Sprite(16, 1, 0, SpriteSheet.armor); 
public static Sprite backwardNullHelm_2   = new Sprite(16, 2, 0, SpriteSheet.armor); 
public static Sprite forwardNullHelm   = new Sprite(16, 0, 1, SpriteSheet.armor); 
public static Sprite forwardNullHelm_1   = new Sprite(16, 1, 1, SpriteSheet.armor); 
public static Sprite forwardNullHelm_2   = new Sprite(16, 2, 1, SpriteSheet.armor); 
public static Sprite rightNullHelm    = new Sprite(16, 0, 2, SpriteSheet.armor); 
public static Sprite rightNullHelm_1   = new Sprite(16, 1, 2, SpriteSheet.armor); 
public static Sprite rightNullHelm_2   = new Sprite(16, 2, 2, SpriteSheet.armor); 
public static Sprite leftNullHelm    = new Sprite(16, 0, 3, SpriteSheet.armor); 
public static Sprite leftNullHelm_1    = new Sprite(16, 1, 3, SpriteSheet.armor); 
public static Sprite leftNullHelm_2    = new Sprite(16, 2, 3, SpriteSheet.armor); 

這是我如何申報之中人物的頭飾精靈。 下面是如果必要的構造:

public Sprite(int size, int x, int y, SpriteSheet sheet) 

我將它們存儲在陣列是這樣的:

backwardHelmet[0] = Sprite.backwardNullHelm; 
backwardHelmet[1] = Sprite.backwardNullHelm_1; 
backwardHelmet[2] = Sprite.backwardNullHelm_2; 
forwardHelmet[0] = Sprite.forwardNullHelm; 
forwardHelmet[1] = Sprite.forwardNullHelm_1; 
forwardHelmet[2] = Sprite.forwardNullHelm_2; 
rightHelmet[0] = Sprite.rightNullHelm; 
rightHelmet[1] = Sprite.rightNullHelm_1; 
rightHelmet[2] = Sprite.rightNullHelm_2; 
leftHelmet[0]  = Sprite.leftNullHelm; 
leftHelmet[1]  = Sprite.leftNullHelm_1; 
leftHelmet[2]  = Sprite.leftNullHelm_2; 

的方向是指角色正面(頂向下的角度)和數字哪個方向(在對象名稱中)是指動畫狀態。 對我來說,是否有能力「標記」對象(即以某種方式附加一個數字),以便我可以使用循環將它們放入數組中?

+0

查看字符串鍵/精靈值對的映射。 – duffymo

+3

爲什麼你不能有一個'Sprite'對象持有4個不同的方向?然後,您可以獲取每個方向的方法,或者將方向作爲參數的單個get方法。 –

回答

3

你是指這樣的循環嗎?

for (int i=0; i<3; i++){ 
    backwardHelmet[i] = new Sprite(16, i, 0, SpriteSheet.armor); 
    forwardHelmet[i] = new Sprite(16, i, 1, SpriteSheet.armor); 
    rightHelmet[i] = new Sprite(16, i, 2, SpriteSheet.armor); 
    leftHelmet[i] = new Sprite(16, i, 3, SpriteSheet.armor); 
} 

你甚至可以指定方向整數像backward=0, forward=1, right=2, left=3,有一個多維數組和雙爲週期:

for (int i=0; i<3; i++){ 
    for (int j=0; j<4; j++){ 
     helmet[i][j] = new Sprite(16, i, j, SpriteSheet.armor); 
    } 
} 
+0

啊!是的,謝謝!我甚至沒有想過使用座標作爲標識符(雖然現在看起來很明顯)。多維數組也很有趣(我不知道!)。 – Caleb

+0

對於任何可能引用此問題的人來說,解決方案中存在一個小錯誤:變量「j」的for循環中的「i ++」需要爲「j ++」。 – Caleb

+0

糟糕!固定。 :) –

0

雖然@ AndreaDusza的答案可能會滿足您的需求更好,如果有所有的對象在一個陣列是不是一個因素在於,你可以做這樣的:

Sprite[] sprites = new Sprite[12]; 

for(int i = 0 ; i!=12 ; i++) 
{ 
    sprites[i] = new Sprite(16, i%3, i/3, SpriteSheet.armor); 
} 

這樣:

  • 0,1,2位置向後
  • 3,4,5位是前鋒
  • 6,7,8的位置是正確的
  • 9,10,11位置是左