0

我正在通过 xml 加载我的游戏关卡。

我有一个循环来测试“名称”并相应地添加精灵。

我有一张地图,其瓷砖的宽度和高度为 80×80。地图的行和列是 6x10。

我正在尝试找到一种方法来跟踪级别加载器在加载图块时所在的行和列,因为我想用坐标做特定的事情。

我曾考虑过为此使用二维数组,但我不确定在这种情况下我将如何去做。

谁能帮我解决这个问题?

编辑:

这是我尝试过的。

创建行列数组

 int row[] = new int[6];
 int col[] = new int[10];

现在这是我卡住的地方,我不确定如何告诉代码何时切换和使用不同的行。例如..

if (name.equals(TAG_ENTITY_ATTRIBUTE_TYPE_unwalkable)) {
    tile = new Tile(x, y, this.tUnwalkable_tile,
            activity.getVertexBufferObjectManager());
    tileList.add(tile);
    tile.setTag(1);

    /*
     * Body groundBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld,
     * tile, BodyType.StaticBody, wallFixtureDef);
     */
    gameScene.getChildByIndex(SECOND_LAYER).attachChild(tile);
    Log.e("Tile", "Unwalkable_Tile");
    return;
} else if (name.equals(TAG_ENTITY_ATTRIBUTE_TYPE_Blue_Tile)) {
    tile = new Tile(x, y, this.blue,
            activity.getVertexBufferObjectManager());
    tile.setTag(0);
    this.tileList.add(tile);
    gameScene.getChildByIndex(SECOND_LAYER).attachChild(tile);
    return;

} else if (name.equals(TAG_ENTITY_ATTRIBUTE_TYPE_Red_Tile)) {
    tile = new Tile(x, y, this.red, activity.getVertexBufferObjectManager());
    tileList.add(tile);
    tile.setTag(0);
    gameScene.getChildByIndex(SECOND_LAYER).attachChild(tile);
    return;
} else if (name.equals(TAG_ENTITY_ATTRIBUTE_TYPE_Pink_Tile)) {
    tile = new Tile(x, y, this.pink,
            activity.getVertexBufferObjectManager());
    tileList.add(tile);
    tile.setTag(0);
    gameScene.getChildByIndex(SECOND_LAYER).attachChild(tile);
    return;
} else if (name.equals(TAG_ENTITY_ATTRIBUTE_TYPE_Yello_Tile)) {
    tile = new Tile(x, y, this.yellow,
            activity.getVertexBufferObjectManager());
    tileList.add(tile);
    tile.setTag(0);
    gameScene.getChildByIndex(SECOND_LAYER).attachChild(tile);
    return;

    }

我如何告诉它保持 row[1] 直到到达 col[10] ?

然后切换到 row[2] 并留在那里直到 col[10] 再次到达?

4

1 回答 1

0

从设计的角度来看,您的关卡加载器应该只是加载关卡。无论您想在此之上进行什么魔法转换,都可以并且很可能应该单独处理。

所以只要让你的关卡加载器创建一个二维数组......无论它正在阅读什么。您正在阅读一组扁平的瓷砖元素吗?然后计算读取的元素数。在任何给定点,您的偏移量是:

 x = count % 10;
 y = count / 6; 

如果您在封装元素中包含每一行,请计算行数和列数。同样的想法。

现在你有一个二维数组(或封装它的一些对象)。你可以对它进行任何你想要的转换。如果您希望在屏幕空间方面做到这一点,请将每个计数乘以 80。

编辑:从上面的编辑中,您似乎正在声明单独的行和列数组,您可能不想这样做。更合乎逻辑的是:

int[][] tiles = new int[6][];
for (int i = 0; i < 6; i++) {
  tiles[i] = new int[10];  
}

然后,在您的加载程序中,在某处(一次)定义一个计数器。

int counter = 0;

您将在以下情况下切换行:

counter > 0 && (counter++) % 10 == 0 

但是对于二维数组,你真的可以把它想象成有坐标,就像我上面提到的:

 x = counter % 10;
 y = counter / 6; 

最后,你有一个tiles[][] 变量来保存所有的tile 数据。所以你可以说:

tiles[x][y] = <whatever data you need to store>

完成后记得增加计数器。

于 2013-01-05T22:36:36.870 回答