绘制带填充的时钟计时器

时间:2014-05-03 02:52:42

标签: c# graphics xna

我正试图制作一个模仿时钟的计时器,用一只滴答作响的手。绘制时钟纹理然后是手的线条没有问题,但我也希望时钟指针后面的空间有一个填充。所以随着时间的推移,我希望时钟从原点(0:00)开始“填满”,一直到时钟指针。

我基本上想要这样做:

clocks

对我来说,最好的方法是什么?我有基础,只是不知道如何添加填充部分。

2 个答案:

答案 0 :(得分:2)

你应该建立一个三角形扇子。

  int n=0;
  VertexPostionColor[] V = new VertexPositionColor[num_triangles+2]
  V[0] = Center;
  for (var angle = start ;angle<=end; angle += (end - start) / num_triangles)
  {
       V[++N].Position = new Vector3( Math.Cos(angle), Math.Sin(angle)) * radius + Center;
       V[N].Color = CircleColor;
  }

  Short[] Index = new Short[num_triangles*3];

  for (int i = 0; i< num_triangles; i++)
  {
      Index[i*3] = 0;
      Index[i*3+1] = i+1;
      Index[i*3+2] = i+2;
  }

  GraphicsDevice.DrawUserIndexedPrimitives(...);

如果你想使用spritebatch变得复杂,你必须使用一个小的扇形纹理,并在中心周围旋转它多次绘制。

enter image description here

这是一个例子,需要进行精确调整。

  float SectorAngle = Mathhelper.ToRadians(10);
  Texture2D SectorTex;
  Vector2 Origin = new Vector2(SectorTex.Width/2, SectorTex.Height);
  for (var angle=start; angle<=end; angle+=SectorAngle) {
      spriteBatch.Draw(SectorTex, Center, null, Color.White, Origin, angle, scale,...)
  }

答案 1 :(得分:1)

如果你想使用纹理来做,你应该能够用两个简单的纹理来管理它:一个半圆(正好是半圆)和一个完整的圆。

首先,绘制整圆白色。然后,只需要计算需要填充多少圆圈。

如果它不到一半,则画半圈蓝色,旋转以匹配&#34;分针&#34;。然后绘制另一个半圈白色以覆盖左侧。

如果超过一半,则画半圈蓝色,覆盖整个右侧。然后绘制另一个半圈蓝色,旋转以匹配&#34;分针&#34;。

填充完成后,您只需要绘制其他时钟组件;手和边界。