2

我很擅长用 java 制作我的 2d 重制版 minecraft。我知道它可以做得很好,youtube 上的 orange451 启发了我尝试做这个。我从文本文件加载地图上的所有块,当游戏加载时,它将文本文件中的所有块添加到 ArrayList。我创建了一个算法来计算游戏中光标所在块的索引,并添加了一个 MouseListener,这样当我点击它时,它将用空气块替换块(基本上破坏块)。为了替换 ArrayList 中的块,我使用了 ArrayList set(index, obj) 方法。从理论上讲,它应该可以正常工作,并且在某种程度上确实可以。唯一的问题是它还在几个街区外的地图中创建了一个黑色空间。这非常令人沮丧,特别是因为我已经走了这么远。附加信息:我需要一种方法来替换 ArrayList 中的对象,或者更好的方法来做到这一点,因为我的碰撞检测方法也使用 ArrayList 来检测块的位置。请帮我!我不能发布图像,但它将块设置为空气纹理,但在它附近创建了一个黑色方块(arraylist mabey 中的一个间隙?)。由于要贴的代码太多,这里是整个项目的源代码: Blockworld 2D 源代码

4

1 回答 1

4

您正在为此苦苦挣扎,因为知道其坐标的对象的 ArrayList 是表示此 2d 结构的一种疯狂方式。它是无序的 - 您可以反转或随机排列您的 ArrayList 并且它会绘制相同的内容。它具有 O(N) 更新,因为您必须在 ArrayList 中搜索适当坐标的对象,然后才能替换它。它可以有多个具有相同坐标的对象。它可能处于可见坐标根本没有对应对象的状态——这就是你在这里遇到的情况。

请帮我

好的。从字节的二维数组(数组,不是 ArrayList)开始。它允许你 256 种块,并且允许你的玩家挖掘而不用你的new AirBlock(0, 0)疯狂不断分配内存。要绘制世界,请遍历可见坐标并将字节映射到 Bitmap 等。

另外:2d Minecraft 已经存在。它被称为泰拉瑞亚。

于 2012-02-17T09:56:07.420 回答