【问题标题】:How to lookup screen-bounded tile indices in a rotated tilemap?如何在旋转的瓦片地图中查找屏幕边界瓦片索引?
【发布时间】:2013-04-15 12:54:39
【问题描述】:

通常,轴对齐(旋转 = 0)的瓷砖地图很容易遍历屏幕上的可见瓷砖。

但是当整个瓦片地图被旋转​​时,你如何“剔除”或过滤瓦片索引呢?

注意:这是为了改进 ActionScript 3.0(Genome2D)中的平铺渲染类,但其他计算机语言的答案也同样适用! :)

【问题讨论】:

  • 我不太确定您到底需要什么,因为“剔除”、“过滤”和“查找”是完全不同的东西。无论如何,矩阵似乎可以完成所有类型的工作,因为它会旋转和修改您的输入值 (x,y)。

标签: actionscript-3 rotation tile bounds culling


【解决方案1】:

我不是 100% 清楚您要对每个图块执行什么操作,因此我假设您想找到要渲染哪些图块和不渲染哪些图块。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#hitTestObject()

您可以尝试在屏幕上设置一个虚拟对象并执行以下操作:

For each tile in tilemap
    if (dummyScreenObj.hitTestObject(tile))
        tile.visible = true
    else
        tile.visible = false

【讨论】:

  • 我宁愿避免检查每个单独的瓷砖。我所追求的是一种为外部和内部for循环设置边界的方法(就像您通常用于轴对齐的定向瓦片图一样),但这也会在倾斜/缩放的瓦片上进行迭代。例如,它不会使用for(var c=columnStart; c<=columnEnd; c++)for(var r=rowStart; r<=rowEnd; r++),而是迭代for(var sc=slopedColumnStart; sc<=slopedColumnEnd; sc++)for(var sr=slopedRowStart; sr<=slopedRowEnd; sr++),但显然需要一些数学来计算平铺索引。这更有意义吗?
  • 我不太确定您的目标是否可以实现。对于您的示例,每一行都有不同的数字。这也将始终根据旋转而改变。例如,现在您有第 2 行,然后是 4、5、6、6、6、5。
  • 如果您不想单独检查实际的图块,您可以创建一个空 mc 的完整虚拟副本,映射到真实的图块并针对这些图块进行测试。
猜你喜欢
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
相关资源
最近更新 更多