У меня случается какая-то странная вещь, пытаясь разделить tilemap, чтобы привлечь к JPanel. Во-первых, это уместный фрагмент кода:Разделение Tilemap Изображение в качели
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 «ширина плитки» (32 пикселя). это выход я получаю:
Это более или менее то, что она должна выглядеть, кроме плитки все 32px прочь на оси х
Я уверен, что это происходит потому, я конвертирую CSV в int [], и индекс начинается с 0, но моя сетка начинается с 1. Легко исправить? Просто вычтите 1 из моего значения x, чтобы переместить sx1 исходного изображения 32px влево.
Revised Код:
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);
Все, что я пробовал, дает мне те же результаты. Есть что-то здесь, что мне не хватает?
* «Просто вычтите 1 из моего значения x» * - Почему бы не стать предметом '1' из' gid'? – MadProgrammer
Изменение значения gid также повлияет на ось Y. Это только ось X выключена. Гиды соответствуют тому, что находится в файле CSV. (Я пробовал это на alread) – kookej
Возможно, вы нарисуете материал один над другим, а затем некоторые вещи больше не видны. – Trilarion