MusicPlayer 音乐播放器
MusicPlayer
是音乐播放器,它可以方便地控制游戏中的音乐。
播放音乐前,需要用MusicPlayer::preload
函数预加载音乐文件。对于每个音乐文件来说,这个函数只需要运行一次。
// 预加载音乐文件
MusicPlayer::preload("音乐文件名.wav");
添加音乐文件后,可以用 MusicPlayer::play
函数播放这个音乐。
// 播放音乐文件
MusicPlayer::play("音乐文件名.wav");
// 播放音乐文件,并循环 3 次
MusicPlayer::play("音乐文件名.wav", 3);
// 播放音乐文件,并循环播放
MusicPlayer::play("音乐文件名.wav", -1);
MusicPlayer
类的 play
、pause
、resume
、stop
这四个函数分别控制音乐的播放、暂停、继续、停止。
音乐对象的使用
另外,调用 MusicPlayer::preload
函数时,函数会返回一个音乐对象。
// 获取音乐对象
auto music = MusicPlayer::preload("音乐文件名.wav");
music 是一个 Music
类型的指针,Music::play
函数用来播放这个音乐。
music->play();
Music::play
函数可以指定循环播放次数(默认为 0),如果这个次数为 -1,它将循环播放。
music->play(-1); // 循环播放音乐
Music
类的 play
、pause
、resume
、stop
这四个函数分别控制音乐的播放、暂停、继续、停止。
需要注意的是,MusicPlayer::preload
函数可能返回空指针,所以使用它时应进行判断。
// 获取音乐对象
auto music = MusicPlayer::preload("音乐文件名.wav");
// 判断指针是否为空
if (music)
{
// 播放音乐
music->play();
}
Timer 定时器
定时器可以每隔一段时间自动执行一次指定的函数,使用定时器之前,应先写一个函数,让定时器去执行它。
// 写一个移动精灵的函数
void MoveSprite()
{
// 将精灵向右方移动 1 像素
sprite->movePosX(1);
}
然后创建一个定时器,让它每秒执行 MoveSprite 函数,这样精灵就会不断向右方移动。
// 创建定时器,它每 1 秒执行一次 MoveSprite 函数
Timer::add(MoveSprite, 1.0);
这个定时器永远不会停下来,除非你在某个地方调用了它的stop
函数。
也可以使用lambda函数来创建定时器:
Timer::add([=]() {
// 将精灵向右方移动 1 像素
sprite->movePosX(1);
}, 1.0);
查看更多关于 Lambda 函数和回调函数的内容
Timer::add()
函数的第三个参数可以指定定时器的执行次数。
// 每 0.5 秒执行一次,且执行 5 次后结束
Timer::add(MoveSprite, 0.5f, 5);
如果你创建了一个不会停止的定时器,那么切换场景后它仍在运行,所以你需要注意何时停止定时器。
Timer::add()
的第四个参数可以给定时器命名,有了名称的定时器可以管理其启动和暂停。
// 定时器名称为 move_timer
Timer::add(MoveSprite, 0.5f, 5, "move_timer");
Timer
可以控制全局的定时器,例如使用下面的代码停止一个指定的定时器
Timer::stop("move_timer"); // 停止所有名称为 move_timer 的定时器
Random 随机数
Random
类用于获取随机数,Random::range
函数可以获取任意数值类型在任意范围内的随机数,如下所示
// 获得一个 [1, 3] 范围内的整形随机数
int num1 = Random::range(1, 3);
// 获得一个 [1, 3] 范围内的浮点型随机数
float num2 = Random::range(1.0f, 3.0f);
Data 数据存储
Data
可以方便地把数据保存到本地,它支持保存int
、float
、String(字符串)
三种类型的数据。下面是一段示例代码
// 保存数据到本地
void Data::saveInt("data1", 2); // 保存 int 型的值
void Data::saveDouble("data2", 2.2f); // 保存 float 型的值
void Data::saveString("data3", "test"); // 保存 字符串 型的值
保存的数据并不是加密的。
函数的第一个参数表示这个数据的关键字,你可以根据关键字重新取出数据
// 读取
int data1 = Data::getInt("data1", 1); // 获取 int 型的值
float data2 = Data::getDouble("data2", 1); // 获取 float 型的值
String data3 = Data::getString("data3", ""); // 获取 字符串 型的值
函数的第二个参数指定了关键字不存在时,函数默认的返回值。
保存的数据不是在程序目录下,而是保存在了系统的 Appdata\Local
目录下。
为了保证你的数据不被其他游戏覆盖,你应该在保存数据前设置独一无二的 AppName
。
查看更多关于 AppName 的内容