绘制循环计时器(AndEngine)

时间:2013-02-15 21:06:39

标签: android andengine geometry sprite-sheet

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

Graphics.fillArc()

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

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

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

寻找解决方案我遇到了“Drawing a circle using Andengine”。 Q& A对我来说没什么用,因为唯一的答案是“确实,你不能直接绘制圆圈”提供了两种选择:(1)“渲染带有圆形纹理的四边形” - 这不适用于因为我需要动态修改圆圈以产生弧形填充; (2)“渲染一个实际上是连接三角形圆的圆”。也许选项二可行,但是没有指导如何做到这一点。

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

  

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

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

最后,我找到了this discussion,这很有希望。特别是,有一个建议:

  

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

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


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

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

Cheating Timer Image

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

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

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

White on White Timer

1 个答案:

答案 0 :(得分:3)

第三种解决方案需要单个纹理和自定义对象。所以这是你的解决方案之间的权衡,其中一个需要很多三角形而另一个需要纹理存储器。

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