Cocos2d-x 3.2 Lua演示样本CocosDenshionTest(音频测试)
 本篇博客介绍Cocos2d-x 3.2中Lua演示样例的音频測试。Cocos2d-x使用SimpleAudioEngine这个类来实现音频的控制,比方播放、暂停、停止等操作。

Lua代码中。使用的是AudioEngine,详细实现能够參考AudioEngine.lua文件。仅仅是把SimpleAudioEngin进行了封装。
演示样例代码:
--[[
CocosDenshionTest.lua
Cocos2d-x 音频支持
]]--
require "AudioEngine"
local EFFECT_FILE = "effect1.wav" local MUSIC_FILE = nil
-- 获取目标平台
local targetPlatform = cc.Application:getInstance():getTargetPlatform()
-- iphone或者ipad
if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_IPAD == targetPlatform) then
MUSIC_FILE = "background.caf" -- caf格式
else
MUSIC_FILE = "background.mp3" -- mp3格式
end local LINE_SPACE = 40 local function CocosDenshionTest()
local ret = cc.Layer:create()
local m_pItmeMenu = nil
local m_tBeginPos = cc.p(0, 0)
local m_nSoundId = 0 -- 測试菜单项
local testItems = {
"play background music",
"stop background music",
"pause background music",
"resume background music",
"rewind background music",
"is background music playing",
"play effect",
"play effect repeatly",
"stop effect",
"unload effect",
"add background music volume",
"sub background music volume",
"add effects volume",
"sub effects volume",
"pause effect",
"resume effect",
"pause all effects",
"resume all effects",
"stop all effects"
} -- 菜单回调方法
local function menuCallback(tag, pMenuItem)
local nIdx = pMenuItem:getLocalZOrder() - 10000
-- play background music
if nIdx == 0 then
AudioEngine.playMusic(MUSIC_FILE, true) -- 播放音乐
elseif nIdx == 1 then
-- stop background music
AudioEngine.stopMusic() -- 停止背景音乐
elseif nIdx == 2 then
-- pause background music
AudioEngine.pauseMusic() -- 暂停音乐
elseif nIdx == 3 then
-- resume background music
AudioEngine.resumeMusic() -- 继续播放音乐
-- rewind background music
elseif nIdx == 4 then
AudioEngine.rewindMusic() -- 循环播放
elseif nIdx == 5 then
-- is background music playing
if AudioEngine.isMusicPlaying () then -- 音乐正在播放
cclog("background music is playing")
else
cclog("background music is not playing")
end
elseif nIdx == 6 then
-- play effect
m_nSoundId = AudioEngine.playEffect(EFFECT_FILE) -- 播放音效
elseif nIdx == 7 then
-- play effect
m_nSoundId = AudioEngine.playEffect(EFFECT_FILE, true) -- 播放音效,第二个參数表示是否循环,true表示循环
elseif nIdx == 8 then
-- stop effect
AudioEngine.stopEffect(m_nSoundId) -- 停止音效
elseif nIdx == 9 then
-- unload effect
AudioEngine.unloadEffect(EFFECT_FILE) -- 不载入音效
elseif nIdx == 10 then
-- add bakcground music volume
AudioEngine.setMusicVolume(AudioEngine.getMusicVolume() + 0.1) -- 添加音量
elseif nIdx == 11 then
-- sub backgroud music volume
AudioEngine.setMusicVolume(AudioEngine.getMusicVolume() - 0.1) -- 减小音量
elseif nIdx == 12 then
-- add effects volume
AudioEngine.setEffectsVolume(AudioEngine.getEffectsVolume() + 0.1) -- 添加音效音量
elseif nIdx == 13 then
-- sub effects volume
AudioEngine.setEffectsVolume(AudioEngine.getEffectsVolume() - 0.1) -- 降低音效音量
elseif nIdx == 14 then
AudioEngine.pauseEffect(m_nSoundId) -- 暂停音效
elseif nIdx == 15 then
AudioEngine.resumeEffect(m_nSoundId) -- 恢复音效
elseif nIdx == 16 then
AudioEngine.pauseAllEffects() -- 暂停全部音效
elseif nIdx == 17 then
AudioEngine.resumeAllEffects() -- 恢复全部音效
elseif nIdx == 18 then
AudioEngine.stopAllEffects() -- 停止全部音效
end
end
-- add menu items for tests
m_pItmeMenu = cc.Menu:create() -- 创建菜单 m_nTestCount = table.getn(testItems)
local i = 1
for i = 1, m_nTestCount do
local label = cc.Label:createWithTTF(testItems[i], s_arialPath, 24)
label:setAnchorPoint(cc.p(0.5, 0.5))
local pMenuItem = cc.MenuItemLabel:create(label) -- 菜单标签
pMenuItem:registerScriptTapHandler(menuCallback) -- 注冊菜单回调方法
m_pItmeMenu:addChild(pMenuItem, i + 10000 -1)
pMenuItem:setPosition( cc.p( VisibleRect:center().x, (VisibleRect:top().y - i * LINE_SPACE) ))
end -- 设置菜单内容大小
m_pItmeMenu:setContentSize(cc.size(VisibleRect:getVisibleRect().width, (m_nTestCount + 1) * LINE_SPACE))
m_pItmeMenu:setPosition(cc.p(0, 0))
ret:addChild(m_pItmeMenu) -- preload background music and effect
AudioEngine.preloadMusic( MUSIC_FILE ) -- 预载入音乐
AudioEngine.preloadEffect( EFFECT_FILE ) -- 预载入音效 -- set default volume
AudioEngine.setEffectsVolume(0.5) -- 设置音效音量
AudioEngine.setMusicVolume(0.5) -- 设置音乐音量 local function onNodeEvent(event)
if event == "enter" then -- 进来时 elseif event == "exit" then -- 退出时
AudioEngine.destroyInstance() -- 销毁对象
end
end -- 注冊层的结点事件
ret:registerScriptHandler(onNodeEvent) local prev = {x = 0, y = 0}
local function onTouchEvent(eventType, x, y)
if eventType == "began" then -- 開始点击
prev.x = x
prev.y = y
m_tBeginPos = cc.p(x, y) -- 開始点击位置
return true
elseif eventType == "moved" then -- 移动事件
local touchLocation = cc.p(x, y) -- 获取触摸的位置
local nMoveY = touchLocation.y - m_tBeginPos.y -- 触摸位置减去開始位置等于移动的距离
local curPosX, curPosY = m_pItmeMenu:getPosition() -- 获取当前菜单的位置
local curPos = cc.p(curPosX, curPosY) -- 当前位置
local nextPos = cc.p(curPos.x, curPos.y + nMoveY) -- 下一个位置 if nextPos.y < 0.0 then
m_pItmeMenu:setPosition(cc.p(0, 0))
end if nextPos.y > ((m_nTestCount + 1)* LINE_SPACE - VisibleRect:getVisibleRect().height) then
m_pItmeMenu:setPosition(cc.p(0, ((m_nTestCount + 1)* LINE_SPACE - VisibleRect:getVisibleRect().height)))
end m_pItmeMenu:setPosition(nextPos)
m_tBeginPos.x = touchLocation.x -- 又一次记录開始位置
m_tBeginPos.y = touchLocation.y prev.x = x
prev.y = y
end
end -- 触摸開始回调方法
local function onTouchBegan(touch, event)
local location = touch:getLocation()
prev.x = location.x
prev.y = location.y
m_tBeginPos = location
return true
end -- 触摸移动的回调方法
local function onTouchMoved(touch, event)
local location = touch:getLocation()
local touchLocation = location
local nMoveY = touchLocation.y - m_tBeginPos.y
local curPosX, curPosY = m_pItmeMenu:getPosition()
local curPos = cc.p(curPosX, curPosY)
local nextPos = cc.p(curPos.x, curPos.y + nMoveY) if nextPos.y < 0.0 then
m_pItmeMenu:setPosition(cc.p(0, 0))
end if nextPos.y > ((m_nTestCount + 1)* LINE_SPACE - VisibleRect:getVisibleRect().height) then
m_pItmeMenu:setPosition(cc.p(0, ((m_nTestCount + 1)* LINE_SPACE - VisibleRect:getVisibleRect().height)))
end m_pItmeMenu:setPosition(nextPos)
m_tBeginPos.x = touchLocation.x
m_tBeginPos.y = touchLocation.y prev.x = location.x
prev.y = location.y
end -- 单点触摸
local listener = cc.EventListenerTouchOneByOne:create()
listener:setSwallowTouches(true)
-- 注冊脚本监听事件
listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
listener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )
local eventDispatcher = ret:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, ret) return ret
end function CocosDenshionTestMain()
cclog("CocosDenshionTestMain")
local scene = cc.Scene:create()
scene:addChild(CocosDenshionTest())
scene:addChild(CreateBackMenuItem())
return scene
end

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Cocos2d-x 3.2 Lua演示样本CocosDenshionTest(音频测试)的更多相关文章

  1. Cocos2d-x 3.2 Lua演示样本 ActionTest(操作测试)

    Cocos2d-x 3.2 Lua演示样本 ActionTest(操作测试) 2014年博文大赛,请投上您宝贵的一票:http://vote.blog.csdn.net/Article/Details ...

  2. Cocos2d-x 3.1.1 Lua演示样例 ActionManagerTest(动作管理)

    Cocos2d-x 3.1.1 Lua演示样例 ActionManagerTest(动作管理) 本篇博客介绍Cocos2d-x的动作管理样例,这个样例展示了Cocos2d-x的几个动作: MoveTo ...

  3. Cocos2d-x 3.1.1 Lua演示样例 ActionEaseTest(动作)

    Cocos2d-x Lua演示样例 ActionEaseTest(动作)   本篇博客介绍Cocos2d-x中的动作,Cocos2d-x为我们提供了丰富的动作接口,以下笔者就具体介绍一下:   本系列 ...

  4. 模式识别 - 处理多个演示样本研究(MIL)特点(matlab)

    处理多个演示样本研究(MIL)特点(matlab) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27206325 多演示样例学习 ...

  5. Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试)

    Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试)  本篇博客介绍Cocos2d-x 3.2Lua演示样例中点击移动的样例,在这个样例你能够得到怎样创建单点触 ...

  6. Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求)

    Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求)     本篇博客介绍Cocos2d-x 3.2Lua演示样例中的XMLHttpRequestTes ...

  7. java注意事项演示 地图产生表 演示样本 来自thinking in java 4 20代码的章

    java注意事项演示 地图产生表 演示样本  来自thinking in java 4 20代码的章 thinking in java 4免费下载:http://download.csdn.net/d ...

  8. Cocos2d-x 3.2 Lua演示样例 AssetsManagerTest(资源管理器)

    Cocos2d-x 3.2 Lua演示样例 AssetsManagerTest(资源管理器) 本篇博客介绍Cocos2d-x 为我们提供的一个类--AssetsManager在Lua中的使用样例,效果 ...

  9. Cocos2d-x 3.1.1 Lua演示样例 ActionsProgressTest(进度条)

    Cocos2d-x 3.1.1 Lua演示样例 ActionsProgressTest(进度条) 本篇博客介绍Cocos2d-x中的进度条动画,进度条涉及以下几个重要的类和方法,笔者来给大家具体解说一 ...

