999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于EasyX圖形庫(kù)的多線程繪圖應(yīng)用

2018-01-04 11:06:12張煜昕
電腦知識(shí)與技術(shù) 2018年30期
關(guān)鍵詞:動(dòng)畫

張煜昕

摘要:EasyX 是C++語言進(jìn)行圖形化編程和游戲編程的一種圖形庫(kù),可以用幾何圖形構(gòu)造各種造型及動(dòng)畫,也可以加載圖像文件增強(qiáng)其質(zhì)感。多線程是并發(fā)執(zhí)行的技術(shù),在同一時(shí)間完成多項(xiàng)任務(wù),實(shí)現(xiàn)能夠在同一時(shí)間并行執(zhí)行多個(gè)方法,進(jìn)而提升整體處理性能。通過繪制鐘表指針動(dòng)畫、背景音樂、圖形顏色變換以及文字閃爍等需求,采用EasyX圖形庫(kù)和多線程技術(shù)來完成,其運(yùn)行穩(wěn)定,效果良好。

關(guān)鍵詞:EasyX多線程繪圖

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)30-0226-03

1 模擬鐘表整體設(shè)計(jì)

鐘表整體設(shè)計(jì)包括界面設(shè)計(jì)和程序設(shè)計(jì)兩部分。界面設(shè)計(jì)中體現(xiàn)背景圖案(應(yīng)用putimage方法)、背景音樂(應(yīng)用mciSendString方法)、指針的形狀與顏色(應(yīng)用setlinestyle,setlinecolor方法)、動(dòng)畫的圖形及文字(應(yīng)用setwritemode方法)。程序設(shè)計(jì)主要考慮應(yīng)用多線程技術(shù)來完成各種效果的并行調(diào)用,使得整體效果達(dá)到最佳,程序流程圖如圖1所示。

2 EasyX圖形庫(kù)配置

根據(jù)開發(fā)環(huán)境選擇相應(yīng)的安裝包,下載鏈接:http://www.easyx.cn/downloads/,選擇Setup.hta文件進(jìn)行安裝,系統(tǒng)會(huì)自動(dòng)檢查你所安裝的開發(fā)環(huán)境,你單擊安裝就可以了。若自動(dòng)安裝失敗,則需要手動(dòng)配置,將easyx\include文件夾中的兩個(gè)文件easyx.h和graphics.h拷貝到Visual Studio所在的安裝目錄VC\include文件夾中,再將easyx\lib\amd64文件夾中的easyx.lib和easyxw.lib拷貝到Visual Studio所在的安裝目錄VC\lib\amd64文件夾中,最后將easyx\lib文件夾中的四個(gè)文件(easyx.lib,easyx6.lib,easyxw.lib,easyxw6.lib)拷貝到Visual Studio所在的安裝目錄VC\lib文件夾中,EasyX手動(dòng)配置已完成,就可以使用圖形庫(kù)了。

3 鐘表靜態(tài)界面設(shè)計(jì)

程序需添加包含文件“graphics.h”“conio.h”“math.h”“windows.h”和“Mmsystem.h”。鐘表界面設(shè)計(jì)包括背景加載(圖片和音樂),表盤繪制。程序應(yīng)用“WINMM.LIB”庫(kù)文件,調(diào)用mciSendString()函數(shù)打開、播放mp3格式文件,函數(shù)參數(shù)寫法參考自定義函數(shù)Voice()。表盤界面大小應(yīng)用initgraph()設(shè)置,背景加載應(yīng)用loadimage()和putimage()完成,繪制文字及圖形采用EasyX圖形庫(kù)中的函數(shù)完成,代碼如下所示。

#include

#include

#include

#include

#include

#pragma comment(lib, "WINMM.LIB")

#define PI 3.14159265359

voidDial_plate()

