5.cocos2dx中关于draw绘图,声音和音效,预加载,播放与停止Vs暂停和恢复,音量控制
1 draw绘图
头文件 T19Draw.h |
#ifndef __T19Draw_H__ #define __T19Draw_H__ #include "cocos2d.h" #include "TBack.h" USING_NS_CC; class T19Draw:public TBack { public: static CCScene * scene(); CREATE_FUNC(T19Draw); bool init(); void draw(); }; #endif |
T19Draw.cpp |
#include "T19Draw.h" #include "AppMacros.h" CCScene *T19Draw::scene() { CCScene * scene = CCScene::create(); T19Draw * layer = T19Draw::create(); scene->addChild(layer); return scene; } bool T19Draw::init() { TBack::init(); return true; } void T19Draw::draw() { //设置点的尺寸大小 ccPointSize(10); //设置颜色 ccDrawColor4B(255,0,0,0); //做一个点,ccp(100,100)中的值是点的坐标位置 ccDrawPoint(ccp(100,100)); //定义一个点的集合 CCPoint p[] = {ccp(100,200),ccp(100,300),ccp(200,100)}; //开始画点,第二个参数表示点的个数 ccDrawPoints(p, 3); //画一条线段 ccDrawColor4B(0, 255, 0, 0); glLineWidth(5); ccDrawLine(ccp(100,300),ccp(200,100)); //画一个矩形,由对角线的两个点最终生成两个矩形 ccDrawRect(ccp(100,100),ccp(400,300)); ccDrawColor4B(0, 0, 255, 0); CCPoint poly[] = { ccp(150, 100), ccp(200, 150), ccp(300, 10) }; //以上面的三个点画出一个矩形,最后一个false来控制形状是否合并 //第二个参数表示的是点的个数 ccDrawPoly(poly, 3, true); //这里表示话一个圆 ccDrawCircle(ccp(240,160),60,3.14,100,true); } |
运行结果: |
2 声音和音效
一个游戏,如果不加声音会降低整个游戏的吸引力,一些经典的游戏,我们一听到声音,就知道是什么游戏。这就是声音给玩家留下的深刻音效,游戏里面的声音分为两种:北京音乐和音效使用音效引擎
我们可以使用Cocos2d-x自带的CocosDension库来使用声音引擎。CocosDension实现了简单易用的SimpleAudioEngin类,为了使用它,我们只需要引入它的头文件即可:
#include "SimpleAudioEngine.h" using namespace CocosDenshion; |
支持平台与格式
CocosDension支持的音乐格式如下:
平台 |
支持的常见文件格式 |
备注 |
Android |
mp3,mid,oggg,wav |
可以播放android,media,MediaPlayer所支持的所有格式 |
ios |
acc,caf,mp3,wav |
可以播放AVAudioPlayer所支持的所有格式 |
Windows |
mid,mp3,wav |
无 |
CocosDension支持的音效格式如下:
平台 |
支持的常见文件格式 |
备注 |
Android |
aggg,wav |
对wav的支持不完美 |
Ios |
caf,m4a |
可以播放Cocos2d-iphone,CocosDesion所支持的所有格式 |
windows |
mid,wav |
无 |
4 预加载
加载音乐和音效通常是一个耗时间的过程,因此为了防止由加载产生的延时导致实际播放与游戏播放不协调的现象。在播放音效和音乐前,需要预加载音乐文件。
通常我们会在进入场景前调用一下两个方法来预加载文件。
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("audio/start.wav"); SimpleAudioEngine::sharedEngine()->preloadEffect(“audio/onclick.wav”); |
5 播放与停止Vs暂停和恢复
SimpleAudioEngine::sharedEngine()->playBackgroundMusic(“audio/start.wav”); |
bool T19Music::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { SimpleAudioEngine::sharedEngine()->playEffect("audio/onclick.wav"); static bool flag = true; if (flag) { SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); //SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(); } else { SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); //SimpleAudioEngine::sharedEngine()->playBackgroundMusic("audio/start.wav"); } flag = !flag; return true; } |
6 其它成员
volumn范围为[0,1]
//设置音量大小 SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.1f); //获得音量的大小 SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume(); |
7 进入后台或从后台进入
void AppDelegate::applicationDidEnterBackground() { CCDirector::sharedDirector()->stopAnimation(); // if you use SimpleAudioEngine, it must be pause // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); } // this function will be called when the app is active again void AppDelegate::applicationWillEnterForeground() { CCDirector::sharedDirector()->startAnimation(); // if you use SimpleAudioEngine, it must resume here // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); } |
8 案例说明:
T20Music.h |
#ifndef __T20Music_H__ #define __T20Music_H__ #include "cocos2d.h" #include "TBack.h" USING_NS_CC; class T20Music :public TBack { public: static CCScene * scene(); CREATE_FUNC(T20Music); bool init(); virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); }; #endif |
T20Music.cpp |
#include "T20Music.h" #include "AppMacros.h" #include "SimpleAudioEngine.h" using namespace CocosDenshion; CCScene *T20Music::scene() { CCScene *scene = CCScene::create(); T20Music * layer = T20Music::create(); scene->addChild(layer); return scene; } bool T20Music::init() { TBack::init(); //预加载音乐 SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("audio/start.wav"); SimpleAudioEngine::sharedEngine()->preloadEffect("audio/onclick.wav"); SimpleAudioEngine::sharedEngine()->playBackgroundMusic("audio/start.wav"); //设置触摸可以行 setTouchEnabled(true); setTouchMode(kCCTouchesOneByOne); return true; } //通过鼠标事件控制声音的显示和消失 bool T20Music::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { static bool flag = true; SimpleAudioEngine::sharedEngine()->playEffect("audio/onclick.wav"); if (flag) { //SimpleAudioEngine::sharedEngine()->playBackgroundMusic("audio/start.wav"); //暂停播放音乐 SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); } else { //SimpleAudioEngine::sharedEngine()->stopBackgroundMusic("audio/start.wav"); //重新恢复播放音乐 SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); } flag = !flag; //控制音量 SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.1f); SimpleAudioEngine::sharedEngine()->stopAllEffects(); SimpleAudioEngine::sharedEngine()->unloadEffect("audio/start.wav"); return false; } |
运行效果是:当进入这个scene之后就会听见音乐,当鼠标点击的时候声音停止了。 |
5.cocos2dx中关于draw绘图,声音和音效,预加载,播放与停止Vs暂停和恢复,音量控制相关推荐
- 【Elasticsearch】将数据预加载到文件系统缓存中
1.概述 翻译:Preloading data into the file system cache 这是一个专家设置,其细节将来可能会发生变化. 默认情况下,Elasticsearch 完全依赖操作 ...
- cocos2dx 3.3创建新项目 和 VS2012解决方案加载失败问题
cocos2dx 3.3创建新项目 和 VS2012解决方案加载失败问题 参考文章: (1)cocos2dx 3.3创建新项目 和 VS2012解决方案加载失败问题 (2)https://www.cn ...
- Cesium中Clock控件及时间序列瓦片动态加载
前言 前面已经写了两篇博客介绍Cesium,一篇整体上简单介绍了Cesium如何上手,还有一篇介绍了如何将Cesium与分布式地理信息处理框架Geotrellis相结合.Cesium的强大之处也在于其 ...
- spring预加载与懒加载_通过Spring将继承树加载到List中
spring预加载与懒加载 我注意到有趣的Spring功能. 我的一位同事使用它将Spring Bean的整个继承树加载到列表中. 在学习Spring文档时错过了这一点. 让我们来看看Spring b ...
- [html] 在H5中如何预加载音频?
[html] 在H5中如何预加载音频? audio标签默认会预加载 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题
- [html] 说说video标签中预加载视频用到的属性是什么?
[html] 说说video标签中预加载视频用到的属性是什么? 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题
- Metrics_collector还没有添加到共享预加载库(shared_preload_libraries)中
gpcc踩坑 本文最大的锅,最大的坑来了 安装完成之后会报以下错误!你可以完全忽略错误的解决过程直接跳到最后! Metrics_collector还没有添加到共享预加载库(shared_preload ...
- 详解HTML5中rel属性的prefetch预加载功能使用
在HTML5中,有个很有用但常被忽略的特性,就是预先加载(prefetch),它的原理是: 利用浏览器的空闲时间去先下载用户指定需要的内容,然后缓存起来,这样用户下次加载时,就直接从缓存中取出来,效 ...
- Android中关于Volley的使用(二)加载Json数据
前面一篇关于Volley的文章中,我们学习了如何利用ImageRequest去网络中加载图片,那么今天我们就来学习一下如何利用volley去网络中加载Json格式数据,并将其展示在一个ListView ...
最新文章
- redis消息队列写入mysql_redis怎么实现将消息队列持久化到数据库中?
- 第十六界智能车竞赛:这问题怎么越来越多了呢?
- sklearn 岭回归
- dailykt爬取tushare 数据存入本地mysql
- response.setHeader()的用法
- Web Bundles 学习笔记
- java lambda 调用函数_Java lambda函数将如何编译?
- .net p/invoke 异常处理
- 多线程资源共享之同步锁
- sql注入------基于时间延迟benchmark函数注入脚本
- 山东财经大学燕山学院计算机王栋,选修课Photoshop王栋的群谁有
- grasshopper for rhino 6下载_漫谈算法设计与脚本语言(grasshopper, python)
- Python帮助文件下载使用
- Iris数据集免费下载
- 【原】使用IPV6,nbsp;10M/s高速BT互传…
- 【复杂网络】最清晰最准确理解什么是“结构洞(Structural Hole)”?
- (转置矩阵)将一个3x3、4x4矩阵转置后输出
- 网络基础之DNS、网关
- 如何在转换CAD图纸的时候更改背景颜色?
- 游戏:三子棋【 C语言 】
热门文章
- MongoDB数据库(5.mongodb的聚合操作以及mongodb的高级查询2)
- 给书配代码-电力经济调度(3):计及网络安全约束的经济调度模型
- VTK:曲线样条CurveSpline用法实战
- VTK:旋转球体用法实战
- OpenCASCADE可视化:应用交互服务之标准交互式对象类
- boost::mp11::mp_none_of_q相关用法的测试程序
- boost::mp11::mp_from_sequence相关用法的测试程序
- boost::fusion::as_deque用法的测试程序
- boost::describe模块宏BOOST_DESCRIBE_PP_PARSE的测试程序
- GDCM:gdcm::FileStreamer的测试程序