JPanelに描画するためにタイルマップを分割しようとしているときに、私はいくつか奇妙なことが起こっています。スイングでタイルマップイメージを分割する
private void drawTile(Graphics g,MapController mc,int gid){
int cols = mc.getMap().getTileset().getColumns();
int x = (gid % cols);
int y = gid/cols;
int tilewidth = mc.getTilewidth();
int tileheight = mc.getTileheight();
int dx1 = 0;
int dx2 = dx1+tilewidth;
int dy1 = 0;
int dy2 = dy1+tileheight;
int sx1 = (x)*tilewidth;
int sx2 = sx1+tilewidth;
int sy1 = y*tileheight;
int sy2 = sy1+tileheight;
g.drawImage(mc.getSpriteImage(), dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null);
}
これは、地図上の層を介して繰り返し処理を行い、パネルに各タイルを描画ループ内にある:最初にこのコードの関連部分です。私のプログラムを実行すると、ほとんどの部分が正しく動作しますが、x軸が1 "タイル幅"(32px)だけずれていることがわかりました。これは私が手に出力されます。これは、タイルは、すべてのx軸
に、多かれ少なかれ、それは他のどのようなものかオフ32PXされているよりも
私はこれがあるためであるかなり確信しています私はCSVをint []に変換しています。インデックスは0から始まりますが、グリッドは1から始まります。簡単に修正できますか?私のx値から1を引いて、私のソース画像のsx1を左に32ピクセル動かします。
改訂コード:私はそれを実行したときに
private void drawTile(Graphics g,MapController mc,int gid){
int cols = mc.getMap().getTileset().getColumns();
int x = (gid % cols)-1; //notice the -1
int y = gid/cols;
int tilewidth = mc.getTilewidth();
int tileheight = mc.getTileheight();
int dx1 = 0;
int dx2 = dx1+tilewidth;
int dy1 = 0;
int dy2 = dy1+tileheight;
int sx1 = x*tilewidth;
int sx2 = sx1+tilewidth;
int sy1 = y*tileheight;
int sy2 = sy1+tileheight;
g.drawImage(mc.getSpriteImage(), dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null);
}
今、私はこれを取得:
は、私はいくつかのトラブルシューティングラインに入れて、それは私が送信してるの座標のように見えますソースイメージが正しい。私も試した:
g.drawImage(mc.getSpriteImage(), dx1, dy1, dx2, dy2, sx1-32, sy1, sx2, sy2, null);
私が試したことはすべて私に同じ結果を与えている。 私は行方不明のものがありますか?
*「x値から1を減算する」* - 「gid」から「1」を除外する理由はありますか? – MadProgrammer
gidを変更するとY軸にも影響します。オフになっているのはX軸だけです。 gidsはCSVファイルの内容と一致します。 (私はそれを試してみた) – kookej
たぶんあなたは別のものの上に物を描くかもしれないし、いくつかのものはもう見えない。 – Trilarion