【问题标题】:Converting Coordinates To Block Position In Array将坐标转换为数组中的块位置
【发布时间】:2014-09-22 15:44:06
【问题描述】:

所以我有一个等距地图(但它也可以是一个 2D 地图)和一个 int[] 数组来存储该地图上的所有块 ID。

数组看起来像这样(对于 4 x 4 块地图):

0 0 1 0 0 2 0 1 0 2 1 0 1 0 3 2

这将在地图上翻译成这个(第一个正方形):

0 0 1 0    0 0 1 0
0 2 0 1    0 2 X 1
0 2 1 0    0 2 1 0
1 0 3 2    1 0 3 2

第二个方格上有一个 X。

如何计算 X 在数组中的位置?我试着做基本的乘法:index = fieldWidth + fieldHeight,但我不能让它工作。

另外,我如何使用它在数组中的位置来计算 X 的坐标?

这可能对任何制作 2D/等距游戏的人有用。

【问题讨论】:

    标签: javascript arrays math formula array-formulas


    【解决方案1】:

    当位置从零开始时(= 以 0 开头):

    index = horizontalPos + verticalPos * 4
    

    如果从 1 开始使用:

    index = horizontalPos - 1 + (verticalPos - 1) * 4
    

    获取线性数组中索引为 i 的 X 从零开始的位置:

    verticalPos = parseInt(i / 4); horizontalPos = i % 4;
    

    编辑:

    为了使其普遍可用,将 4 替换为地图的列数

    【讨论】:

    • 假设现在的字段是 5 x 4,知道这些 4 中哪个是verticalPos 和horizo​​ntalPos 吗?
    • 这里使用的所有数字都是height,意思是:number of rows你有。查看我的编辑。
    • @Shark 抱歉,英语不是我的母语,我把rowscolumns 搞混了。请看我的编辑现在是正确的。
    • @Martin_Ernst 顺便问一下i 是什么?
    • @Shark i 是线性数组中元素的索引。您示例中的 X 具有 i == 6。这样您就可以计算它在等轴测图中的位置。 parseInt(6/4) == 1 --> row 1, 6 % 4 == 2 --> column 2.
    猜你喜欢
    • 1970-01-01
    • 2014-07-21
    • 2012-08-19
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多