2016-05-08 43 views
0

是否有可能.setColor(X,X,X,1)圓的像這樣的邊界:Libgdx - 設置子畫面的顏色

enter image description here

別的我都用2個精靈,和我已經有500個精靈參考。不想用1000.

+0

圓圈內部是否必須保持純白色,邊框可以是任何顏色?這可以通過定製着色器來完成。 – Tenfour04

+0

是的,現在我正在使用一個空白的圓形精靈,所以我的遊戲可以動態地改變顏色,所以我會查找着色器,但它們比繪製另一個精靈更便宜嗎? –

+0

自定義着色器的價格要便宜得多,前提是您可以在批處理中繪製所有形狀,而無需在每次渲染中多次在自定義着色器和默認着色器之間來回切換。但是你需要設置你的精靈來將輪廓和內部的部分編碼成不同的顏色通道。以後我可以在我的電腦上寫一個解釋。 – Tenfour04

回答

0

要在一次使用自定義着色器的情況下執行此操作,請以某種方式對源精靈進行編碼。就像這樣:

enter image description here

現在你可以使用之間的R通道的插因子白和您的邊框顏色融爲一體。您可以從SpriteBatch複製源代碼的頂點着色器和修改片段着色器主要功能如下所示:

vec4 texColor = texture2D(u_texture, v_texCoords); 
gl_FragColor = vec4(mix(vec3(1.0), v_color.rgb, texColor.rrr), v_color.a * texColor.a); 
+0

正是我在找的,謝謝!這應該完成工作。 –

0

只需使用兩種不同的紋理,一種是填充圓形,另一種是隻有一種筆觸。使用libGDX Sprite類中的setTexture方法來設置無論哪個精靈都需要描邊或實心圓的紋理。

這仍然是有效的,因爲紋理只需要加載一次,並通過設置精靈的紋理它只保留在內存中的指針而不是整個紋理。

+0

如果使用TextureAtlas,在使用Sprite時會反覆重新分配UV。創建一個不屬於TextureRegion或Sprite子類的類可能會更好,但是會使用傳遞的TextureRegion實例繪製自己。 – Tenfour04

+0

那麼如果我爲這2種不同的紋理使用2個紋理.png文件呢?以及其他動畫的紋理區域。這足夠嗎? –

+0

因爲我也可以引用2個Sprite,然後在draw方法中不斷改變它們的位置。我選擇創建100個精靈,因爲它更容易查看,並且它在性能上似乎沒有任何差異。 –

0

我會去上面的TextureRegion想法,當你完成你的遊戲,如果你的有性能問題那麼只有這樣我纔會真的擔心這個,但是我有點害怕着色器。

大多數人從未完成他們的遊戲,因爲他們在真正需要之前就被細節追上了。