2013-05-12 30 views
5

Tôi dường như không thể tìm cách để buộc xoay vòng máy ảnh ortho của tôi trong libgdx (dự án với hộp2d) thành vòng quay của thân máy box2d. Có phương pháp cam.rotate (xy), cho nó một xung hoặc tăng tốc, nhưng tôi muốn đặt một giá trị dứt khoát, một cái gì đó giống nhưĐặt Xoay máy ảnh trong Libgdx

cam.setAngle(player.body.getAngle()); 

Làm thế nào tôi sẽ đi về việc này? Tôi có phải viết chức năng của riêng mình không? Nếu có thì làm sao? Tôi muốn xoay vòng máy ảnh luôn giống như của máy quay ...

Cảm ơn bạn!

Trả lời

6

Sau một đêm ngủ ngon, tôi chỉ tỉnh dậy với giải pháp trong đầu! chức năng cam.angle (góc) rõ ràng là đặt góc tới những gì bạn muốn (theo độ) - nhưng bạn chỉ phải thực hiện nó một lần chứ không phải trong vòng lặp cập nhật, nếu không máy ảnh chỉ bắt đầu quay. Điều này hiển nhiên, nhưng tôi không hiểu.

vấn đề khác là cơ thể Box2D có "vô tận" độ (i chuyển đổi tất cả mọi thứ để độ với * MathUtils.radiansToDegrees), vì vậy tôi đã phải hạn chế này để 0-359:

playerAngle = player.body.getAngle()*MathUtils.radiansToDegrees; 

while(playerAngle<=0){ 
     playerAngle += 360; 
    } 
while(playerAngle>360){ 
     playerAngle -= 360; 
    } 

camera của độ đi từ -180 đến 180, vì vậy bạn cũng phải chuyển đổi các 0-359:

camAngle = -getCameraCurrentXYAngle(camera) + 180; 

chức năng "getCameraCurrentXYAngle (cam) là như sau:

public float getCameraCurrentXYAngle(OrthographicCamera cam) 
{ 
    return (float)Math.atan2(cam.up.x, cam.up.y)*MathUtils.radiansToDegrees; 
} 
01.235.

Và bây giờ sử dụng này để cập nhật cam của bạn để chuyển động quay của máy nghe nhạc của bạn:

camera.rotate((camAngle-playerAngle)+180); 

Tôi hy vọng điều này sẽ giúp người upvoted câu hỏi của tôi;)

Chúc mừng và chúc một ngày năng suất cao! Jonas