É comum em diversos jogos ter uma opção na qual o player altera o volume do jogo, isto sem a necessidade de largar o controle ou teclado.
As Engine de jogos permitem manipular informações de saída de áudio, dentre elas o volume que será transmitido, sendo assim neste artigo será explicado como fazer um breve mecanismo para alteração de volume em um layout e aplicar para os demais.
Recomendo que para melhor integridade do seu jogo, faça um backup antes de manipular o som e faça um teste seguindo este exemplo em um projeto separado, depois se tudo ocorrer bem, você aplique ao seu game. Isto pelo fato de que você pode se perder e por conta disso comprometer o seu jogo, mas é claro, a regra não é valida para todos.
Com o Construct aberto crie dois layout contendo dois EventSheet.
No Layout 1, insira os componentes abaixo e altere suas respectivas propriedades.
Componente | Name | Text |
---|---|---|
Slide Bar | slbVolume |
|
Text | txtVolume | 100 |
Button | btnIniciar | Iniciar |
No componente Slide Bar defina as propriedades com as configurações abaixo.
Value | Minimum | Maximum | Step |
---|---|---|---|
10 | 0 | 25 | 1 |
Temos nosso layout como mostra a imagem a seguir.
Insira um componente Audio e um Local Storage no Layout 1.
O componente Audio será o responsável por reproduzir a música nos nossos jogos, em seguida vamos manipular suas propriedades. Já o componente Storage será utilizado para guardar o valor do volume selecionado.
Carregue um arquivo de música para dentro do Construct e no evento System -> On start of Layout defina para iniciar a música (play) e deixar em loop.
Adicione outro evento, mas desta vez o Every Tick (a cada frame ou escala), para ação do evento na propriedade Text do componente txtVolume, defina o valor retornado pelo slbVolume (slbVolume.value).
Crie uma variável global chama de volume e atribua como valor inicial -10.
Defina para a variável dentro do Every Tick o seguinte valor “int(slbVolume.Value) – 20”, neste cabo obtemos o valor da barra de rolagem, subtraímos 20 e por ultimo fazemos um parse para int, ou seja, o valor retornado será um número inteiro (0..1..500..6000).
Dentro do Every Tick, adicione uma nova ação para o componente áudio, na propriedade set máster volume, informe o nome da variável que criamos, note que anteriormente definimos a ela o valor que esta na barra de rolagem. O valor é dado em Decibéis.
Agora vamos manipular as propriedades do Local Storage, mas para isto precisamos entender como ele funciona. Ele basicamente é um recurso de chave valor, onde você define o nome de uma chave e em seguida um valor, para recuperar determinado valor, basta informar o nome da chave, veja um exemplo abaixo.
Chavee | Valor |
---|---|
Chave1 | 100 |
Chave2 | volume |
Chave3 | 5000 |
chave4 | vitoria |
Para definir um valor, usamos o set e para recuperar usamos o get.
Agora que entendemos como isto funciona, dentro do Every Tick, na propriedade Set Item do Local Storage, defina a chave como volume e o valor informe o nome de nossa variável.
Se você seguiu todos os procedimentos explicados anteriormente, temos no Every Tick as informações apresentadas na imagem abaixo.
Se você testar seu jogo agora, poderá ver que já é possível notar que o volume esta sendo alterado, agora o que nos resta é chamar o layout dois e recuperar este valor lá.
Adicione um novo evento para o btnIniciar para o evento On clicked que ocorre quando o botão foi clicado. Adicione agora uma nova ação que chame o layout dois.
Nossos eventos no Event Sheet1 esta finalizado.
No Layout dois, foi criada uma cena para dar maior realismo ao som, como mostra a imagem a seguir.
Agora no Event Sheet no layout dois, crie as ações e eventos conforme mostra a imagem a seguir.
Basicamente quando o layout for carregado, devemos verificar se o item volume existe, se o item existir obtemos o valor através da chave volume e por último, através do evento On item get atribuímos o valor a variável volume criada no Layout 1 em seguida o valor da variável é atribuído a propriedade Set máster volume.
Muito simples, não? Ficamos por aqui, em caso de dúvida deixem nos comentários.
Até a próxima!