我用Java编写了2D等距引擎的开头。我已经掌握了大部分基础知识,例如平铺顺序和地图上的对象深度排序。但是,我遇到了一个问题,如果不让我的方法变得非常混乱,我似乎无法解决这个问题。
问题是,在我的等距世界中,当在屏幕上呈现对象库所在的图块时,每个对象都会被渲染。但是,有些物体的高度很高(例如建筑物),它可以从非渲染的屏幕外区域延伸到渲染的屏幕区域,我无法检测到这一点,因为我的引擎到目前为止依赖于对象基础。目前呈现图像。
我的问题是,如何在渲染区域中检测到具有较大高度值的对象,而其基础位于屏幕外区域?我真的不想只是渲染整个地图(包括屏幕外区域),因为这是非常耗费CPU的,所以我正在寻找一种算法或方法,让我能够检测到这个有问题的区域。
编辑:更新了问题以直观地表示下面的问题。
答案 0 :(得分:2)
你可以修改你的'tile'的概念,包括像'envelope'这样的东西......一个划定最大高度和宽度的矩形?例如当“大高度”对象被创建/分配给图块时,您可以增加其包络的高度。 然后,您只需渲染信封与屏幕重叠的图块。
答案 1 :(得分:0)
我的对象上有一个方法“boolean isVisible(Rectangle2D bounds)”。在排序对象之前和在重新排序已排序的对象之前调用此方法。