2014-11-20 4 views
0

Ok, так что у меня есть изометрическое отображение, где ширина каждой плитки 64, а высота 32. Это уравнение я придумал разместить плиткиПолучить Изометрическую Плитку Под Маус

xPos = (this.getPos().getX() - this.getPos().getY()) * (64/2) - Main.gameWindow.getCamera().getxOffset().intValue(); 
xPos -= 32; 
yPos = (this.getPos().getX() + this.getPos().getY()) * (32/2) - Main.gameWindow.getCamera().getyOffset().intValue(); 

Я вычитаю xPos на 32, чтобы компенсировать тот факт, что точка начала фрагмента находится в крайнем левом углу.

То, что я пытался сделать, это найти плитку, которая находится под мышкой. Итак, сначала я попробовал просто обратить вспять уравнение (я был уверен, что это сработает) И это код, в который я попал, когда я его отменил.

int yMouseTile = ((cursorY/(32/2) - (cursorX/32))/2); 
int xMouseTile = ((cursorX/32) + yMouseTile); 

Этот вид работ. Но, как оказалось, этот код на самом деле рассматривает каждую плиту, как будто это квадрат, а не бриллиант.

Следующая странная часть заключается в том, что, когда моя мышь проходит над центром плитки, плитка меняется. Итак, что должно произойти, так это то, что моя мышка должна пройти по краю плитки, а затем она переходит к следующей. Но вместо этого он действует так, как будто центр плитки - это край.

Но на самом деле, все, что я хочу, это уравнение, которое заставит моя мышь работать как этот http://www.tonypa.pri.ee/tbw/tut18.html

На этой ссылке, нажмите на «Нажмите здесь, чтобы начать» кнопку, и смотреть, как мышь взаимодействует с плитка. Это моя цель :), спасибо

P.S. Я пробовал множество разных уравнений, многие из которых имеют тот же результат, что и уравнение, которое у меня выше

ответ

0

Рефакторинг имен переменных.

int TILE_WIDTH = 64; 
int TILE_HEIGHT = TILE_WIDTH/2; 

int xMap = this.getPos().getX(); 
int yMap = this.getPos().getY(); 

int xScreenCameraOffset = Main.gameWindow.getCamera().getxOffset().intValue(); 
int yScreenCameraOffset = Main.gameWindow.getCamera().getyOffset().intValue(); 

xScreen = (xMap - yMap) * (TILE_WIDTH/2) - yScreenCameraOffset; 
yScreen = (xMap + yMap) * (TILE_HEIGHT/2) - yScreenCameraOffset; 

Это может показаться чрезмерным, но, на мой взгляд, это легче читать и рассуждать. По this tutorial Если вы пытаетесь вывести обратное уравнение, вы получите:

xMouseTile = (xCursor/TILE_WIDTH/2 + yCursor/TILE_HEIGHT/2)/2; 
yMouseTile = (yCursor/TILE_HEIGHT/2 - xCursor/TILE_WIDTH/2)/2; 

Это не принимает во внимание камеры смещения.

+0

Я действительно пробовал этот учебник (хотя я использовал более сжатую версию этого кода этого кода). И это дало те же результаты, любая идея, почему? – Exonto

+0

Итак, в основном, используя учебник, который вы только что прислали мне, и используя его готовый код, вот как выглядит результат: http://gyazo.com/1387cfe7472b816f6009292e8f0df4c3 – Exonto

+0

Всегда ли это одна плитка на оси x (плитка)? Есть ли что-то в этом роде? –