我正在尝试使用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 );
}
}
答案 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.重复。