数组消失了?

时间:2016-03-24 17:36:56

标签: java arrays eclipse 2d-games

我知道标题看起来有些奇怪,但这是我描述问题的唯一方法。

项目正在创建一个简单的益智游戏,你必须将瓷砖移动到位置以形成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

如果您需要其他任何内容或需要澄清,请告诉我们。

非常感谢!

1 个答案:

答案 0 :(得分:1)

您没有初始化MazeImage类型的img对象。可能在构造函数中执行此操作...

img = new MazeImage(); // Or whatever constructor you need here.

另外,如果你的左右类非常相似,你可以简单地使用一个基本的Tile类,并将其子类化为创建两个微妙不同的类。