【DND图形库】五、按钮控件与音效
生活随笔
收集整理的這篇文章主要介紹了
【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è)要全部可選,就這樣修改:
?
這樣調(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)題。
- 上一篇: 【DND图形库】四、文本绘制和按键检测
- 下一篇: 【DND图形库】一、简介与环境配置