日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【DND图形库】五、按钮控件与音效

發(fā)布時(shí)間:2024/9/30 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【DND图形库】五、按钮控件与音效 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

五、按鈕控件與音效

(甲)按鈕控件

DND.h里能看到有哪些控件,基本上都以靜態(tài)工廠模式創(chuàng)建:

///GUI/// #include "DNDGUI.h" //GUI 控件基類 #include "DNDGUIButtonSpriteScale.h" //ButtonSpriteScale 精靈縮放按鈕 #include "DNDGUIButtonTextColor.h" //ButtonTextColor 文本顏色按鈕 #include "DNDGUIButtonSprite3Text1.h" //ButtonSprite3Text1 3精靈1文本 #include "DNDGUIEditBoxSprite.h" //EditBoxSprite 精靈背景輸入框 #include "DNDGUISwitchSprite2.h" //SwitchSprite 2精靈開(kāi)關(guān) #include "DNDGUISwitchSprite3Color2.h" //SwitchSprite 3精靈2顏色開(kāi)關(guān) #include "DNDGUIButtonSprite3.h" //ButtonSprite 3精靈按鈕 #include "DNDGUISprite9.h" //Sprite9 9妹精靈 #include "DNDGUISliderSprite2.h" //SliderSprite2 2精靈滾動(dòng)條 #include "DNDGUISliderSprite5.h" //SliderSprite5 5精靈滾動(dòng)條 #include "DNDGUIComboBox.h" //ComboBox 下拉框 #include "DNDGUIShadeBox.h" //ShadeBox 旋轉(zhuǎn)技能讀條 //

?下面就以最簡(jiǎn)單的舉例:

ButtonTextColor* _btn;//創(chuàng)建按鈕用的文本 Text* btn_text = canvas->CreateText(L"01", 18); //設(shè)置顯示的內(nèi)容 btn_text->SetString(L"選擇音效"); //創(chuàng)建并設(shè)置三種按鈕狀態(tài)的文本顏色 _btn = ButtonTextColor::Create(btn_text, Color::GREEN, Color::YELLOW, Color::BLUE); //設(shè)置位置 _btn->GetText()->GetCoor()->SetPosition({ 400, 500 });

在幀函數(shù)進(jìn)行繪制和檢測(cè)響應(yīng),在這之前我們需要理解一下音效。

(乙)音效

首先必須在_init函數(shù)里開(kāi)啟音效,通過(guò)Game的sound成員:

sound->SetOpen(true);

加載音效和加載字體文件類似,也需要取個(gè)名字:

sound->Load(L"snd_01", L"D:\\music.wav");//絕對(duì)路徑,只支持wav格式 snd_play(L"snd_01");//播放

不過(guò)我們計(jì)劃讓用戶點(diǎn)擊按鈕,選擇一個(gè)文件來(lái)播放。就需要用到sys->GetChooseFile函數(shù),要正確使用,首先需要定義一個(gè)名字類型說(shuō)明的數(shù)組:

FileNameType types[] = {{ L"波形文件", L"*.wav"}};

這樣只讓用戶選擇wav格式文件,假設(shè)要全部可選,就這樣修改:
?

FileNameType types[] = {{ L"波形文件", L"*.wav"},{ L"所有文件", L"*.*" }};

這樣調(diào)用就會(huì)返回選擇文件的絕對(duì)路徑:

//讓用戶選擇文件 String file_name = sys->GetChooseFile(false, types, _countof(types));

現(xiàn)在讓我們點(diǎn)了按鈕才選擇文件,并且處理失敗:

//按鈕邏輯與繪制 _btn->Run(); //點(diǎn)擊并釋放 if (_btn->IsRelease()) {FileNameType types[] = {{ L"波形文件", L"*.wav"},{ L"所有文件", L"*.*" }};//讓用戶選擇文件String file_name = sys->GetChooseFile(false, types, _countof(types));if (file_name.GetLength()){//成功選擇了debug_msg(file_name);//打印文件路徑static int i = 0;sound->Load(L"snd_" + i, file_name);//加載snd_play(L"snd_" + i++);//播放} }

?如下圖所示,選擇wav文件后就可以播放了:

(丙)完整代碼

