O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Como criar uma Barra no menu

Iniciado por SoyeR, 22/05/2018 às 07:12

22/05/2018 às 07:12 Última edição: 26/05/2018 às 11:00 por Corvo
Gostaria de saber como criar uma barra no menu parecida com a de HP só que com os valores de uma variavel, dai ela enche e diminui de acordo com essa variavel e que eu possa escolher a cor.





Tem como postar o código que já produziu para damos uma olhada?

Eis o problema não sei nem por onde começar.
To criando uma mecanica onde a depender das escolhas do usuario e dos eventos que acontecem modifiquem uma variavel. Até aqui blz.
Quero fazer o jogador poder ver quanto ele tem a partir do menu.
eu sei como colocar na tela de jogo mas não queria poluir com esse tipo de informação.





Você usa algum plugin que modifique o menu padrão?

Rapaz, eu nunca mexi com plugins, mas, como isso é algo simples, se ninguém mais aparecer, depois vou tentar fazer pra tu.


Citação de: Skyloftian online 23/05/2018 às 15:55
Você usa algum plugin que modifique o menu padrão?

Rapaz, eu nunca mexi com plugins, mas, como isso é algo simples, se ninguém mais aparecer, depois vou tentar fazer pra tu.

To usando o do Yanfly Main Menu Manager





Citação de: SoyeR online 24/05/2018 às 06:53
[...] To usando o do Yanfly Main Menu Manager
Devido à presença deste corpo indevido, não sei se o que faremos dará certo. Brincadeira. Ou não.

O primeiro passo seria decidir onde ela ficará dentro do menu. Estou partindo do pressuposto que ela ficará dentro de alguma janela do menu principal, certo? Isso facilita muito pois as janelas já possuem uma função que desenha uma barrinha, a mesma que é utilizada para desenhar a vida e magia do personagem. Por se tratar de uma função das janelas, obviamente ela estará no rpg_windows, é só dar um Ctrl+ F em Window_Base.prototype.drawGauge.

Window_Base.prototype.drawGauge = function(x, y, width, rate, color1, color2) {
    var fillW = Math.floor(width * rate);
    var gaugeY = y + this.lineHeight() - 8;
    this.contents.fillRect(x, gaugeY, width, 6, this.gaugeBackColor());
    this.contents.gradientFillRect(x, gaugeY, fillW, 6, color1, color2);
};


Os argumentos dessa função são: x para a coordenada dentro da janela onde a barra irá começar, horizontalmente; y a coordenada vertical para o mesmo propósito que a anterior; width é a largura da barra; rate é o quanto da barrinha será preenchida; color1 e color2 são as cores. Como pode ver nas barras de vida e magia, as barras possuem um degradê, que, caso tu opte por não utilizá-lo, pode deixar as duas cores iguais.

Então você já tem tudo que precisa para criar uma barrinha, só resta chamar essa função com os argumentos que desejar. E onde fazer isso?

Para caráter de exemplo, tu poderia fazer na Window_MenuStatus. Se fosse utilizar somente um personagem, essa barrinha poderia ficar abaixo dos dado dele. Nesse caso, a barrinha não sofrerá alteração enquanto o jogador estiver no menu, logo, ela não precisa de um update para ser atualizada constantemente. Então o ideal seria desenhar ela junto com tudo que é desenhado no começo, na função initialize dessa janela, porém, ela é uma janela de seleção. Este tipo de janela usa muito a função refresh, para atualização de suas opções selecionáveis conforme o jogador manuseia o menu, então teremos que desenhar a barra pós a execução desta função, uma vez que ela limpa a janela para redesenhar as opções. Se fizermos a barrinha antes, ela será apagada nesse refresh.

O Window_MenuStatus.prototype.refresh é somente herdado da classe mãe, a Window_Selectable, então tu não vai achar ele (imagino eu). Tu terá que redigir essa função com o cuidados de não substituir o que ela já faz, somente adicionando o que deseja, e fazemos isso por meio de aliases. Vale a pena procurar e estudar sobre esse carinha, ele é a solução de muitas incompatibilidades sobre códigos.

var Window_MenuStatus_prototype_refresh_plus = Window_MenuStatus.prototype.refresh;
		Window_MenuStatus.prototype.refresh = function() {
		Window_MenuStatus_prototype_refresh_plus.call(this);
};


Primeiro guardamo a função original, que não está visível lá, como falei, mas existe, só é idêntica à da classe mãe. Em seguida abrimos a função normalmente, porém, desta vez ela irá executar os comandos que nós colocarmos. O porém é que, antes de colocarmos os comandos que queremos, temos que utilizar a variável que acabamos de criar para chamar a função original. Vê? Assim não perdemos a função original, todos códigos que precisam dela continuarão funcionando, e ainda adicionamos o que queremos.

E vamos adicionar logo pós o Window_MenuStatus_prototype_refresh_plus.call(this). Lá tu vai chamar a função que cria a barrinha substituindo os argumentos pelos que desejar.

this.drawGauge(x, y, width, rate, color1, color2);


A única parte levemente mais difícil aqui será o argumento rate, que é o quanto da barrinha estará preenchida. Enviando 1, ela estará totalmente cheia. Enviando 0.5, estará pela metade. Como tu vai usar uma variável, tu terá que fazer o cálculo de dividir o valor atual da variável pelo valor necessário para que ela fique cheia. Por exemplo, se a variável é 5 e o barrinha enche com 10, 5 /10 = 0.5, logo a barrinha estará meio completa. O código para chamar o valor de uma variável é $gameVariables.value(id), onde id é o id d variável em questão.

Agora tu tenta fazer aí pra gente.  :XD:

Vale lembrar que, se a janela escolhida não for um janela selecionável, tu pode desenhar a barrinha no initialize dela, sem a necessidade de um alias.

Perfeito Gê ja consegui criar a barra ! agora vou tentar deixar do jeito que quero.