{

initgraph(640, 480);

SetConsoleTitle(L"erwerwe");

// 初始化640 x 480 的繪圖窗口

IMAGE img;

loadimage(&img;, _T("123.jpg"));

putimage(0, 0, &img;);//插入背景圖

// 繪制一個(gè)簡(jiǎn)單的表盤

circle(320, 240, 2);

setcolor(YELLOW);

setfillcolor(LIGHTBLUE);

fillcircle(320, 240, 160);

setcolor(GREEN);

setfillcolor(WHITE);//設(shè)置顏色

fillcircle(320, 240, 60);

outtextxy(260, 310, _T("學(xué)習(xí)使我超快樂"));

//繪制刻度

outtextxy(320, 85, _T("12"));

outtextxy(320 + 150 * sin(PI / 6), 240 - 150 * cos(PI / 6), _T("1"));

outtextxy(320 + 150 * sin(PI / 3), 240 - 150 * cos(PI / 3), _T("2"));

outtextxy(320 + 145 * sin(2 * PI / 3), 240 - 145 * cos(2 * PI / 3), _T("4"));

outtextxy(320 + 140 * sin(5 * PI / 6), 240 - 140 * cos(5 * PI / 6), _T("5"));

outtextxy(320, 380, _T("6"));

outtextxy(320 + 145 * sin(7 * PI / 6), 240 - 145 * cos(7 * PI / 6), _T("7"));

outtextxy(320 + 150 * sin(8 * PI / 6), 240 - 150 * cos(8 * PI / 6), _T("8"));

outtextxy(165, 240, _T("9"));

outtextxy(320 + 150 * sin(10 * PI / 6), 240 - 150 * cos(10 * PI / 6), _T("10"));

outtextxy(320 + 150 * sin(11 * PI / 6), 240 - 150 * cos(11 * PI / 6), _T("11"));

outtextxy(470, 240, _T("3"));

}

void Voice()

{

mciSendString(_T("open Kalimba.mp3 alias bkmusic"), NULL, 0, NULL);

mciSendString(_T("play bkmusic repeat"), NULL, 0, NULL);

}

4 多線程繪圖技術(shù)應(yīng)用

根據(jù)表盤特效要求創(chuàng)建線程函數(shù)ThreadProc_A()和ThreadProc_B()。創(chuàng)建線程函數(shù)必須按相應(yīng)格式定義,返回值類型為DWORD _ stdcall,形參類型為L(zhǎng)PVOID。ThreadProc_A()函數(shù)實(shí)施2秒變化文字顏色,ThreadProc_B()函數(shù)實(shí)施中心圓填充顏色的變化,Draw(int hour, int minute, int second)函數(shù)動(dòng)態(tài)繪制時(shí)針、分針及秒針的位置,時(shí)間通過系統(tǒng)函數(shù)GetLocalTime()獲取,程序運(yùn)行界面如圖2所示,兩個(gè)線程函數(shù)及指針繪制函數(shù)代碼如下。

DWORD _stdcallThreadProc_A(LPVOID lpParameter)

{ while (true)

{

if (flag)

{ settextcolor(BLUE);

flag = false;

}

else

{

settextcolor(YELLOW);

flag = true;

}

outtextxy(260, 330, _T("西安思源學(xué)院"));

Sleep(2000);

}

}

DWORD _stdcallThreadProc_B(LPVOID lpParameter)

{ boolean flag1=true;

while(true)

{ if (flag)

{ setfillcolor(RED);

fillcircle(320, 240, 60);

flag = false;

}

else

{ setfillcolor(WHITE);

fillcircle(320, 240, 60);

flag = true;

}

Sleep(500);

}

}

void Draw(int hour, int minute, int second)

