Я пытаюсь оживить футбольный мяч, который нарисовал, используя графический интерфейс 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 );
}
}
Анимации в 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)
}
Ваш drawBall
Метод нуждается в координатах x, y от Football
класс или с помощью аргументов. Вставленный код показывает жестко запрограммированную координату.
Возможно, вы захотите нарисовать шар в растровое изображение (спрайт), а затем вставить растровое изображение вместо того, чтобы рисовать шарик все время. Большинство графических чипов могут копировать растровое изображение из памяти и отображать его на экране («блицание») более эффективно, чем вы можете нарисовать, заполнить, а затем снова нарисовать.
Если у вас есть растровое изображение, перемещение — это вопрос:
1. Сотрите настоящее растровое изображение.
2. Нарисуйте растровое изображение и новое местоположение.
3. Задержка.
4. Повторите.