0

基本上,由于加载图块的问题,我无法在游戏中加载关卡。我想不通的是如何让程序将瓷砖的类型保存为字符串,例如“水”或“草”,然后从这些字符串中加载瓷砖。以下是瓷砖代码的示例:

Example = new TileType("Texture.png", Material.Mat, True, True, "Example");

第一个值是纹理位置,第二个是材质,第三个是瓦片是否可以被破坏,第四个是NPC是否可以越过瓦片,最后一个是瓦片保存的内容水平数据。

以下是游戏将瓷砖保存为的内容:

<tile x="0" y="0" type="Example" />

我想做的是制作一个方法来获取字符串并找到使用它的图块。谁能帮我这个?

4

4 回答 4

2

使用一个怎么样Map<String, TileType>

(根据要求发表评论作为答案。)

于 2012-07-30T04:53:29.603 回答
0

我会创建一个名为 Tile 的课程。

public class Tile
{
    private Material mMaterial;
    private boolean mCanBeDestroyed;
    private boolean mCanBeWalkedOn;
    private String mLevelSaveName;

    // getters and setters
}

然后有这样的东西来访问它们:

private HashMap<String, Tile> mTiles;
于 2012-07-30T04:57:33.977 回答
0

1.更好地使用Collection like Map

2.像这样考虑它...HashMap<String, TileType>

于 2012-07-30T04:53:42.350 回答
0

对于数字变量,您可以使用

String s = readIntFromFile(); //Read a number
try
{
    int x = Integer.parseInt(s); //Get an integer from the file
}
catch(NumberFormatException e)
{
    //if parseInt fails, we end up here
}

对于字符串,这里有一个想法:

static final String[] tileTypes = {"Example", "Example2"};
private static int findTileType(String type)
{
    for(int i = 0; i < tileTypes.length; i++)
    {
        if(type.equals(tileTypes[i])) return i;
    }
    return -1;
}

public TileType makeTile(String type)
{
    int t = findTileType(type);
    switch(t)
    {
        case 0: 
            return example;
        case 1: 
            return example2;
    }
    return null;
}

static final TileType example = new TileType(/*...*/);
static final TileType example2 = new TileType(/*...*/);

反正你懂这个意思。可能不是最好的解决方案,但它会起作用。

一年多后编辑:哎呀,忘了将 findTileType 设为静态。

于 2012-07-30T04:55:13.690 回答