对象数组逻辑问题

时间:2016-01-01 21:18:49

标签: java arrays

我对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;

方向指的是角色面向的方向(自上而下的透视图),数字(在对象名称中)指的是动画状态。 无论如何我能够"标签"对象(即以某种方式附加一个数字)所以我可以使用循环将它们放入数组中?

2 个答案:

答案 0 :(得分: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);
  }
}

答案 1 :(得分: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个职位