2015-10-09 59 views
0

在libgdx中有什麼方法可以圍繞它自己旋轉文本嗎?Libgdx text in place旋轉

事實上,我需要保持文本總是水平對齊而不旋轉,而文本和背景的SpriteBatch可以通過用戶的手勢翻譯/旋轉。

(我用BitmapFontSpriteBatch繪製文本。)

font.draw(batch, text, (wayCentroid.x - text.length()/2)/batch.getTransformMatrix().getScaleX(), (wayCentroid.y + 3)/batch.getTransformMatrix().getScaleY()); 
+1

也許使用'Stage'和'Label'來代替?演員可以很容易地旋轉。 – noone

+0

@noone階段不是強制性的繪製標籤。只要創建一個標籤並將其定位在世界上就足夠了。然後只需'myLabel.rotateBy'旋轉文本並用'myLabel.draw(worldBatch,1)'繪製它。 – Madmenyo

回答

1

我不知道你正試圖通過與一批矩陣搞亂完成的任務。但noone是正確的使用Label旋轉文字。

如果你想讓X旋轉和Y保持原位,那麼我認爲你應該旋轉X並且離開Y而不是旋轉SpriteBatch並向後旋轉Y.

無論如何,如果你知道你的旋轉角度,然後像這樣應該做的伎倆:

Label myLabel = new Label("My Text", skin); 
myLabel.setPosition(worldPosX, worldPosY); 
myLabel.setRotation(-angleInDegrees); 
myLabel.draw(worldBatch, 1); 
0

雖然我也建議你使用Scene2D標籤類來處理您的文本(說實話我建議你完全使用Scene2D,因爲它可以使你更願意對你的演員採取行動的所有旋轉/移動/縮放動作更容易)第二個選項是創建第二個攝影機和視口並使用它來渲染文本。

//in the show() method 
    camera = new OrthographicCamera(); 
    viewport = new FitViewport(VIRTUAL_WIDTH,VIRTUAL_HEIGHT,camera); 
    viewport.apply(); 

    camera2 = new OrthographicCamera(); 
    viewport2 = new FitViewport(VIRTUAL_WIDTH,VIRTUAL_HEIGHT,camera2); 
    viewport2.apply(); 

    ... //setting camera positions etc 

    camera.rotate(50); //now you are rotating first camera 

    ... 

    //in the render() method 
    ... 

    camera.update(); 
    camera2.update(); 

    batch.begin(); 

    //rendering rotated elements 
    batch.setProjectionMatrix(camera.combined);   
    batch.draw(someRotatedSprite, sprite_x, sprite_y); 

    ... 

    //now rendering not rotated ones 
    batch.setProjectionMatrix(camera2.combined);   
    font.draw(batch, "Some text here", text_x, text_y); //the text should has center in the center of the camera!! 

    ... 

    batch.end();