java等轴测地图绘制,生成
我正在做一个等距游戏,我只设法创建了一个之字形等距地图。我最初的想法是钻石形状,但我无法做到这一点
钻石: 库伯德。net/img/tile钻石订单良好。巴布亚新几内亚
之字形: 库伯德。net/img/瓷砖之字形紧凑型。巴布亚新几内亚
下面是我的一段代码,向您展示正在发生的事情:
世界:
public void chunkGenerate() {
moduleX = ((ListManager.getTileWidth()*8));
moduleY = ((ListManager.getTileHeight()*8));
for (int x = 0; x <= width; x++) {
for (int y = 0; y <= height; y++) {
if ((x%moduleX) == 0) {
if ((y%moduleY) == 0) {
chunkList.add(new Chunk(x,y));
}
}
}
}
}
区块:
public void Generate() {
for (int x = 0; x < 8; x++) {
for (int y = 0;y< 8; y++) {
tileList.add(new Tile(location.getX()+(x*ListManager.getTileWidth()),location.getY()+(y*ListManager.getTileHeight()),0));
}
}
}
渲染:
for (Chunk c : w.getChunkList()) {
g2d = (Graphics2D) g.create();
for (int i = 0; i<c.getTileList().size(); i+=2) {
g2d.drawImage(test2, (c.getTileList().get(i).getLocation().getX()+c.getTileList().get(i).getOffset().getxOffset()), (c.getTileList().get(i).getLocation().getY()+c.getTileList().get(i).getOffset().getyOffset()+w.getvOffset()), this);
g2d.drawImage(test2, (c.getTileList().get(i).getLocation().getX()), (c.getTileList().get(i).getLocation().getY()+w.getvOffset()), this);
}
for (int i = 1;i<c.getTileList().size(); i+=2) {
g2d.drawImage(test2, (c.getTileList().get(i).getLocation().getX()), (c.getTileList().get(i).getLocation().getY()+w.getvOffset()), this);
g2d.drawImage(test2, (c.getTileList().get(i).getLocation().getX()+c.getTileList().get(i).getOffset().getxOffset()), (c.getTileList().get(i).getLocation().getY()+c.getTileList().get(i).getOffset().getyOffset()+w.getvOffset()), this);
}
}
我需要帮助把地图做成菱形,而不是锯齿形。如果您需要有关代码的更多信息,请在下面进行评论。这段代码的另一个缺陷是,每两块瓷砖就有一个1像素宽的空间。我不知道为什么。。我试着调整偏移量,但没用。。 当前偏移:(平铺构造函数)
offset = new IsometricOffset(21,11);
我最接近没有空间的地方是20,10,但仍然有一个很小的空间
这是一张照片:
http://img845.imageshack.us/img845/6242/picbz.png
谢谢你的帮助! 编辑: 显然,屏幕上的两个磁贴实际上只是引擎中的一个磁贴。我正在修理它
编辑:
更改并获得以下内容: img526。图像小屋。us/img526/3121/test333。巴布亚新几内亚
图纸:
for (Chunk c : w.getChunkList()) {
/*for (int i = 0; i<c.getTileList().size(); i++) {
g2d.drawImage(test2, (c.getTileList().get(i).getLocation().getX()), (c.getTileList().get(i).getLocation().getY()+w.getvOffset()), this);
}*/
for (int i = 0;i<c.getTileList().size(); i++) {
g2d.drawImage(test2, (c.getTileList().get(i).getLocation().getX()+c.getTileList().get(i).getOffset().getxOffset()), (c.getTileList().get(i).getLocation().getY()+c.getTileList().get(i).getOffset().getyOffset()+w.getvOffset()), this);
}
}
(我试着在没有偏移的情况下画画,它画的东西和图片一样) 生成:
for (int x = 0; x < 8; x++) {
for (int y = 0;y< 8; y++) {
tileList.add(new Tile(location.getX()+(x*ListManager.getTileWidth()/2),location.getY()+(y*ListManager.getTileHeight()/2),0));
}
location.setX(location.getX()+ListManager.getTileWidth()/2);
location.setY(location.getY()+ListManager.getTileHeight()/2);
}
试验后:
生成:
public void Generate() {
for (int x = 0; x < 8; ++x) {
for (int y = 0;y< 8; ++y) {
tileList.add(new Tile(location.getX()+(y*ListManager.getTileWidth()/2),location.getY()-(y*ListManager.getTileHeight()/2),0));
}
location.setX(location.getX()+ListManager.getTileHeight()/2);
location.setY(location.getY()+ListManager.getTileWidth()/2);
}
}
结果:这是我得到的最接近的结果: http://img814.imageshack.us/img814/3450/bombombom.png
# 1 楼答案
试着想象你的地图旋转了45度
渲染周期必须如下所示:
UPD:工作证明强>
代码(actionscript,但算法没有区别):
结果: