--[[ 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(音频测试),布布扣,bubuko.com
Cocos2d-x 3.2 Lua示例CocosDenshionTest(音频测试)
原文地址:http://blog.csdn.net/wwj_748/article/details/38588563