熟悉xact的都知道一个cue可以对应多个sound。在播放某个cue的时候xact会按照每个sound播放概率进行选择某个sound然后进行下面的播放。

在这里简单的使用rand进行一个模拟通过概率选择某一项的实现。

假设有四个sound对应的概率分别为:

A——%20

B——%40

C——%10

D——%30

假设100%概率的话,可以简单的指定0-100对应上面的每项的概率。

A————对应100内的(0-19)20%

B————对应100内的(20-59)40%

C————对应100内的(60-69)10%

D————对应100内的(70-99)30%

这里使用rand()所求得出的概率尽管不能绝对的和上面类似20%这样精确,但基本上是可以做到按照给定的概率做出相应的选择的。

下面是测试代码:

void  main()
{int ia(0),ib(0),ic(0),id(0);for(int i = 0;i<100;i++){int n = rand() % 100;if(n<=19){ia++;cout << "A"<<endl;}else if(n<=59){ib++;cout << "B"<<endl;}else if(n<=69){ic++;cout << "C"<<endl;}else{id++;cout << "D"<<endl;}}cout << "A=%"<<ia<<endl;cout << "B=%"<<ib<<endl;cout << "C=%"<<ic<<endl;cout << "D=%"<<id<<endl;system("pause");}

今天在实际实现的时候发现了一些小问题,例如在使用rand()的时候,如果只获取一次的话,那它第一次执行的值永远是相同的,所以需要修改下逻辑。还有就是有可能让你通过概率选择的个数不固定,所以这些都是要考虑的范围。

下面是修正版测试代码:

struct stSound
{string Name;int    weight;
}string GetSelectName(vector<stSound> *vecSound)
{int sum = 0;int ia = 0;vector<int> vecTemp;for(int i =0;i<vecSound.size();i++){sum += vecSound.at(i).weight;}for(int i =0;i<vecSound.size();i++){ia += ((vecSound.at(i).weight)*100) / sum;int nRange = ia;vecTemp.push_back(nRange);}srand((unsigned int)time(0));//解决rand()执行第一次值都相等的问题int iVlau = rand()%100;for(int i = 0;i<vecTemp.size();i++){//解决通过概率选择的个数不固定的问题if(iVlau == vecTemp.at(i)){return vecSound.at(i).Name;}}return NULL;
}

效率上感觉不是很好,不过基本满足通过每项的权重计算概率,然后按照概率进行选择某一项了。

转载于:https://www.cnblogs.com/wainiwann/archive/2013/05/28/3103359.html

游戏中按概率播放某个音效简单c++实现相关推荐

  1. Ruby‘s Adventrue游戏制作笔记(十四)Unity播放游戏音效

    Ruby's Adventrue游戏制作笔记(十四)Unity播放游戏音效 前言 一.创建背景音乐 二.创建新的脚本 三.在其他需要播放的所有脚本中进行操作 四.给敌人添加音效 五.给玩家添加移动音效 ...

  2. Unity中UGUI实现点击改按钮播放一个音效

    项目开发完了,发现了一个问题,虽然不是什么严重的问题不影响游戏和谐,但是这个再用户体验上真的不是很好,什么问题呢,就是我们的按钮统一没有点击音效,这就很尴尬,所以要添加一下,虽然不是什么很难的功能,但 ...

  3. mp4 android自动播放,Android 使用VideoView播放MP4的简单实现

    使用VideoView播放MP4 播放示例 实现简单的播放功能,播放手机本地的MP4文件.不依赖任何第三方框架,不添加任何防腐剂. 添加一个系统自带的控制条. 申请权限 读取存储中的MP4文件 准备布 ...

  4. java播放器使用教程_java 实现音乐播放器的简单实例

    java 实现音乐播放器的简单实例 实现效果图: 代码如下 package cn.hncu.games; import java.applet.Applet; import java.applet.A ...

  5. boost::math模块计算二项式随机变量的概率和分位数的简单示例

    boost::math模块计算二项式随机变量的概率和分位数的简单示例 实现功能 C++实现代码 实现功能 boost::math模块计算二项式随机变量的概率和分位数的简单示例 C++实现代码 #inc ...

  6. Android之播放一首简单的音乐

    1.首先,创建一个项目,名为Mp3Test,创建完之后打开res目录下的layout下的activity_main.xml文件,打开src下的MainActivity.java文件,首先,先把布局文件 ...

  7. 图片播放器 简单使用

    (1)前台_客户端:     var focus_width=800;//图片宽     var focus_height=600;//图片高     var text_height=20;//字高 ...

  8. java音乐播放器视频_java 实现音乐播放器的简单实例

    java 实现音乐播放器的简单实例 实现效果图: 代码如下 package cn.hncu.games; import java.applet.Applet; import java.applet.A ...

  9. android 播放静态mp4,Android 使用VideoView播放MP4的简单实现

    使用VideoView播放MP4 播放示例 实现简单的播放功能,播放手机本地的MP4文件.不依赖任何第三方框架,不添加任何防腐剂. 添加一个系统自带的控制条. 申请权限 读取存储中的MP4文件 准备布 ...

  10. iOS开发——播放系统音效、自定义音效

    播放系统音效.自定义音效工具类 需求大致分为三种: 1.震动 2.系统音效(无需提供音频文件) 3.自定义音效(需提供音频文件) 我的工具类的封装: // // WQPlaySound.h // WQ ...

最新文章

  1. python3文件下载-python3获取文件中url内容并下载代码实例
  2. emoji隐藏表情_除了TouchBar可以快捷输入Emoji表情 这个快捷键也能做到
  3. 程序员应该具备的能力
  4. win10计算机本地无法连接,win10无法连接到这个网络怎么办_win10无法连接到这个网络如何解决...
  5. javacv入门指南:序章_建立开放文化的循序渐进指南
  6. oracle导出自增设置,oracle008:oracle自增,自适应,数据闪回,导入导出
  7. hnu 暑期实训之最少钱币数
  8. 我眼中的Visual Studio 2010架“.NET研究”构工具
  9. 习题:交换一组数据的位置
  10. Session的常用场景
  11. 《算法分析》——布线问题
  12. 论文|Jointly Pre-Training Transformers on Unpaired Images and Text
  13. 手机语言 Symbian 术语表
  14. 小爱同学语音API(不需要小米账号)
  15. .Net Framework 0x800b0109 -已处理证书链,但是在不受信任提供程序信任的根证书中终止。
  16. Cython基础--Cython的函数
  17. 计算机c盘那个是系统文件夹,C盘有哪些文件可以删除?可以手动删除的几个C盘中的文件夹...
  18. 深圳打卡(四) 红树林与深圳湾公园
  19. selenium实战 登录后菜单作业分享(白月黑羽网站selenium自动化学习)
  20. php7支持画,画一多边形并填充 - PHP 7 中文文档

热门文章

  1. python - break和continue
  2. GIT的使用中的问题处理
  3. [android] android下文件访问的权限
  4. VMware VirtualBox共存时桥接注意
  5. 汇编语言基础之二 - 各种寻址和过程进出简介
  6. java.lang.RuntimeException: Package manager has died
  7. [数据结构]树状数组详解
  8. nodejs后台系列--第四篇--koa
  9. cefsharp.core.dll找不到指定模块_DeepFaceLab错误:DLL Load failed 找不到指定模块!
  10. python爬虫定时运行_python 爬虫 定时计划任务