2017-01-02 1 views
0

내 위젯 전환 버튼과 관련하여 도움이 필요합니다. 나는 사운드 스위치와 음악 스위치를위한 2 스위치 버튼을 만들었지 만 문제는 음악 스위치를 켤 때마다 스위치가 켜져 음악이 켜질 때마다 속도가 빠름을 의미합니다. /떨어져서. 다음 문제는 매번 음악 스위치를 끄면 음악 (mp3 사운드)도 꺼집니다. 는 Heres는 내 코드 :사운드 및 음악 코로나 SDK 용 스위치 버튼 2 개?

--utils.lua

local sounds = {} 
sounds["select"] = audio.loadSound("sounds/select.mp3") 
sounds["score"] = audio.loadSound("sounds/score.mp3") 
sounds["incorrect"] = audio.loadSound("sounds/gameover.mp3") 
sounds["clap"] = audio.loadSound("sounds/clapping.mp3") 
sounds["music"] = audio.loadSound("sounds/gameMusic.mp3") 

M.playSound = function(name) 
    if sounds[name] ~= nil then 
     audio.play(sounds[name]) 
    end 
end 

--Settings.lua

soundSwitchPressed = function(event) 
local switch = event.target 
utils.playSound("select") 


if switch.id == "sound" then 
    if switch.isOn == true then 
     audio.setVolume(0) 
    else 
     audio.setVolume(1) 
    end 
end 
end 

musicSwitchPressed = function(event) 
    local switch = event.target 
    utils.playSound("music") 

    if switch.id == "music" then 
     if switch.isOn == true then 
      audio.setVolume(0) 
     else 
      audio.setVolume(1) 
     end 

    end 
end 



local sound_switch = widget.newSwitch 
    { 
     left = _W-70, 
     top = navBar.y + navBar.height/2 + 44, 
     style = "onOff", 
     id = "sound", 
     x = 800, 
     y = 960, 
     onPress = soundSwitchPressed 
    } 
    sound_switch.xScale, sound_switch.yScale = 3, 3 
    uiGroup:insert(sound_switch) 

    local music_switch = widget.newSwitch 
    { 
     left = _W-70, 
     top = navBar.y + navBar.height/2 + 44, 
     style = "onOff", 
     id = "music", 
     x = 800, 
     y = 1200, 
     onPress = musicSwitchPressed 
    } 

    if audio.getVolume() == 0 then 
     sound_switch:setState({isOn=false, isAnimated=false}) 
     music_switch:setState({isOn=false, isAnimated=false}) 
    else 
     sound_switch:setState({isOn=true, isAnimated=false}) 
     music_switch:setState({isOn=true, isAnimated=false}) 
    end 
end 

enter image description here

답변

1

나는 당신의 방법이 좋은 모르겠어요. 내가 beginer에있어하지만 난 당신이 코로나 문서에서

을 :) 도움이 필요한 약

Sets the volume either for a specific channel, or sets the master volume.

audio.setVolume() 그래서 audio.setVolume() 모든 소리와 음악에 영향을 미친다.

아마도 변수를 사용하여 소리 나 음악을 재생할지 여부를 결정하십시오.

utils.lua

audio.reserveChannels(6) 
... 
sounds["select"] = audio.loadSound("sounds/select.mp3") 
sounds["score"] = audio.loadSound("sounds/score.mp3") 
sounds["incorrect"] = audio.loadSound("sounds/gameover.mp3") 
sounds["clap"] = audio.loadSound("sounds/clapping.mp3") 
sounds["music"] = audio.loadSound("sounds/gameMusic.mp3") 

local channels = {} 
sounds["select"] = 1 
sounds["score"] = 2 
sounds["incorrect"] = 3 
sounds["clap"] = 4 
sounds["music"] = 5 

music = audio.loadStream("backgroundMusic.mp3") 

M.soundOn = true 
M.musicOn = true 

M.playMusic = function() 
    if music ~= nil then 
     audio.play(music, { channel = 6 }) 
    end 
end 

M.playSound = function(name) 
     if sounds[name] ~= nil then 
      audio.play(sounds[name], { channel = channels[name]}) 
     end 
    end 

Settings.lua 당신이 소리를 넣어 코드를 연주 할 때마다

... 
soundSwitchPressed = function(event) 
local switch = event.target 

if utils.soundOn then 
    utils.playSound("select") 
end 

if switch.id == "sound" then 
    if switch.isOn == true then 
     utils.soundOn = true 
    else 
     utils.soundOn = false 
     audio.stop(1) 
     audio.stop(2) 
     audio.stop(3) 
     audio.stop(4) 
     audio.stop(5) 
    end 
end 
end 
... 

musicSwitchPressed = function(event) 
    local switch = event.target 

    if utils.musicOn then 
     utils.playSound("music") 
    end 

    if switch.id == "music" then 
     if switch.isOn == true then 
      utils.musicOn = true 
      utils.playMusic() 
     else 
      utils.musicOn = false 
      audio.stop(6) 
     end 

    end 
end 

if utils.soundOn then 
    utils.playSound("your_sound_effect_name") 
end 

또는

if utils.musicOn then 
    utils.playMusic() 
end 

audio에 대해 자세히 알아보십시오.

+0

Idurniat 씨가 채널을 선언하는 또 다른 방법이 있습니까? 전의. ("선택"). 채널 = 1 -이 메신저의 종류에 오류가 발생했습니다. 오류 : 필드 '선택'(사용자 데이터 값)을 색인하려고 시도합니다. btw 나는이 소리 [ "박수" ] = audio.loadSound ("sounds/clapping.mp3", {channel = 1}) 여전히 오류가 있습니다 ... 아프다. 오디오에 대해 더 자세히 읽어보십시오 ... –

+0

나는 내 대답을 향상 시켰습니다. 이제는 효과가있다. 그것은 틀린 문법입니다'sounds [ "clap"] = audio.loadSound ("sounds/clapping.mp3", {channel = 1})'예를 들어 오디오를 재생, 정지 할 때'channel' 매개 변수를 사용해야합니다. .stop (1)'또는'audio.setVolume (0, {channel = 1})'을 호출합니다. – ldurniat

+0

당신은 정말 큰 도움이 되겠지만 어떻게 내 스위치 버튼의 애니메이션을 저장할 수 있을까요? 뒤로 버튼을 클릭 한 후 내 스위치는 스스로를 저장하지 않을 것입니다. 내 if-else 문 audio.getVolume은 코드를 편집 한 후 애니메이션 전환 버튼을 저장하지 않습니다. 하지만 만약 audio.stop() == nil 시도했다. 여전히 작동하지 않습니다. –