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