Como criar uma Barra no menu

6 Respostas   447 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

SoyeR

Tópico criado em: 22/05/2018 às 07:12 - Última modificação por Corvo em 26/05/2018 às 11:00

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.




Kyo Panda

  • Mito
  • *
  • Posts: 259
  • Ouros: 195
Resposta 1: 23/05/2018 às 11:54

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

SoyeR

Resposta 2: 23/05/2018 às 12:02

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.




Gabriel

Resposta 3: 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.


SoyeR

Resposta 4: 24/05/2018 às 06:53

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




Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 5: 26/05/2018 às 08:40

[...] 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.

Código: [Selecionar]
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.

Código: [Selecionar]
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.

Código: [Selecionar]
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.

SoyeR

Resposta 6: 26/05/2018 às 10:55

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