绘制循环计时器(AndEngine)

Cam*_*man 7 geometry android sprite-sheet andengine

我正在使用AndEngine,在该框架内,我想制作一个循环计时器图形.具体来说,我想显示重用能力的等待时间.这个想法是在计时器进行时动态填充弧.像这样的东西:

Graphics.fillArc()

java.awt.Graphics对象有一个fillArc()方法,对我来说似乎很合适.实际上,上面的图形是使用fillArc(50,5,100,100,75,-40)绘制的.大!现在问题在于:

AndEngine不使用Graphics()对象,它使用自己的Shape实现(对于OpenGL)并且没有定义的"Circle"形状,更不用说使用fillArc()方法的圆形.

可能的解决方案及其各自的问题

为了找到解决方案,我遇到了" 使用Andengine绘制圆圈 ".问答对我来说没什么用,因为唯一的答案是"确实,你不能直接绘制一个圆圈"提供了两种选择:(1)"渲染带有圆形纹理的四边形" - 这对我来说不起作用我需要动态修改圆圈以产生arcfill; (2)"渲染一个实际上是连接三角形圆的圆".也许选项二可行,但是没有指导如何做到这一点.

我还遇到了" 通过box2d在android andengine创建圈子? ".我怀疑有人可能会说,你可以简单地创建一个这样的圆圈:

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

这对我没有帮助.我不打算创建一个圆形的2D物理体.我想要显示一个.

最后,我发现这个讨论很有希望.特别是,有一个建议:

使用Canvas将[it]绘制到Bitmap中,并将该Bitmap作为TextureSource加载.

听起来很合理,虽然我还不清楚该怎么做.


更新:我的作弊"解决方案"

而不是纠缠于此,我决定作弊(至少目前).我做了一个看起来像这样的spritesheet:

作弊计时器图像

我没有实际让计时器显示完美的fillArc(),而是基于将完成的比例(从0到1)四舍五入到spritesheet上的相应索引,从spriteesheet中提取精灵的相应索引.像这样:

public void setTimer(float amount) {
    this.setCurrentTileIndex(Math.round(amount * 20));
}
Run Code Online (Sandbox Code Playgroud)

为了我的目的,这实际上工作正常 - 我使用超过2秒的计时器,所以你真的没有看到缺乏细节.但是,如果有人发布,我可能会用"正确的"解决方案替换它.此外,也许这个spritesheet对于做同样事情的人有用.这是使用透明度而不是绿色背景的版本.(所以它在stackoverflow的白色背景上是白色的,但它就在那里):

白色计时器上的白色

Nic*_*ich 3

第三种解决方案需要单个纹理和自定义对象。因此,这是您的解决方案之间的权衡,其中一个需要大量三角形,另一个需要纹理内存。

\n\n
    \n
  1. 您只需要一张图像,即上面“作弊序列”中的完整圆圈。
  2. \n
  3. 创建一个由 8 个三角形组成的自定义对象(一个“完全绘制”的三角形将代表每个三角形 45\xc2\xb0)。
  4. \n
  5. 进度决定:\n
      \n
    • 要绘制多少个三角形。即:\n
        \n
      • 100% ==> 360\xc2\xb0 ==> 8 个完整三角形
      • \n
      • 50% ==> 180\xc2\xb0 ==> 4 个完整三角形
      • \n
      • 37.5% ==> 135\xc2\xb0 ==> 3 个完整三角形
      • \n
      • 25% ==> 90\xc2\xb0 ==> 2 个完整三角形
      • \n
      • 20% ==> 72\xc2\xb0 ==> 1 个完整三角形和一个移动了一个顶点的三角形,使其代表剩余的 27\xc2\xb0 (== 72\xc2\xb0 - 45\xc2\xb0)。
      • \n
    • \n
  6. \n
\n\n

如果你问我这是最酷的解决方案,因为它可以应用于任何纹理。=)

\n

  • 甚至还有第四种解决方案,您可以使用使用平台本机 android.graphics 绘制的位图刷新现有纹理(与使用 java.awt.graphics 所做的非常相似)。有关如何更新纹理的示例可以在此处找到:https://github.com/nicolasgramlich/AndEngineExamples/blob/GLES2/src/org/andengine/examples/UpdateTextureExample.java。 (2认同)