我正试图制作一个模仿时钟的计时器,用一只滴答作响的手。绘制时钟纹理然后是手的线条没有问题,但我也希望时钟指针后面的空间有一个填充。所以随着时间的推移,我希望时钟从原点(0:00)开始“填满”,一直到时钟指针。
我基本上想要这样做:
对我来说,最好的方法是什么?我有基础,只是不知道如何添加填充部分。
答案 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变得复杂,你必须使用一个小的扇形纹理,并在中心周围旋转它多次绘制。
这是一个例子,需要进行精确调整。
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;。
填充完成后,您只需要绘制其他时钟组件;手和边界。