我知道标题看起来有些奇怪,但这是我描述问题的唯一方法。
项目正在创建一个简单的益智游戏,你必须将瓷砖移动到位置以形成4(平铺)x 4(平铺)图像。
它有几个类,但有问题的是Tile Grid类。我的思考过程是: 我将为Tiles创建两个类,一个用于Left,一个用于Right
(我之所以选择2,因为我遇到了一个问题,只有一个问题,即在对阵列进行洗牌之后,主窗口会在磁贴位置显示重复的图像,即使阵列本身没有重复但是我认为这是因为我正在制作2个TileGrid类,从而制作2个大小为16的图标数组都包含所有图像,而不是只从其中一个数组中获取图标,而是从两者中获取它们。 另外,2个单独的类可以减少正在进行的匿名类的数量。)
这些类将有两个Tile类数组,一个用于操作,另一个是用于重置的主数据。
然后我遍历那些数组,将Tile图标设置为MazeImage类中相应数组中的Icon
MazeImage类获取一个图像,将其分成16个部分,并将这些部分添加到图像数组和非抽动数组中。 图像数组是可解组数组用于解决方法机制的可操作数组
一旦图像被分割成16并存储,MazeImage类就会运行setShuffledMaster()和setShuffledProxy() setShuffledMaster()将images []复制到master []然后将主数组洗牌,然后通过System.copyarray将主数组分成2,并将第1-8部分存储到masterL []和8-16存入masterR []
setShuffledProxy()然后将master []数组分成两个,并将一半存储到imagesL []和imagesR []中,这些是将用于操作的数组
然后我有一堆getMethods()返回数组,但似乎这些get方法不起作用或正在工作但是半/半数组被重置为null
确切的错误是空指针异常,发生在: masterL [I] .setIcon(img.getMasterL(I)); 在TGridL类中,也是TGridR类中的同一行
这可能是我可能需要解决的最终问题之一,但是它只是杀了我,因为我无法看到/为什么会发生任何帮助才能真正节省成本。
如果有人对如何改善这方面的任何想法,请告诉我。现在这类似于粗略的草案,所以事情并不像它们那样漂亮。
以下是代码:
for(int i = 0; i<masterL.length; i++)
{
masterL[i] = new Tile(){
public Dimension getPreferredSize() {
return new Dimension(80, 80);
//Sets Dimensions
};
};
masterL[i].setIcon(img.getMasterL(i));
masterL[i].setIdentifier("Tile_" + (i + 1));
//---------------------------------------------
}
TGridR完全一样简单地将所有'L'替换为'R'所以我不会发布它但是如果你需要它请告诉我。
public void setShuffledMaster() //Master Tiles Left
{
List<Image> temp;
//Temp list for shuffle
Image[] shuffled = new Image[16];
//array for shuffled images
shuffled = images;
//Set equal to initial right after crop from editImage();
temp = Arrays.asList(shuffled);
//Set temp list equal to init order
Collections.shuffle(temp);
//Shuffle
shuffled = (Image[]) temp.toArray();
master = shuffled;
//Change List to Array to be able to loop over it
System.arraycopy(shuffled, 0, masterL, 0, masterL.length);
System.arraycopy(shuffled, masterL.length, masterR, 0, masterR.length);
//Split array into two parts
public ImageIcon getMasterL(int i) //Get Master Left
{
img = new ImageIcon(masterL[i]);
return img;
}
所以Gist是getMasterL实际上没有工作,因为很明显masterL数组是空的但是当我打印出MazeImage类创建的所有数组的内容时,没有一个是null
如果您需要其他任何内容或需要澄清,请告诉我们。
非常感谢!
答案 0 :(得分:1)
您没有初始化MazeImage类型的img对象。可能在构造函数中执行此操作...
img = new MazeImage(); // Or whatever constructor you need here.
另外,如果你的左右类非常相似,你可以简单地使用一个基本的Tile类,并将其子类化为创建两个微妙不同的类。