五、按钮控件与音效

(甲)按钮控件

DND.h里能看到有哪些控件,基本上都以静态工厂模式创建:

///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精灵开关
#include "DNDGUISwitchSprite3Color2.h"    //SwitchSprite              3精灵2颜色开关
#include "DNDGUIButtonSprite3.h"      //ButtonSprite              3精灵按钮
#include "DNDGUISprite9.h"                //Sprite9                   9妹精灵
#include "DNDGUISliderSprite2.h"      //SliderSprite2             2精灵滚动条
#include "DNDGUISliderSprite5.h"      //SliderSprite5             5精灵滚动条
#include "DNDGUIComboBox.h"               //ComboBox                  下拉框
#include "DNDGUIShadeBox.h"               //ShadeBox                  旋转技能读条
//

下面就以最简单的举例:

ButtonTextColor* _btn;//创建按钮用的文本
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 });

在帧函数进行绘制和检测响应,在这之前我们需要理解一下音效。

(乙)音效

首先必须在_init函数里开启音效,通过Game的sound成员:

sound->SetOpen(true);

加载音效和加载字体文件类似,也需要取个名字:

sound->Load(L"snd_01", L"D:\\music.wav");//绝对路径,只支持wav格式
snd_play(L"snd_01");//播放

不过我们计划让用户点击按钮,选择一个文件来播放。就需要用到sys->GetChooseFile函数,要正确使用,首先需要定义一个名字类型说明的数组:

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

这样只让用户选择wav格式文件,假设要全部可选,就这样修改:

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

这样调用就会返回选择文件的绝对路径:

//让用户选择文件
String file_name = sys->GetChooseFile(false, types, _countof(types));

现在让我们点了按钮才选择文件,并且处理失败:

//按钮逻辑与绘制
_btn->Run();
//点击并释放
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{//帧函数//记录位置Vector2 pos = _arrSpr[1]->GetCoor()->GetPosition();//计算位移,这里是1秒钟移动100像素//time->GetRealDelta()返回的是一帧的时间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;//旋转float r = _arrSpr[1]->GetCoor()->GetRotate();//每秒旋转 四分之一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;//设置属性_arrSpr[1]->GetCoor()->SetPosition(pos);_arrSpr[1]->GetCoor()->SetRotate(r);_arrSpr[1]->GetCoor()->SetScale({scale, scale });_btn->Run();//点击并释放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移动,QE旋转,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");//设置窗口标题sys->SetWindowStyle(WS_OVERLAPPEDWINDOW);//设置窗口样式sys->SetWindowSize({800, 600});//设置窗口大小为800*600sys->SetWindowCenter();//居中窗口sys->SetWindowShow(true);//显示窗口time->SetFPS(120);//设为0以不限制帧数(默认为60)}virtual void _release() override{//结束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"标题栏", MB_OK);
}

