2015-10-04 46 views
-1
font.draw(batch, "Test", 50, 50); 

batch.draw(tex, 100, 100); 
(instead of) 
tex.draw(batch, 100, 100);//Not valid for LibGDX 

對於繪製字體,您將批量(SpriteBatch)作爲參數傳入,draw()是Font方法。爲了繪製紋理(或紋理區域),它被顛倒過來。我知道Texture有一個draw()方法,它自己可以在本身上繪製一個Pixmap,但是我認爲將它重命名爲drawSelf()或drawPixmap()將允許Texture.draw()繪製自己,與Font一致。畫()。LibGDX draw()API不一致

我是否錯過了明顯的強迫它這樣做?

+0

有人在乎說爲什麼這是downvoted?似乎仍然是一個合理的問題。 – User

回答

1

想錯了紋理作爲與BitmapFont相同的對象。 BitmapFont是一個包含文本信息的對象(所以文本值,字形紋理,包裝等)。通過BitmapFont對象繪製文本意味着生成紋理以渲染(通過設置字形紋理),然後將其渲染到屏幕上。

你應該將BitmapFont看作是一種管理器,當Texture更像是一組像素可以繪製 - 當然它有一些額外的信息比pixmap更多,但它已準備好呈現。

當然在繪製方法名稱是相似的,但它是在對象編程中相當正常的情況我猜 - 只是不關心它。

1

一個簡單的方法來思考它是大多數類型的可繪製對象(如BitmapFonts和Sprite)是複雜的。他們處理他們自己的數據的計算,因爲他們包含多個精靈或大小/方向/顏色/位置數據,因此您將SpriteBatch傳遞到他們的draw方法中,以便他們可以處理數據傳輸。 SpriteBatch知道如何獲取許多不同類型的特定對象的數據是沒有意義的(或者非常面向對象)。

但是,SpriteBatch確實知道如何處理兩個最簡單的對象Texture和TextureRegions。這些簡單的對象不包含任何有關它們的大小或方向或顏色的信息,因此SpriteBatch可以處理它們並根據需要計算額外的數據(這就是爲什麼SpriteBatch有這麼多的重載draw方法)。

紋理知道如何用SpriteBatch繪製自己是沒有意義的,因爲這是一個專門的用例。 Texture(和TextureRegion)是一個廣義對象,旨在用於各種用途(3D貼圖,包裝3D模型,自定義Mesh上的自定義實現等),因此它不可能用於知道所有可能的方式都可以被繪製和實施。

如果您希望Texture能夠擁有自己的draw(batch)方法,則應該對它進行子類化以添加該方法。 (但是已經有Sprite類已經完成了這項工作。)

需要注意的一個問題是Sprite擴展了TextureRegion,所以你可能會不小心打電話給spriteBatch.draw(sprite),並想知道爲什麼你的精靈沒有正確的大小和方向。