{

double a_hour, a_min, a_sec; // 時(shí)、分、秒針的弧度值

intx_hour, y_hour, x_min, y_min, x_sec, y_sec; // 時(shí)、分、秒針的末端位置

intxh, yh, xm, ym, xs, ys;// 時(shí)、分、秒針長(zhǎng)出來的部分

// 計(jì)算時(shí)、分、秒針的弧度值

a_sec = second * 2 * PI / 60;

a_min = minute * 2 * PI / 60 + a_sec / 60;

a_hour = hour * 2 * PI / 12 + a_min / 12;

// 計(jì)算時(shí)、分、秒針的末端位置

x_sec = 320 + (int)(120 * sin(a_sec));

y_sec = 240 - (int)(120 * cos(a_sec));

x_min = 320 + (int)(100 * sin(a_min));

y_min = 240 - (int)(100 * cos(a_min));

x_hour = 320 + (int)(70 * sin(a_hour));

y_hour = 240 - (int)(70 * cos(a_hour));

xh = 320 - (int)(25 * sin(a_hour));//計(jì)算長(zhǎng)出部分的端點(diǎn)坐標(biāo)

yh = 240 + (int)(25 * cos(a_hour));

xm = 320 - (int)(20 * sin(a_min));

ym = 240 + (int)(20 * cos(a_min));

xs = 320 - (int)(15 * sin(a_sec));

ys = 240 + (int)(15 * cos(a_sec));

// 畫時(shí)針

setlinestyle(PS_SOLID, 10, NULL);

setlinecolor(WHITE);

line(320, 240, x_hour, y_hour);

line(320, 240, xh, yh);

// 畫分針

setlinestyle(PS_SOLID, 6, NULL);

setlinecolor(LIGHTGRAY);

line(320, 240, x_min, y_min);

line(320, 240, xm, ym);

// 畫秒針

setlinestyle(PS_SOLID, 2, NULL);

setlinecolor(RED);

line(320, 240, x_sec, y_sec);

line(320, 240, xs, ys);

}

void main()

{

Dial_plate();

Voice();

CreateThread(NULL,0,ThreadProc_A,NULL,0,NULL);

CreateThread(NULL,0,ThreadProc_B,NULL,0,NULL);

// 設(shè)置XOR 繪圖模式

setwritemode(R2_XORPEN); // 設(shè)置XOR 繪圖模式

// 繪制表針

SYSTEMTIME ti; // 定義變量保存當(dāng)前時(shí)間

while (!_kbhit()) // 按任意鍵退出鐘表程序

{

GetLocalTime(&ti;); // 獲取當(dāng)前時(shí)間

Draw(ti.wHour, ti.wMinute, ti.wSecond); // 畫表針

Sleep(1000); // 延時(shí)1

Draw(ti.wHour, ti.wMinute, ti.wSecond); // 擦表針

}

closegraph(); // 關(guān)閉繪圖窗口

}

主函數(shù)順序調(diào)用Dial_plate()、Voice()完成靜態(tài)界面展示,緊接著啟動(dòng)兩個(gè)線程,分別啟動(dòng)線程函數(shù)ThreadProc_A()和ThreadProc_B(),實(shí)現(xiàn)背景顏色的變化。應(yīng)用_kbhit()函數(shù)判斷是否有按鍵事件發(fā)生,若沒有,獲取系統(tǒng)時(shí)間,間隔一秒繪制時(shí)針、分針和秒針,若有單擊事件,程序退出。

5 結(jié)束語

EasyX圖形庫(kù)是實(shí)現(xiàn)復(fù)雜圖形展示、模擬動(dòng)畫的利器,它縮短程序開發(fā)的周期,增強(qiáng)程序的渲染程度,減少程序員的編碼量,圖形庫(kù)配置簡(jiǎn)單,是VS集成開發(fā)環(huán)境很好的圖形庫(kù),EasyX圖形庫(kù)有很豐富的參考資料,值得我們掌握。要實(shí)現(xiàn)多個(gè)獨(dú)立的動(dòng)畫效果,采用多線程技術(shù),創(chuàng)建多線程來實(shí)現(xiàn)也是不錯(cuò)的選擇。

參考文獻(xiàn):

[1] 宋雅娟,邊晶.基于easyX動(dòng)畫案例開發(fā)導(dǎo)向的C語言程序設(shè)計(jì)課程教學(xué)方法研究[J].長(zhǎng)春大學(xué)學(xué)報(bào),2018,28(06):111-115+119.

