私はアイソメトリックゲームを作成していますが、ジグザグアイソメトリックマップを作成することしかできませんでした。私の元々のアイデアはひし形でしたが、なんとかできませんでした。
ダイヤモンド:coobird.net/img/tile-diamond-good-order.png
ジグザグ:coobird.net/img/tile-zigzag-compact.png
これが何が起こっているかを示すための私のコードのビットです:
世界:
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つのバグは、タイルのカップルごとに1ピクセル幅のスペースがあることです。理由はわかりません..オフセットを調整しようとしましたが、役に立ちませんでした..現在のオフセット:(タイルコンストラクター)
offset = new IsometricOffset(21,11);
スペースがなくなったのに一番近かったのは20,10でしたが、それでも小さなスペースがありました
ここに写真があります:
http://img845.imageshack.us/img845/6242/picbz.png
助けてくれてありがとう!編集:どうやら、画面上の2つのタイルは、実際にはエンジン内の1つのタイルだけです。私はそれを修正するために取り組んでいます。
編集:
変更してこれを取得しました:img526.imageshack.us/img526/3121/test333.png
図:
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