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;

}


其它成员

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();

}


案例说明:


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之后就会听见音乐,当鼠标点击的时候声音停止了。

时间: 2024-11-07 21:41:49

5.cocos2dx中关于draw绘图,声音和音效,预加载,播放与停止Vs暂停和恢复,音量控制的相关文章

jQ禁止右键点击、隐藏搜索文本框文字、在新窗口中打开链接、检测浏览器、预加载图片、页面样式切换、所有列等高、动态控制页面字体大小、获得鼠标指针的X值Y值、验证元素是否为空、替换元素、延迟加载、验证元素是否存在于Jquery集合中、使DIV可点击、克隆对象、使元素居中、计算元素个数、使用Google主机上的Jquery类库、禁用Jquery效果、解决Jquery类库与其他Javascript类库冲突

1. 禁止右键点击 代码如下: $(document).ready(function(){ $(document).bind("contextmenu",function(e){ return false; }); }); 2. 隐藏搜索文本框文字 代码如下: $(document).ready(function() { $("input.text1").val("Enter your search text here"); textFill($

Cocos2d-x 精灵图片预加载中不会出现重复加载问题

为了应对大量精灵图片的加载问题,cocos2d-x提供了精灵数据的异步预加载机制,这是要是借助于CCTextureCache::addImageAsync函数来实现的. 那么,当使用上述函数多次加载同一个精灵图片文件时,是否会出现加载多次呢?不会的. 让我们来分析一下上述函数的关键部分代码: void CCTextureCache::addImageAsync(const char *path, CCObject *target, SEL_CallFuncO selector) { #ifdef

关于cocos2d-x 与 cocos2d-html5 资源预加载的思考

移动端资源预加载,可以做到需要加载的时候,从本地磁盘加载到内存,当纹理不需要的时候,都是强制清理内存里的纹理占用: cc.TextureCache.getInstance().removeAllTextures(); cc.TextureCache.getInstance().dumpCachedTextureInfo();//test 打印仍然在使用的纹理 cc.TextureCache.purgeSharedTextureCache(); cc.SpriteFrameCache.getIns

史无前例的FireFox奇怪问题:host中的common名称造成css文件无法加载

今天遭遇了一个非常非常奇怪的问题,一个css文件(common.cnblogs.com/Skins/marvin3/green.css),Firefox怎么也无法打开,一直在转圈. 而换成其它浏览器都能正常打开,百思不得其解. 后来,将host换了一个名称,由 common.cnblogs.com 改为 cdn.cnblogs.com (cdn.cnblogs.com/Skins/marvin3/green.css,换成其他名称也可以),问题就解决了. 史无前例的FireFox奇怪问题:host

详解HTML5中rel属性的prefetch预加载功能使用

在HTML5中,有个很有用但常被忽略的特性,就是预先加载(prefetch),它的原理是: 利用浏览器的空闲时间去先下载用户指定需要的内容,然后缓存起来,这样用户下次加载时,就直接从缓存中取出来,效率就快了. 举个例子说明:比如要预先加载某个页面,可以这样: XML/HTML Code <link rel="prefetch" href="http://www.example.com/"> <!-- Firefox --> 但如果是googl

在Fragment中嵌套使用viewpagerindicator切换Fragment返回后出现空白页与FragmentPagerAdapter页面预加载的解决方案

1. 在Fragment中嵌套使用viewpagerindicator切换Fragment返回后出现空白页 先上代码: 1 mAdapter = new OrderAdapter(getChildFragmentManager()); 2 ViewPager pager = (ViewPager) v.findViewById(R.id.pager); 3 pager.setAdapter(mAdapter); 4 5 TabPageIndicator indicator = (TabPageI

cocos2dx loading界面 预加载资源 与 资源释放

预加载图片: 1.CCTextureCache::sharedTextureCache()->addImage("icon.png"); 2.CCTextureCache::sharedTextureCache()->addImageAsync("icon.png",this,callfuncO_selector(MainLayerLoading::loadingCallBack)); 使用加载的缓存图片: CCSprite* sp =CCSprite:

Expo大作战(十一)--expo中的预加载和缓存资产(Preloading &amp; Caching Assets),expo中的图标 (Icon)

简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人修改补充+demo测试的形式,对expo进行一次大补血!欢迎加入expo兴趣学习交流群:597732981 [之前我写过一些列关于expo和rn入门配置的东i西,大家可以点击这里查看:从零学习rn开发] 相关文章: Expo大作战(一)--什么是expo,如何安装expo clinet和xde,xd

Tomcat中的类是怎么被一步步加载的?

前言 了解Tomcat的类加载机制,原来一切是这么的简单. 一.类加载 在JVM中并不是一次性把所有的文件都加载到,而是一步一步的,按照需要来加载. 比如JVM启动时,会通过不同的类加载器加载不同的类.当用户在自己的代码中,需要某些额外的类时,再通过加载机制加载到JVM中,并且存放一段时间,便于频繁使用. 因此使用哪种类加载器.在什么位置加载类都是JVM中重要的知识. 二.JVM类加载 JVM类加载采用:父类委托机制,如下图所示:JVM中包括集中类加载器: BootStrapClassLoade