2013-03-01 5 views
1

Я пытаюсь правильно настроить мои Camera и Sprite s в libGDX, чтобы правильно отображаться в 2D системе координат с началом в нижнем левом углу.Координатная система libGDX

Я настроил свой Camera так:

cameraWidth = Gdx.graphics.getWidth(); 
cameraHeight = Gdx.graphics.getHeight(); 
camera = new OrthographicCamera(1, cameraHeight/cameraWidth); 

И я создал мои Sprite S так:

sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2); 
sprite.setScale(scale); 
sprite.setPosition(startX,startY); 

Моя проблема с sprite.setSize(x,y). Если я установил все спрайты размером (1, texture aspect ratio), тогда все будет рисоваться с правильной пропорцией отображения (не сжимается или растягивается), но ничто не рисует в нужном месте. Например, если я рисую что-то в (0,0), он будет рисовать с левым нижним углом слева от экрана и вверх по количеству пикселей.

Я заметил, изменив соотношение, которое я могу получить, чтобы рисовать в разных местах - а именно, если я установил его на (1, display aspect ratio), все выглядит довольно близко к рисунку в нужном месте - они просто рисуют из своего центра, а не их нижний левый угол, как указывает LibGDX. Единственная проблема заключается в том, что все изображения выглядят как размазанные или растянутые, что бесполезно.

Это похоже на простую проблему, и я просто хочу знать, как установить это, чтобы у меня была разумная система координат, которая рисует вещи в нужном месте и в правильном соотношении сторон. Благодарю.

ответ

0

Я нашел решение этой проблемы:

Установите камеру в орто (хотя это уже орфографической камера)

camera.setToOrtho(false,1,screen height/screen width); 

Кроме того, каждый спрайт должен иметь свою позицию установлен (x - sprite.getWidth()/2, y - sprite.getHeight()/2 , Я расширил класс Sprite и переопределил метод , чтобы учесть это. Теперь, каждый раз, когда позиция установлена, Sprite s заканчивается тем, что «подумают, что они пойдут», с setPosition(0,0), положив его в левый нижний угол и setPosition(1,height/width) в левом верхнем углу.

Как ни странно, это привлекает каждый спрайт, сосредоточенный вокруг (х, у) точки, которая будет иметь смысл, так как ширина/2 и высота/2 вычитает из положения, за исключением не вычитание значения не делает центрируйте спрайт через левый нижний угол - он центрирован таким образом, который я не понял.

2

Как только вы измените свой видовой экран в соответствии с форматом изображения экрана, тогда (0, 0) больше не будет в левом нижнем углу экрана, если только экран не квадратный. Если экран шире, чем высокий, то видимая часть оси x будет по-прежнему идти от 0.0 до 1.0, но 0.0 по оси y теперь будет где-то в нижней части экрана.

Если настроить камеру таким образом, что (0, 0) находится в левом нижнем углу экрана, и помните, что видимая ось у будет идти только до grapicsHeight/graphicsWidth то, что должно решить проблему координации.

Я бы рекомендовал установить камеру на середину экрана, а не на нижний левый. Вот пример here, который делает именно это, рисуя прямоугольник 2: 1, который всегда находится в центре экрана, всегда с соотношением 2: 1, независимо от того, насколько сильно вы его изменяете.

+0

Спасибо, хотя я работал с тем, что вы сказали уже, и это не сработало. – GraphicsMuncher