绘制循环定时器(AndEngine)

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

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

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

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

四处寻找解决方案,我遇到了“使用Andengine绘制圆圈”。 这个问答对我来说没有多大用处,因为唯一的答案是“的确,你不能直接画一个圆圈”提供了两种选择:(1)“用圆形纹理渲染四边形” - 这对我不起作用,因为我需要动态修改该圆形以产生弧形填充; 和(2)“渲染一个实际上是连接三角形的圆的圆。” 也许选项二会起作用,但是没有关于如何做到这一点的指导。

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

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

这真的没有帮助我。 我不打算创建一个圆的2D物理体。 我正在寻找一个。

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

使用画布将[它]绘制到位图中,并将该位图作为TextureSource加载。

听起来很合理,但我还不清楚如何做到这一点。


更新:我的作弊“解决方案”

我没有深究这一点,而是决定作弊(至少现在是这样)。 我制作了一张spritesheet,如下所示:

作弊计时器图像

基于将完成的比例(从0到1)四舍五入到spritesheet上的相应索引,而不是实际让计时器显示完美的fillArc(),我只需从spritesheet中提取精灵的适当索引。 喜欢这个:

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

出于我的目的,这实际上工作得很好 - 我使用约2秒的计时器,所以你真的没有看到缺乏细节。 但是,如果有人发布它,也许我会考虑用“适当的”解决方案替换它。 另外,也许这个spritesheet将会对做同样事情的人有用。 这里是使用透明度而不是绿色背景的版本。 (所以它是在白色背景上的stackoverflow,但它在那里):

白色在白色定时器上


还有第三种解决方案需要单个纹理和一个自定义对象。 所以这是你的解决方案之间的折衷,其中一个需要很多三角形,另一个需要纹理内存。

  • 您只需要一个图像,即上面“作弊序列”中的整个圆圈。
  • 创建由8个三角形组成的自定义对象(一个“完全绘制”的三角形将分别代表45°)。
  • 进展决定了:
  • 要绘制多少个三角形。 即:
  • 100%==> 360°==> 8个完整的三角形
  • 50%==> 180°==> 4个完整的三角形
  • 37.5%==> 135°==> 3个完整的三角形
  • 25%==> 90°==> 2个完整的三角形
  • 20%==> 72°==> 1个完整的三角形和一个三角形,其中一个顶点移动,以表示剩余的27°(== 72° - 45°)。
  • 如果你问我这是最酷的解决方案,因为它可以应用于任何纹理。 =)

    链接地址: http://www.djcxy.com/p/11821.html

    上一篇: Drawing a Circular Timer (AndEngine)

    下一篇: How to get an ipython graphical console on Windows 7?