【问题标题】:Isometric depth sorting等距深度排序
【发布时间】:2013-08-05 20:32:05
【问题描述】:

我已经开始使用 Java 编写 2D 等距引擎。我已经掌握了大部分基础知识,例如地图上的平铺顺序和对象深度排序。但是,我遇到了一个问题,如果不让我的方法变得非常混乱,我似乎无法解决。

问题在于,在我的等轴测世界中,每个对象都是在对象基础所在的图块呈现在屏幕上时呈现的。但是,某些对象具有很大的高度(例如建筑物),它可以从未渲染的屏幕外区域延伸到渲染的屏幕区域,并且我无法检测到这一点,因为我的引擎到目前为止依赖于对象基础呈现以呈现图像。

我的问题是,我如何检测一个具有大高度值的对象应该出现在渲染区域中,而它的基础位于屏幕外区域?我真的不想只渲染整个地图(包括屏幕外区域),因为这非常占用 CPU,所以我正在寻找一种算法或方法来检测这个有问题的区域。

编辑:更新问题以直观地表示以下问题。

【问题讨论】:

    标签: java algorithm isometric


    【解决方案1】:

    您能否修改您对“平铺”的概念,使其包含类似“信封”之类的东西……一个限定最大高度和宽度的矩形?例如当“大高度”对象被创建/分配给瓷砖时,您可以增加其信封的高度。 那么你只需要渲染那些信封与屏幕重叠的瓦片。

    【讨论】:

    • 那么这将涉及检查每个对象以确保其宽度或高度不会在每次渲染循环执行时与屏幕区域重叠,不是吗?
    • 它比渲染所有东西都便宜...而且需要像这样的计算来实现你想要的,不是吗?
    • 您可以提前进行计算,例如每当将某些东西添加到瓷砖/移动瓷砖时。但基本上你必须做这样的事情来找出哪些瓷砖会散布到屏幕上,我认为
    【解决方案2】:

    我会在我的对象“boolean isVisible(Rectangle2D bounds)”上有一个方法。在排序对象和渲染排序对象之前调用此方法。

    【讨论】:

    • 我的对象不是这样排序的,而是由渲染循环以正确的顺序绘制的,因此不需要深度排序方法,因此我无法在渲染对象之前设置它们的可见性。
    猜你喜欢
    • 2012-06-25
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多