2013-11-25 47 views
1

我想動畫我使用Borland圖形界面(BGI)繪製的足球。用戶輸入將被用來確定球的位置。到目前爲止,我已經畫出了球,但不知道如何編寫第二個函數來改變給定用戶輸入的球的位置。在borland圖形動畫一個球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方法需要的x,y無論從Football類座標或通過參數。您粘貼的代碼顯示硬編碼的座標。

您可能需要考慮將球繪製成位圖(精靈),然後粘貼位圖而不是始終繪製球。大多數圖形芯片可以從內存中複製位圖並將其顯示在屏幕上(「blitting」),比繪製,填充和再次繪製效率更高。

一旦你有一個位圖,移動是一個問題:
1.擦除當前位圖。
2.繪製位圖和新位置。
3.延遲。
4.重複。