绘制带有计算宽度的矩形不会绘制

时间:2012-11-15 23:26:01

标签: c# winforms drawing

我正在尝试在Windows窗体上创建一个图形,该图形将模拟我尝试使用ProgressBar作为健康栏的操作。我不喜欢ProgressBar,因为当我将Value设置为Maximum时,它会在开头设置填充动画。

这是我的方法

private void Battlefield_Paint(object sender, PaintEventArgs e)
  {
      using (SolidBrush blackBrush = new SolidBrush(Color.Black))
      using (SolidBrush redBrush = new SolidBrush(Color.Red))
      using (Graphics formGraphics = this.CreateGraphics())
      {
          formGraphics.FillRectangle(blackBrush, new Rectangle(12, 12, 76, 23));
          formGraphics.FillRectangle(redBrush, new Rectangle(14, 14, 72*(p1.CurrentHealth/p1.MaxHealth), 19));
          int result = 72 * (p1.CurrentHealth / p1.MaxHealth);
          Console.WriteLine(result);
      }
  }

我有一个计时器每隔50ms重新绘制一次表格。

我遇到一个问题,黑色矩形内的红色矩形首先会很好地绘制,但是一旦我的角色受到伤害,且CurrentHealth小于MaxHealth,{{1返回为0,矩形甚至没有显示在屏幕上,因为我认为它是用0宽度绘制的......

我不知道这个计算会出现什么问题会导致它返回0.我已经通过调试器运行了一堆并且值看起来正确,一开始是30和30,然后是下次通过28,30时,我得到的值为0 ......

1 个答案:

答案 0 :(得分:1)

我认为CurrentHealthMaxHealth是整数,你正在进行整数除法,当你将6除以10得到0而不是0.6

你应该试试这个:

private void Battlefield_Paint(object sender, PaintEventArgs e)
  {
      using (SolidBrush blackBrush = new SolidBrush(Color.Black))
      using (SolidBrush redBrush = new SolidBrush(Color.Red))
      {
          e.Graphics.FillRectangle(blackBrush, new Rectangle(12, 12, 76, 23));
          e.Graphics.FillRectangle(redBrush, new Rectangle(14, 14, (int)(72.0*((double)p1.CurrentHealth/(double)p1.MaxHealth)), 19));
          int result = (int)(72.0*((double)p1.CurrentHealth/(double)p1.MaxHealth));
          Console.WriteLine(result);
      }
  }

此外,您应该使用e.Graphics,而不是每次都使用新的Graphics对象。