анимация мяча в борлендской графике Stack Overflow

Я пытаюсь оживить футбольный мяч, который нарисовал, используя графический интерфейс 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 );
}
}

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

Другие решения

Ваш drawBall Метод нуждается в координатах x, y от Football класс или с помощью аргументов. Вставленный код показывает жестко запрограммированную координату.

Возможно, вы захотите нарисовать шар в растровое изображение (спрайт), а затем вставить растровое изображение вместо того, чтобы рисовать шарик все время. Большинство графических чипов могут копировать растровое изображение из памяти и отображать его на экране («блицание») более эффективно, чем вы можете нарисовать, заполнить, а затем снова нарисовать.

Если у вас есть растровое изображение, перемещение — это вопрос:
1. Сотрите настоящее растровое изображение.
2. Нарисуйте растровое изображение и новое местоположение.
3. Задержка.
4. Повторите.

1