#include <DND.h> using namespace DND;const UINT32 GAME_SPR_NUM = 5; class T01 : public Game { public:Sprite* _arrSpr[GAME_SPR_NUM];Text* _txtLT;ButtonTextColor* _btn;T01(){for (auto& iter : _arrSpr)iter = NULL;_txtLT = NULL;}virtual void _update() override{//幀函數(shù)//記錄位置Vector2 pos = _arrSpr[1]->GetCoor()->GetPosition();//計(jì)算位移,這里是1秒鐘移動(dòng)100像素//time->GetRealDelta()返回的是一幀的時(shí)間float dis_dt = 100.0f * time->GetRealDelta();//判斷按鍵是否按下if (input->KeyState(KeyCode::W))pos.b -= dis_dt;if (input->KeyState(KeyCode::S))pos.b += dis_dt;if (input->KeyState(KeyCode::A))pos.a -= dis_dt;if (input->KeyState(KeyCode::D))pos.a += dis_dt;//旋轉(zhuǎn)float r = _arrSpr[1]->GetCoor()->GetRotate();//每秒旋轉(zhuǎn) 四分之一PIfloat r_dt = Math::GetPI<1, 4>() * time->GetRealDelta();if (input->KeyState(KeyCode::Q))r -= r_dt;if (input->KeyState(KeyCode::E))r += r_dt;//縮放float scale = _arrSpr[1]->GetCoor()->GetScale().a;//每秒縮放0.5float scale_dt = 0.5f * time->GetRealDelta();if (input->KeyState(KeyCode::Z))scale -= scale_dt;if (input->KeyState(KeyCode::X))scale += scale_dt;//設(shè)置屬性_arrSpr[1]->GetCoor()->SetPosition(pos);_arrSpr[1]->GetCoor()->SetRotate(r);_arrSpr[1]->GetCoor()->SetScale({scale, scale });_btn->Run();//點(diǎn)擊并釋放if (_btn->IsRelease()){FileNameType types[] = {{ L"波形文件", L"*.wav"},{ L"所有文件", L"*.*" }};//讓用戶選擇文件String file_name = sys->GetChooseFile(false, types, _countof(types));if (file_name.GetLength()){//成功選擇了debug_msg(file_name);static int i = 0;sound->Load(L"snd_" + i, file_name);snd_play(L"snd_" + i++);}}for (UINT32 i = 0; i != GAME_SPR_NUM; ++i){if(_arrSpr[i])_arrSpr[i]->Render();}_txtLT->Render();}virtual void _init() override{//初始化sound->SetOpen(true);sys->LoadFontFile(L"01", L"Data\\Font\\simkai.ttf");_txtLT = canvas->CreateText(L"01", 24);_txtLT->SetString(L"按WASD移動(dòng),QE旋轉(zhuǎn),ZX縮放");_arrSpr[0] = canvas->CreateSprite(0, Quad({}, {64, 64}, true), Color::GREEN);_arrSpr[0]->GetCoor()->SetPosition({ 400, 300 });Image* img = Image::Create(L"Data\\Image\\cat.png");_arrSpr[1] = canvas->CreateSprite(img);_arrSpr[1]->GetCoor()->SetPosition({ 400, 300 });delete img;_arrSpr[0]->GetCoor()->SetParent(_arrSpr[1]->GetCoor());_arrSpr[0]->GetCoor()->SetPosition({ 100, 100 });Text* btn_text = canvas->CreateText(L"01", 18);btn_text->SetString(L"選擇音效");_btn = ButtonTextColor::Create(btn_text, Color::GREEN, Color::YELLOW, Color::BLUE);_btn->GetText()->GetCoor()->SetPosition({ 400, 500 });sys->SetWindowTitle(L"教程01");//設(shè)置窗口標(biāo)題sys->SetWindowStyle(WS_OVERLAPPEDWINDOW);//設(shè)置窗口樣式sys->SetWindowSize({800, 600});//設(shè)置窗口大小為800*600sys->SetWindowCenter();//居中窗口sys->SetWindowShow(true);//顯示窗口time->SetFPS(120);//設(shè)為0以不限制幀數(shù)(默認(rèn)為60)}virtual void _release() override{//結(jié)束for (auto& iter : _arrSpr)DELETE_SPRITE(iter);delete _txtLT;} };T01 g_t01;DNDMain() {DebuggerConsole debug;Debug::SetDebugger(&debug);g_t01.Init();g_t01.EnterLoop();g_t01.Release();//MessageBox(NULL, L"Hello World!", L"標(biāo)題欄", MB_OK); }

?

總結(jié)

以上是生活随笔為你收集整理的【DND图形库】五、按钮控件与音效的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。