2013-11-25 2 views
1

Я пытаюсь анимировать футбол, который я нарисовал, используя графический интерфейс borland (BGI). Для определения положения мяча будет использоваться пользовательский ввод. Пока я нарисовал мяч, но не уверен, как написать вторую функцию, которая изменит положение шарика, заданного пользователем.анимация мяча в борландской графике C++

Я только хочу переместить шар в направлении 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 потребности метод х, у координаты либо из Football класса или через аргументы. Код, который вы вставили, показывает жестко закодированную координату.

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

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

Смежные вопросы