7

AndEngineを使用していますが、そのフレームワーク内で、円形のタイマーグラフィックを作成したいと思います。具体的には、能力の再利用までの待ち時間を表示したいと思います。アイデアは、タイマーが進むにつれて動的にアークを埋めることです。このようなもの:

Graphics.fillArc()

java.awt.Graphicsオブジェクトには、私にとって完璧に思えるfillArc()メソッドがあります。実際、上の図はfillArc(50,5,100,100,75、-40)を使用して描かれています。素晴らしい!ここに問題があります:

AndEngineはGraphics()オブジェクトを使用せず、独自のShape実装(OpenGL用)を使用し、定義された「Circle」形状はありません。ましてや、fillArc()メソッドを使用した円形状はありません。

考えられる解決策とそれぞれの問題

解決策を探していると、「Andengineを使用して円を描く」に遭遇しました。「確かに、円を直接描くことはできません」という唯一の答えは、次の2つの選択肢を提供するため、このQ&Aはあまり役に立ちません。(1)「円のテクスチャでクワッドをレンダリングする」-これは私にはうまくいきません。アークフィルを生成するには、円を動的に変更する必要があります。(2)「実際には接続された三角形の円である円をレンダリングする」。オプション2でうまくいくかもしれませんが、それを行う方法についてのガイダンスはありません。

また、「box2dでAndroidとエンジンにサークルを作成しますか?」に遭遇しました。誰かが言いたくなるかもしれないと思います。次のような円を作成するだけです。

Body circleBody = PhysicsFactory.createCircleBody(pWorld、pSprite、BodyType.StaticBody、FixtureDef);

それは本当に私を助けません。円の2D物理ボディを作成するつもりはありません。展示したいです。

最後に、私はこの議論を見つけました。これは有望です。特に、提案があります:

Canvasを使用して[それ]をビットマップに描画し、そのビットマップをTextureSourceとしてロードします。

合理的に聞こえますが、その方法はまだわかりません。


更新:私の浮気「解決策」

これにこだわるのではなく、私は(少なくとも今のところは)ごまかすことに決めました。次のようなスプライトシートを作成しました。

不正行為タイマー画像

実際にタイマーに完全なfillArc()を表示させるのではなく、実行された比率(0から1)をスプライトシートの適切なインデックスに丸めることに基づいて、スプライトシートからスプライトの適切なインデックスを取得します。このような:

public void setTimer(float amount) {
    this.setCurrentTileIndex(Math.round(amount * 20));
}

私の目的では、これは実際には問題なく機能します。タイマーを約2秒以上使用しているので、詳細が不足していることはわかりません。しかし、誰かが投稿した場合は、これを「適切な」ソリューションに置き換えることができるかもしれません。また、このスプライトシートは、同じことをしている人にも役立つかもしれません。これは、緑の背景の代わりに透明度を使用したバージョンです。(つまり、stackoverflowの白い背景には白ですが、そこにあります):

ホワイトオンホワイトタイマー

4

1 に答える 1

3

単一のテクスチャとカスタムオブジェクトを必要とする3番目のソリューションがあります。つまり、1つは多くの三角形を必要とし、もう1つはテクスチャメモリを必要とするソリューション間のトレードオフです。

  1. 必要な画像は1つだけです。つまり、上記の「チートシーケンス」の完全な円です。
  2. 8つの三角形で構成されるカスタムオブジェクトを作成します(1つの「完全に描画された」三角形はそれぞれ45°を表します)。
  3. 進捗状況によって次のことが決まります。
    • 描画する三角形の数。すなわち:
      • 100%==>360°==>8つの完全な三角形
      • 50%==>180°==>4つの完全な三角形
      • 37.5%==>135°==>3つの完全な三角形
      • 25%==>90°==>2つの完全な三角形
      • 20%==>72°==>1つの完全な三角形と1つの頂点を持つ1つの三角形が、残りの27°(== 72°-45°)を表すように移動しました。

あなたが私に尋ねるなら、これはどんなテクスチャにも適用できるので、これが最もクールな解決策です。=)

于 2013-02-17T04:10:50.133 に答える