随机推荐

  1. 用java代码实现环圈报数

    环圈报数就是围一圈人,每一次数数数到三的人自动出圈,再接着数, 用数据结构的思想实现 public class Count3Quit {     public static void main(Str ...

  2. linux--档案权限与目录配置

    下面是最近学习档案权限与目录配置的一些知识点总结***博客园-邦邦酱好*** Linux最优秀的地方之一,就在于他的多人多任务环境.而为了让各个使用者具有较保密的档案数据,因此档案的权限管理就变的很重 ...

  3. POJ 2942 Knights of the Round Table - from lanshui_Yang

    Description Being a knight is a very attractive career: searching for the Holy Grail, saving damsels ...

  4. Struts开发问题集锦

    在struts2de 1.6以前版本,都是用<s:datepicker>标签来获取时间,1.8后可以用struts-dojo.plugin里的<sx:datetimepicker&g ...

  5. 阐述php(四) 流量控制

    一个.选择结构 1. 单路分支 <? php if(条件){ 运行一条语句; } ?> 2. 双路分支 <?php if(条件) 运行一条语句; }else 运行一条语句; } ?& ...

  6. 第一章_servlet

    [Servlet与Jsp学习指南] *学习这servlet前.需要下载servlet-api.jar,MyEclipse给自己带来的需求javaEE3.0的天赋足以使用注解获得的版本号servlet ...

  7. OpenGL3D迷宫场景设计

    近期学习用opengl库来构建一个3D场景,以及实现场景漫游.粒子系统等效果.终于算是是做了一个3D走迷宫游戏吧. 感觉近期学了好多东西,所以有必要整理整理. 一 实现效果 watermark/2/t ...

  8. Matlab绘图-很详细,很全面

    强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到 所需图形,这类函数称为高层绘图函数.此外,Matlab还提供 ...

  9. Left Menu抽屉效果ScrollView姿态共存冲突

    我们有一个小项目,需要做主页ScrollView嵌套TableView. 再就是Left与Right抽屉效果. 课前有眼似的,然后完成忘. 非常糟糕的记忆.真应了那句话:好记性不如烂博客. 由于我首页 ...

  10. 【原创】leetCodeOj --- Repeated DNA Sequences 解题报告

    原题地址: https://oj.leetcode.com/problems/repeated-dna-sequences/ 题目内容: All DNA is composed of a series ...