2016-08-18 3 views
0

Спокойной ночи друзья.libgdx Фиксированная точка после камеры.rotateAround

У меня возникли проблемы с нанесением неподвижной точки на экране при повороте экрана. Я использовал метод «rotateAround» с позиции игрока.

Мне кажется. Я должен повернуть эту неподвижную точку также с позиции игрока. Я использую это растяжение, узнанное здесь, в stackoverflow.

public void rotate(Vector3 position, Vector3 centerPoint){ 
    this.cosTemp = MathUtils.cosDeg(this.anguloAtual); 
    this.senTemp = MathUtils.sinDeg(this.anguloAtual); 

    this.xTemp = centerPoint.x + ((position.x - centerPoint.x) * this.cosTemp) - ((position.y - centerPoint.y) * this.senTemp); 
    this.yTemp = centerPoint.y + ((position.y - centerPoint.y) * this.cosTemp) + ((position.x - centerPoint.x) * this.senTemp); 

    position.set(this.xTemp, this.yTemp, 0); 
} 

На рисунке, что игрок на экране. Я использовал положение плеера, затем называл «camera.project», затем метод «вращается». Появляется неподвижная точка, однако она не точно фиксирована. Я использовал пример фиксированной точки немного впереди игрока.

public void meDesenhar(SpriteBatch spriteBatch) { 

    spriteBatch.begin(); 
    this.spritePlayer.setPosition(this.positionPlayer.x - (this.spritePlayer.getWidth()/2), 
            this.positionPlayer.y - this.spritePlayer.getHeight()/2); 

    this.spritePlayer.draw(spriteBatch); 
    spriteBatch.end(); 

    originPosition.set(positionPlayer, 0); 
    fixedPosition.set(positionPlayer.x, positionPlayer.y + 10, 0); 

    cameraTemp.project(fixedPosition); 
    cameraTemp.project(originPosition); 

    cameraManagerTemp.rotate(fixedPosition, originPosition); 
    Debugagem.drawPointInScreen(Color.BLUE, fixedPosition); 
} 

Мои вопросы:

1 - я делаю что-то неправильно, или просто это результат округления? Я понял, когда отлаживаю. Позиция игрока немного изменилась после поворота после «camera.project». Примерное положение (540, 320) повернуто (539.99, 320.013)

2 - Я попытался использовать SpriteBatch и использовать метод draw для выполнения вращения, однако он не мог сделать поворот с плеера. Я бы пришел к такому же результату.

3 - Можно ли использовать две камеры? Каждая камера будет слоем. Камера на карте и игрок будет. Другой для фиксированной точки. Это жизнеспособно? Я не мог найти ни одного примера, который работает с несколькими камерами одновременно. Кто-нибудь знает какие-либо примеры, пожалуйста. Я не говорю о хапах или камерах.

Видео следует за.

https://www.youtube.com/watch?v=1Vg8haN5ULE

Спасибо.

ответ

1
  1. Это может быть результат округления, потому что он перемещает пиксель.
  2. Вы можете вычислить поворот игрока, но не обязательно.
  3. Конечно, вы можете использовать несколько камер в своей игре, и вы также должны в этом случае.

Его несколько скриншота из моих старых проектов, которые я использовал несколько камер enter image description here enter image description here

Как вы можете видеть, вы даже можете использовать различные типы камер, как орта и перспективы как в 2D и 3D.

Просто создать новую камеру, как первый и изменение матрицы проекции

camrotate = new OrthographicCamera(540, 960); 
//... 
camfixed = new OrthographicCamera(540, 960); 
//... 

И метод визуализации

batch.setProjectionMatrix(camrotate.combined); 
batch.begin(); 
//draw in camrotate now 
//... 
//... 
batch.end(); 

batch.setProjectionMatrix(camfixed.combined); 
batch.begin(); 
//draw fixed elements now 
//... 
//... 
batch.end(); 
//add one more camera if you need 

Edit: Изменить матрицу проекции вне batch.begin()/конец() в противном случае текущая партия будет размыта.

+0

Deniz еще раз спасибо. Когда я вернусь домой, я попробую. Есть ли место, где я могу увидеть вашу игру? – Lovera

+0

Работал очень хорошо. Большое спасибо. – Lovera

Смежные вопросы