【发布时间】:2013-01-23 20:42:00
【问题描述】:
我在使用等距墙时遇到了一些问题。
我正在使用从后到前的渲染方法绘制等距地砖,效果很好。我还保持我的地砖在一个漂亮的网格中正确排列。代码(这似乎是等距平面图的标准)如下:
for(int x = 0; x < 6; x++){
for(int y = 3; y >=0 ; y--){
int xCo = (y+x)*(tileWidth/2);
int yCo = (x-y)*(tileHeight/2);
tile.draw(g, xCo, yCo);
}
}
这是一个不错的小地板:
网格是由这个图块构成的:
不幸的是,当我对墙壁使用相同的逻辑时,一切都变得一团糟。
for(int x = 0; x < 6; x++){
for(int y = 3; y >= 0 ; y--){
int xCo = (y+x)*(wallWidth()/2);
int yCo = (x-y)*(wallHeight()/2);
walls.draw(g, xCo, yCo);
}
}
我将它用作我的墙砖:
(它是来自 google 图片搜索的占位符,但应该可以正常工作)
这是我得到的结果:
我的墙壁的渲染顺序显然是正确的,较近的墙壁在较远的墙壁上渲染,这正是我想要的,但定位也非常不正确,我不知道应该如何更正没有使用像素值。
作为参考,我确实使用硬编码的像素值进行了试验,因为我发现从一堵墙的右角到另一堵墙的右角,变化正好是 (200, -100) 像素。当我为此创建渲染循环帐户时
int xCo = (x+y)*200;
int yCo = (y-x)*-100;
它工作得很好,但这不是一个可行的解决方案,因为它不允许任何多功能性。
所以,寻找有关如何使我的等距墙对齐的建议。我做错了什么?
谢谢!
【问题讨论】:
-
感谢您让我的照片可见。我也在 gamedev.stackexchange 上发过帖子,他们对链接和图片有超级限制,所以我没有在这里尝试。
-
我注意到你的墙有一个模式:第一面墙的前顶部水平边缘与第三面墙的前底部水平边缘共线。此外,第一壁的右前垂直边缘与第三壁的左后垂直边缘共线。第二层和第四层墙也是如此。所以他们有点排队。只是没有按照你想要的方式。
-
哈哈是的,确实如此。我会在这个事实中得到一些安慰,但除了“我的方法只有一半错误”之外,我不知道该怎么做
-
地砖边缘在图像的中点相交。墙边没有。我推荐 xCo = (x+y)*(wallWidth()*9/10) 和 yCo = (y-x)*(wallHeight()/3)。
-
我想看看你们对
wallWidth()和wallHeight()的实现。 wallWidth 是否等于墙砖的宽度?还是只是正面的宽度,不包括左边的黑色边框?同样,wallHeight 是图像的高度,还是右下角和右上角之间的距离,还是别的什么?