2016-05-08 10 views
0

を設定すると、それが.setColor(X、X、X、1)このような円の境界のことが可能です私はすでに500のスプライトを参照しています。 012を使用したくないです。Libgdxスプライトの色

+0

円の内側は純粋な白のままでなければならず、境界は任意の色にできますか?これはカスタマイズされたシェーダで行うことができます。 – Tenfour04

+0

まさに今、私は空白のスプライトを使用していますので、私のゲームは色を動的に変えることができるので、シェーダをルックアップしますが、別のスプライトを描くよりも安価ですか? –

+0

カスタムシェーダは、レンダリングごとにカスタムシェーダとデフォルトシェーダの間を何度も行き来することなく、すべてのシェイプをバッチで描画することができれば、はるかに安いでしょう。しかし、スプライトを設定してアウトラインと内部部品を別々のカラーチャンネルにエンコードする必要があります。私は後で自分のコンピュータで説明を書くことができます。 – Tenfour04

答えて

0

カスタムシェイダーで1回のパスで行うには、ソーススプライトを特定の方法でエンコードします。このように:

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

2つの異なるテクスチャを使用してください.1つは塗りつぶし円で、もう1つはストロークだけです。 libGDX SpriteクラスのsetTextureメソッドを使用して、スプライトまたは塗りつぶされた円が必要なスプライトのテクスチャを設定します。

これは、テクスチャを一度読み込むだけで済み、スプライトのテクスチャを設定するだけで、テクスチャ全体ではなくポインタをメモリに保持するので効率的です。

+0

TextureAtlasを使用している場合、Spriteを使用するときにUVを何度も再割り当てするためのオーバーヘッドがあります。 TextureRegionまたはSpriteをサブクラス化せず、TextureRegionインスタンスで渡された自身を描画するクラスを作成する方がいいでしょう。 – Tenfour04

+0

この2種類のテクスチャに対して2つのテクスチャ.pngファイルを使用するとどうなりますか?アニメーションのためのtextureRegionと他のすべてのもの。十分でしょうか? –

+0

私は2つのスプライトを参照して、drawメソッドの位置を変えておくこともできます。私はスプライトを100個作成することを選択しました。スプライトは見やすく、パフォーマンス上の違いはないようです。 –

0

あなたがあなたのゲームを終えたとき、あなたがた場合、私は、上記のTextureRegionの考え方で行くとなりパフォーマンスの問題THENそれだけで私は本当にこれについて心配しますが、私は幾分シェイダーを恐れています。

ほとんどの人は、本当に必要となる前に細部の方法で追いつくため、ゲームを終了することはありません。

関連する問題