[2] 趙敏,龐蕊.基于EasyX圖形庫(kù)的C語言課程改革研究與實(shí)踐[J].電腦知識(shí)與技術(shù),2015(32).

[3] 孫經(jīng)緯,孫廣中,詹石巖,等.SA*:一種多線程路徑規(guī)劃算法[J].地球信息科學(xué)學(xué)報(bào),2018,20(06):753-761.

[4] 李琳.探討C++編程中避免代碼冗余的技巧[J].電腦知識(shí)與技術(shù),2017,13(32):101-102.

【通聯(lián)編輯:朱寶貴】

猜你喜歡
動(dòng)畫
我們的“動(dòng)畫偶像”
Clifford hits the big screen
做個(gè)動(dòng)畫給你看
動(dòng)畫發(fā)展史
Mg動(dòng)畫在慕課中的應(yīng)用及其制作
我的動(dòng)畫夢(mèng)
文苑(2019年22期)2019-12-07 05:28:56
好萊塢動(dòng)畫與中國(guó)動(dòng)畫對(duì)比
流行色(2019年7期)2019-09-27 09:33:28
動(dòng)畫批評(píng)融入動(dòng)畫教育的思考
新聞傳播(2018年3期)2018-05-30 07:01:39
暖心動(dòng)畫:最好的禮物
我是動(dòng)畫迷
主站蜘蛛池模板: 狠狠做深爱婷婷综合一区| 国产福利2021最新在线观看| 欧美视频二区| 77777亚洲午夜久久多人| 色综合中文| 国产av剧情无码精品色午夜| 久久视精品| 亚欧美国产综合| 久久黄色一级视频| 午夜免费视频网站| 国产成人综合在线观看| 亚洲自偷自拍另类小说| 综1合AV在线播放| 青草午夜精品视频在线观看| 免费看久久精品99| 色老二精品视频在线观看| 欧美第九页| 成年人国产网站| 成人福利在线观看| 日本在线欧美在线| 人妻出轨无码中文一区二区| 午夜精品影院| 激情网址在线观看| 曰AV在线无码| 不卡无码h在线观看| av在线人妻熟妇| 在线无码av一区二区三区| 五月婷婷欧美| 最新日韩AV网址在线观看| 亚洲国产欧美自拍| 91成人精品视频| 国产成人91精品| 日韩精品毛片人妻AV不卡| 91麻豆国产在线| 免费人成网站在线观看欧美| 国产一国产一有一级毛片视频| 国产在线观看成人91| 国内熟女少妇一线天| 992tv国产人成在线观看| 黄色网址手机国内免费在线观看| 久久国产亚洲欧美日韩精品| 伊人成人在线| 特级精品毛片免费观看| 美女毛片在线| 国产免费久久精品99re不卡| A级全黄试看30分钟小视频| 国产网站免费| 國產尤物AV尤物在線觀看| 五月婷婷亚洲综合| 91麻豆精品国产91久久久久| 天天综合亚洲| 国产成人精品2021欧美日韩| 黄色片中文字幕| AV熟女乱| 欧美一级高清片欧美国产欧美| 女人18毛片一级毛片在线 | 亚洲美女一级毛片| 国产在线无码av完整版在线观看| 欧洲极品无码一区二区三区| 国产自在线播放| 欧美日韩久久综合| 91香蕉视频下载网站| 97在线免费| 国产精品亚洲一区二区三区z| 看看一级毛片| 国产呦精品一区二区三区下载 | 精品国产免费人成在线观看| 亚洲国产91人成在线| 丁香五月激情图片| 伊人久久久久久久| 亚洲人成色77777在线观看| 日韩无码视频专区| 国产人人乐人人爱| 一级毛片免费播放视频| 国产精品999在线| 伊人成人在线| 网友自拍视频精品区| 欧美日韩午夜| 国产凹凸视频在线观看| 日本不卡免费高清视频| 国产成人精品亚洲日本对白优播| 亚洲综合婷婷激情|