【DND图形库】五、按钮控件与音效相关推荐

  1. Python tkinter - 第五章 按钮控件(Button)属性

    第5章 按钮控件(Button) 5.1 按钮控件介绍 按钮是一个标准的tkinter控件.按钮上可以显示文字或者图片作为提示信息.文字只能使用一种字体以及颜色.按钮的最主要作用是被点击后,可以调用指 ...

  2. 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 编辑 Qt 桌面按钮控件 | 修改按钮文本 | 为按钮添加点击事件 | 系统调用 | 去掉系统调用命令窗口 )

    文章目录 一.添加按钮控件 二.修改按钮文本 三.为按钮添加点击事件 ( 弹出对话框 ) 四.为按钮添加点击事件 ( 打开记事本 ) 五.为按钮添加点击事件 ( 打开计算器 ) 六.去掉系统调用时弹出 ...

  3. PyQt5 第五章 控件(一)

    5.1 按钮控件 5.1.1 复选框 QCheckBox组件有俩状态:开和关,通常跟标签一起使用,用在激活和关闭一些选项的场景 程序展示 本例中,有一个能切换窗口标题的单选框 import sys f ...

  4. 按钮控件里面的间距问题

    一个简单的按钮,里面可能不仅仅是显示文字,让我们去点击,一个按钮控件,子控件可能会有一个图片, 当然,也可能会包含一个图片和文字,里面还嵌套着内部间距等各种问题.(也要值得注意的的是这里的图片不是通过 ...

  5. 在access窗体中加图片_Access实战:一种不用按钮控件就能控制子窗体联动的方法...

    近来宇哥潜心研究Access的设计,多有心得,在此共享一二.Access窗体若要进行控制,是需要通过按钮控件的,我经过自己探索,发现了一种更加简单的方法,也就是不用控件,通过直接点击窗体已有的表格,就 ...

  6. QT旋转按钮控件的实现

    目录 一.实现需求:鼠标hover时旋转 二.实现方式:计时器做动画 三.代码实现 QT旋转按钮控件的实现 一.实现需求:鼠标hover时旋转 需求是:实现类似于WINDOWS下,某些软件窗口关闭按钮 ...

  7. Winform中实现自定义水晶按钮控件(附代码下载)

    场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个用户 ...

  8. C#窗体控件-按钮控件Button

    按钮(Button)控件几乎存在于所有Windows对话框中,是Windows应用程序中最常用的控件之一.按钮控件允许用户通过单击来执行操作.按钮最重要的事件,也是最常用的事件就是Click.当用户单 ...

  9. VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)

    上一节VS2010/MFC编程入门教程中鸡啄米讲了按钮控件Button.Radio Button和Check Box的基本用法,本节就继续讲按钮控件的内容,通过一个实例让大家更清楚按钮控件在实际的软件 ...

最新文章

  1. 开发c s架构java应用程序6_java常见面试题
  2. Java 中如何模拟真正的同时并发请求?
  3. 为KindEditor编辑器中的内容增加样式,使得自定义前台页面显示效果与编辑器效果一致
  4. [js] 渲染树构建、布局及绘制
  5. 今天学习了无序列表和有序列表和使用HTML5创建表格
  6. 用终端命令(Git)合并到Master分支等操作
  7. 电脑数据恢复,哪种方法靠谱?
  8. 消息队列的使用场景和使用技巧
  9. [转载] Python编程之np.argmax()的用法
  10. JVM 字节码指令手册 - 查看 Java 字节码
  11. 计算机声音控制程序,win10电脑利用EarTrumpet音量控制应用程序使用教程 | 专业网吧维护...
  12. 软件测试学习书籍8本【经典推荐】
  13. 以太坊实战篇-创建并运行一个最简单的转账合约
  14. 工作效率低,怎么办?
  15. LaTeX 排版(二)——排版数学公式
  16. 北京大学MOOC 程序设计与算法(三)魔兽世界三(开战)
  17. 液晶显示屏LCD1602
  18. 147_Merkle(默克尔)树简单理解
  19. 2022-2028年中国方便食品行业市场分析预测及发展战略研究报告
  20. 单目相机标定 分辨率1920X1080 利用libuvc

热门文章

  1. redis php操作日志,php-redis笔记
  2. 【小白学习C++ 教程】二十一、C++ 中的STL容器Arrays和vector
  3. 【小白学习C++ 教程】十一、C++类中访问修饰符
  4. R中方差,协方差,相关系数
  5. 博后招募 | 西湖大学工学院蓝振忠深度学习实验室招募博士后
  6. 年末最大AI盛典!2020深度学习开发者峰会报名启动
  7. 融合 MF 和 RNN 的电影推荐系统
  8. 5.3 使用tensorflow搭建GoogLeNet网络 笔记
  9. HDU2176 【 Nim博弈】 SG函数求解
  10. linux上运行项目,发布项目到 Linux 上运行 Core 项目