在borland graphics c ++中制作一个球

时间:2013-11-25 19:55:49

标签: c++ borland-c++

我正在尝试使用borland图形界面(BGI)绘制的足球动画。将使用用户输入来确定球的位置。到目前为止,我已经取得了球,但我不确定如何编写第二个函数,它将改变给定用户输入的球的位置。

我只想在笛卡尔平面的x方向上移动球。为此,我尝试将用户输入添加到包含x坐标的球的任何方面,但我似乎无法使其工作。

以下是吸引足球的功能:

void Football::drawBall()
{

  int x = OFFSET + 900;
  int y = (HEIGHT / 2);
  int rX = 80;
  int rY = 50;
  setcolor( BLACK );
  setfillstyle( SOLID_FILL, BROWN );
  fillellipse( x, y, rX, rY );

  setcolor( BLACK );

  int xI = OFFSET + 860;
  int yI = (HEIGHT / 2);
  int xF = xI;
  int yF = yI;

  // Horizontal Lace on Ball
  line( xI, yI, xF + 80, yF );

  // Vertical Laces on the Ball, starting from the left

  for( int i = 0; i < 5; i++ )
  {
    line( xI + (20*i) , yI + 5, xF + (20*i) , yF - 5 );
  }
}

2 个答案:

答案 0 :(得分:1)

Borland C ++中的动画可以通过绘制,然后擦除,然后使用更新的坐标重绘来实现。

你可以通过绘制球,然后擦除它(以背景颜色绘制自己),使用不同的坐标绘制球。

以下是示例代码:

void Football::drawBall(int nOffset)
{

  int x = nOffset + 900;
  int y = (HEIGHT / 2);
  int rX = 80;
  int rY = 50;
  setcolor( BLACK );
  setfillstyle( SOLID_FILL, BROWN );
  fillellipse( x, y, rX, rY );

  setcolor( BLACK );

  int xI = nOffset + 860;
  int yI = (HEIGHT / 2);
  int xF = xI;
  int yF = yI;

  // Horizontal Lace on Ball
  line( xI, yI, xF + 80, yF );

  // Vertical Laces on the Ball, starting from the left

  for( int i = 0; i < 5; i++ )
  {
    line( xI + (20*i) , yI + 5, xF + (20*i) , yF - 5 );
  }
}

void Football::eraseBall(int offSet)
{

  setcolor(BLACK) // Assuming this is the background color.

  int x = nOffset + 900;
  int y = (HEIGHT / 2);
  int rX = 80;
  int rY = 50;
  setcolor( BLACK );
  setfillstyle( SOLID_FILL, BLACK );
  fillellipse( x, y, rX, rY );

  setcolor( BLACK );

  int xI = nOffset + 860;
  int yI = (HEIGHT / 2);
  int xF = xI;
  int yF = yI;

  // Horizontal Lace on Ball
  line( xI, yI, xF + 80, yF );

  // Vertical Laces on the Ball, starting from the left

  for( int i = 0; i < 5; i++ )
  {
    line( xI + (20*i) , yI + 5, xF + (20*i) , yF - 5 );
  }
}

现在只需在循环中依次调用这些函数:

Football fb = new Football();
int nLoop = 0;

for(nLoop=0; nLoop < 50; nLoop++)
{
  fb.drawBall(nLoop);

  /* The delay value is in milliseconds. 
     Increase it to make the ball animate slower. 
     Decrease it to make the ball animate faster. */
  delay(200); 
  fb.eraseBall(nLoop)
}

答案 1 :(得分:1)

您的drawBall方法需要来自Football类或通过参数的x,y坐标。您粘贴的代码显示硬编码坐标。

您可能需要考虑将球绘制成位图(精灵),然后粘贴位图而不是始终绘制球。大多数图形芯片可以从内存中复制位图并将其显示在屏幕上(“blitting”),比绘制,填充,然后再次绘制更有效。

一旦你有了位图,移动是一个问题:
1.删​​除当前位图 2.绘制位图和新位置 3.延迟。
4.重复。