- Juntou-se
- 02 de Abril de 2019
- Postagens
- 178
- Bravecoins
- 357
- Área
- Programação
- Motor de jogo
- RPG Maker 2000
Imagine poder economizar varias Switches e controlar enviando apenas um número ao invés de vários comandos de liga ou desliga, esse sistema faz isso, e não se limita ao mapa em sim, as mesma variável pode ser usada para vários mapas como em uma Dungeon, basta inserir o valor de correspondente à ID da variável em cada mapa vinculado no enredo do seu jogo.
Essa tutorial é a versão da que ensina salvar 7 Switches em uma Variável, se você quiser acessar, aqui está o link:
E foi justamente por conta dessa tutorial que o CherryDT me de uma breve explicação de que poderia armazenar até 23 Switches em uma única variável, bastou tratar cada Switch como um binário para converte-los para um decimal, LEMBRANDO QUE RM2K3 NÃO TEM SUPORTE À SCRIPTS.
Foi neste momento que a minha cabeça explodiu, apesar de matemática não ser a minha área:
E após vários testes usando Javascript eu entendi como aplicar o valor negativo para conseguir usar uma 24ª Switch, que foi subtraindo o resultado da soma de todas as Switches se estivessem ligados.
Download do exemplo: MEDIAFIRE
Senha para extração:
Neste download contém os seguintes itens:
Então, com isso podemos usar valores decimais direto para ligar e desligar as Switches como que quisermos sem precisar criar vários eventos:
Aqui apenas para registro de como eu consegui criar cada etapa do sistema:
Como tornar estes valores em números binários já separando digito por digito?
Em Javascript bastaria usar o método String e separando cada digito em um Array para trabalhar.
Exemplo:
Porém neste caso precisamos de matemática pra aplicar nos Eventos, então se o valor da DECIMAL for negativo significa que a ultima Switch foi gravada no estado ON (true/1) e já pode ser resolvida no começo verificando isso.
E para voltar o DECIMAL para positivo basta somar o valor total, neste caso 8388607 somando mais para pular a Switch[1], já que ela vai ser verificada à parte depois:
Agora para verificar se a Switch[1] está ligada é só verificar usando
Do Switch[2] até o penultimo que é a Switch[23] poderá ser feito com um Loop já que a formula é a mesma sempre retirando do DECIMAL o resultado da anterior:
E quando ele chegar em
Converter essa parte para Eventos necessitará de mais variáveis para as operações que não mudam o valor da variável DECIMAL:
Então agora é necessário o processo inverso, juntar todas as Switches e tratando como se fosse um numero binário, o que poderá ser um pouco mais difícil.
Se fosse fazer com Javascript apenas juntaria todos em sequencia, as Switches ON serão 1 e as OFF serão 0, formando um valor binário como String e convertendo para DECIMAL com parseInt.
Exemplo:
Mas no caso eu preciso que funcione nos Eventos, então criei isso em Javascript usando apenas matemática para testar mais facilmente antes de criar o Evento:
Agora nessa etapa eu tive que usar Loop para fazer o calculo de potencia (
Claro que esse calculo poderia ser feito de outra maneira, usando LABEL, mas a ideia é que se cara Switch ativada tiver a sua operação separada ficará mais fácil para o desenvolvedor recriar esse mesmo sistemas para um conjunto próprio de Switches e ainda compreender como a conversão dos números é feita.
E por fim a que mais simples, mas que foi a parte mais complexa quando eu estava estudando pra desenvolver esse sistema, a ultima Switch:
Essa tutorial é a versão da que ensina salvar 7 Switches em uma Variável, se você quiser acessar, aqui está o link:
E foi justamente por conta dessa tutorial que o CherryDT me de uma breve explicação de que poderia armazenar até 23 Switches em uma única variável, bastou tratar cada Switch como um binário para converte-los para um decimal, LEMBRANDO QUE RM2K3 NÃO TEM SUPORTE À SCRIPTS.
Foi neste momento que a minha cabeça explodiu, apesar de matemática não ser a minha área:
E após vários testes usando Javascript eu entendi como aplicar o valor negativo para conseguir usar uma 24ª Switch, que foi subtraindo o resultado da soma de todas as Switches se estivessem ligados.
Download do exemplo: MEDIAFIRE
Senha para extração:
rpgmakerNeste download contém os seguintes itens:
- Uma DEMO da versão para Rm2k3 1.12a que permite até 24 Switches
- Uma DEMO para Rm2k que permite até 20 Switches e pode ser usado em versões antigas do Rm2k3
- Um aplicativo HTML que você pode gerar os valores decimais para usar a variável Input.Decimal:
Então, com isso podemos usar valores decimais direto para ligar e desligar as Switches como que quisermos sem precisar criar vários eventos:
8388607ativará os primeiros 23 interruptores se for Rm2k3-8388608ativará apenas o interruptor 24524287ativará os primeiros 19 interruptores se for Rm2k-524288ativará apenas o interruptor 20 se for Rm2k-524288ativará os interruptor 20, 21, 23 se for Rm2k3-1ativará todos os 24 interruptores se for Rm2k3 (8388607 - 8388608)- Este anterior ativará todos os 20 interruptores se for Rm2k (524287 - 524288)
5592405ativará apenas interruptores com ID com valor ímpar (Rm2k3)349525ativará apenas interruptores com ID com valor ímpar (Rm2k)-5592406ativará apenas interruptores com ID com valor par-349526ativará apenas interruptores com ID com valor par0vai desligar tudo- (Reservado para incluir mais exemplos)
Aqui apenas para registro de como eu consegui criar cada etapa do sistema:
Como tornar estes valores em números binários já separando digito por digito?
Em Javascript bastaria usar o método String e separando cada digito em um Array para trabalhar.
Exemplo:
Javascript:
var bin=(8388607).toString(2) // Base 2
bin=bin.split("") // Para Array
Porém neste caso precisamos de matemática pra aplicar nos Eventos, então se o valor da DECIMAL for negativo significa que a ultima Switch foi gravada no estado ON (true/1) e já pode ser resolvida no começo verificando isso.
E para voltar o DECIMAL para positivo basta somar o valor total, neste caso 8388607 somando mais para pular a Switch[1], já que ela vai ser verificada à parte depois:
Javascript:
var dec=-5592406; // Valor DECIMAL para teste
if(dec < 0){
sw[24]=true;
dec+=8388608 // 524288 se for Rm2k
}
Agora para verificar se a Switch[1] está ligada é só verificar usando
%2, já que é este o único que pode tornar o DECIMAL um valor ímpar:
Javascript:
if(dec%2==1){
sw[1]=true
}
Do Switch[2] até o penultimo que é a Switch[23] poderá ser feito com um Loop já que a formula é a mesma sempre retirando do DECIMAL o resultado da anterior:
Javascript:
for(i=2;dec > 1;i++){
dec=(dec-dec%2)/2;
if(dec%2==1){
sw[i]=true
}
}
// Resultado
console.log(JSON.stringify(sw, false, 3))
0 ou menor o Loop será encerrado.Converter essa parte para Eventos necessitará de mais variáveis para as operações que não mudam o valor da variável DECIMAL:
Então agora é necessário o processo inverso, juntar todas as Switches e tratando como se fosse um numero binário, o que poderá ser um pouco mais difícil.
Se fosse fazer com Javascript apenas juntaria todos em sequencia, as Switches ON serão 1 e as OFF serão 0, formando um valor binário como String e convertendo para DECIMAL com parseInt.
Exemplo:
Javascript:
// Retorna 8388607 (as 23 primeiras Switches)
parseInt("11111111111111111111111",2)
Mas no caso eu preciso que funcione nos Eventos, então criei isso em Javascript usando apenas matemática para testar mais facilmente antes de criar o Evento:
Javascript:
// Somente as Switches ímpares ligadas para fazer o teste
var sw={
1:true, 2:false, 3:true, 4:false,
5:true, 6:false, 7:true, 8:false,
9:true,10:false,11:true,12:false,
13:true,14:false,15:true,16:false,
17:true,18:false,19:true,20:false,
21:true,22:false,23:true,24:false
};
// Converter para DECIMAL
var dec=0;
for(bin=1;bin<25;bin++){
if(sw[bin]){
if(bin==24){
dec-=2**(bin-1); // Negativa o valor DECIMAL se estiver ON
break
}
dec+=2**(bin-1);
}
}
// Resultado
console.log(dec);
Agora nessa etapa eu tive que usar Loop para fazer o calculo de potencia (
2**expoente) já que essa operação não existe nos Eventos, os únicos que não necessitam são 1, 2 e 3 que só ocorrerão uma vez:Claro que esse calculo poderia ser feito de outra maneira, usando LABEL, mas a ideia é que se cara Switch ativada tiver a sua operação separada ficará mais fácil para o desenvolvedor recriar esse mesmo sistemas para um conjunto próprio de Switches e ainda compreender como a conversão dos números é feita.
E por fim a que mais simples, mas que foi a parte mais complexa quando eu estava estudando pra desenvolver esse sistema, a ultima Switch:
Última edição:
