两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

再上一個例子當(dāng)中,我們可以讓小球無限的運動反彈,細心的同學(xué)再修改代碼時候可能會發(fā)現(xiàn),當(dāng)我們把間隔時間縮短(如Sleep(5))讓小球運動變快的時候,會發(fā)現(xiàn)小球運動過程中的閃爍比較明顯,似乎看著有些不夠細膩。


這就是畫圖本身刷新幀率導(dǎo)致的,由于easyX每次繪制圖片都會有開銷,當(dāng)間隔太短,就會出現(xiàn)延遲,產(chǎn)生這種問題。那么解決辦法也是有的,easyX提供了批量繪制的函數(shù),即將每一次繪圖相關(guān)的操作之后可以不立馬執(zhí)行,而是等需要顯示的時候一次性繪圖顯示

void BeginBatchDraw(); //開始批量繪圖。執(zhí)行后,任何繪圖操作都將暫時不輸出到繪圖窗口上
                        //直到執(zhí)行 FlushBatchDraw 或 EndBatchDraw 才將之前的繪圖輸出。
void FlushBatchDraw();   //開始將前面未繪制的圖形一次性繪制
void EndBatchDraw();  //結(jié)束批量繪圖


這三個函數(shù)我們將BeginBatchDraw()放到循環(huán)開始,EndBatchDraw();放到循環(huán)結(jié)束,F(xiàn)lushBatchDraw()放到繪圓之后就可以減少這種閃爍的情況。

完整代碼如下:

//彈球游戲
//www.sztianhecheng.cn
#include <graphics.h>        // 引用圖形庫頭文件
#include <conio.h>
 
#define WIDTH 640
#define HIGH 480
#define R 10
int main()
{
    int i;
	int Vx=5,Vy=5;
    int x=WIDTH/2,y=HIGH/2;                //表示小球的圓心坐標(biāo)
    initgraph(WIDTH, HIGH);    // 創(chuàng)建繪圖窗口,大小為 640x480 像素
    BeginBatchDraw();
	while(1)
    {  
        //繪制小球圖案
        setfillcolor(GREEN);   
        fillcircle(x,y,R);
		FlushBatchDraw();
        Sleep(5);
        //原位置擦除小球圖案
        setcolor(BLACK);
        setfillcolor(BLACK);
        fillcircle(x,y,R);
        
        x=x+Vx;
        y=y+Vy;
		if(x<=R || x>=WIDTH-R)
			Vx=-Vx;
		if(y<=R || y>=HIGH-R)
			Vy=-Vy;
    }
    EndBatchDraw();
    getch();                // 按任意鍵繼續(xù)
    closegraph();           // 關(guān)閉繪圖窗口
    return 0;
}


運行后參考效果:

小球碰撞優(yōu)化后


請大家參考并嘗試運行、觀察比對效果~

點贊(1)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運行等待時間)