- Juntou-se
- 02 de Abril de 2019
- Postagens
- 166
- Bravecoins
- 284
- Área
- Programação
- Motor de jogo
- RPG Maker 2000
Este tutorial ajudará você a entender facilmente como usar um único mapa com várias seções do mesmo tamanho para jogos como Zelda 2D ou alguns jogos no estilo Metroidvania.
Para melhor explicação, usarei o mapa padrão do Rm2k/2k3 sem modificações, o que significa que a tela terá 320x240 pixels, portanto cada parte do mapa será composta por 20x15 blocos:
Após essa etapa, precisamos identificar o centro exato da área onde o jogador começa. Se for a primeira área, onde está o trono, será 9x7.
Se for a segunda área à direita, onde há ladrilhos de pedra, terá 29x7... e se for abaixo de onde temos os rios e a grama, terá 9x22. Então, basta adicionar 20 nas laterais de cada área do mapa e 15 na parte inferior.
Agora vamos para a parte que fixa a tela no jogador. Vou criar um evento de mapa em " Processo Paralelo " e usar um " Interruptor " para que ele ocorra apenas uma vez:
Agora vamos abordar a lógica relativa à posição na tela. Crie também uma nova página em "Processo Paralelo", mas uma que seja ativada pelo interruptor que foi ativado na página anterior.
Nesta página, crie duas variáveis que rastreiem a posição do jogador na tela; isso funciona de forma diferente das coordenadas:
Em outras palavras, se o jogador estiver fora da tela, independentemente de sua posição no mapa, o valor será o mesmo como se ele tivesse começado em outro local.
Os valores exatos para quando o jogador está fora da tela são os seguintes:
Com isso, podemos criar uma condição para cada possibilidade de ocorrência. O problema é que os eventos em "Processo Paralelo" ainda permitem que o jogador se mova, então, em vez disso, adicionaremos outro Switch:
Agora vamos criar uma terceira página ativada por este novo Switch, mas em vez de "Processo Paralelo ", deve ser configurado para "Execução Automática", que acionará o evento automaticamente. Isso impedirá o jogador de se mover até a conclusão. No final desta página, desative o Switch.
Dentro de cada condição moveremos a visão do mapa com o comando "Scroll Map" usando a opção "Shift Position", coloque na velocidade 6 para não tornar isso entediante para o jogador.
Mas primeiro vamos relembrar o conceito usado, se o jogador estiver fora do limite nas laterais ele terá que deslocar 20 tiles para a direção correspondente, se for acima ou abaixo apenas 15:
Com isso, você já tem a base para criar um jogo ou mini-game que depende de um único mapa.
Agora vamos imaginar que você precise fazer um jogo paredes entre as salas, neste caso os valores não precisam ser fora da tela, vou fazer um exemplo de mapa com paredes:
Seguindo este exemplo, os valores da posição do jogador na tela serão os mesmos mostrados acima, deslocando-se apenas 16 pixels em comparação com o exemplo anterior:
Mas e se você quiser que o jogador possa permanecer nas bordas da tela enquanto seu rosto não estiver virado para a porta? Basta incluir uma verificação adicional em cada condição. Mas é necessário modificar apenas a Page 2:
Para melhor explicação, usarei o mapa padrão do Rm2k/2k3 sem modificações, o que significa que a tela terá 320x240 pixels, portanto cada parte do mapa será composta por 20x15 blocos:
Após essa etapa, precisamos identificar o centro exato da área onde o jogador começa. Se for a primeira área, onde está o trono, será 9x7.
Se for a segunda área à direita, onde há ladrilhos de pedra, terá 29x7... e se for abaixo de onde temos os rios e a grama, terá 9x22. Então, basta adicionar 20 nas laterais de cada área do mapa e 15 na parte inferior.
Agora vamos para a parte que fixa a tela no jogador. Vou criar um evento de mapa em " Processo Paralelo " e usar um " Interruptor " para que ele ocorra apenas uma vez:
Coffeescript:
@> Scroll Map: Fixed ON
@> Control Switches: [0001] = ON
Agora vamos abordar a lógica relativa à posição na tela. Crie também uma nova página em "Processo Paralelo", mas uma que seja ativada pelo interruptor que foi ativado na página anterior.
Nesta página, crie duas variáveis que rastreiem a posição do jogador na tela; isso funciona de forma diferente das coordenadas:
Coffeescript:
@> Control Variables: [0001:Player-X-Pic] = Player's Screen X
@> Control Variables: [0002:Player-Y-Pic] = Player's Screen Y
Em outras palavras, se o jogador estiver fora da tela, independentemente de sua posição no mapa, o valor será o mesmo como se ele tivesse começado em outro local.
Os valores exatos para quando o jogador está fora da tela são os seguintes:
- -8 se estiver no lado esquerdo da tela.
- 328 se você for para a direita da tela.
- 0 se estiver acima da tela
- 256 se estiver abaixo da tela
Com isso, podemos criar uma condição para cada possibilidade de ocorrência. O problema é que os eventos em "Processo Paralelo" ainda permitem que o jogador se mova, então, em vez disso, adicionaremos outro Switch:
Coffeescript:
@> Conditional Branch: Variable [0002:Player-Y-Pic] <= 0@> Control Switches: [0002] = ON
@>
: Branch End
@> Conditional Branch: Variable [0001:Player-X-Pic] >= 328
@> Control Switches: [0002] = ON
@>
: Branch End
@> Conditional Branch: Variable [0002:Player-Y-Pic] >= 256
@> Control Switches: [0002] = ON
@>
: Branch End
@> Conditional Branch: Variable [0001:Player-X-Pic] <= -8
@> Control Switches: [0002] = ON
@>
: Branch End
Agora vamos criar uma terceira página ativada por este novo Switch, mas em vez de "Processo Paralelo ", deve ser configurado para "Execução Automática", que acionará o evento automaticamente. Isso impedirá o jogador de se mover até a conclusão. No final desta página, desative o Switch.
Coffeescript:
@> Conditional Branch: Variable [0002:Player-Y-Pic] <= 0
@>
: Branch End
@> Conditional Branch: Variable [0001:Player-X-Pic] >= 328
@>
: Branch End
@> Conditional Branch: Variable [0002:Player-Y-Pic] >= 256
@>
: Branch End
@> Conditional Branch: Variable [0001:Player-X-Pic] <= -8
@>
: Branch End
@> Control Switches: [0002] = OFF
Dentro de cada condição moveremos a visão do mapa com o comando "Scroll Map" usando a opção "Shift Position", coloque na velocidade 6 para não tornar isso entediante para o jogador.
Mas primeiro vamos relembrar o conceito usado, se o jogador estiver fora do limite nas laterais ele terá que deslocar 20 tiles para a direção correspondente, se for acima ou abaixo apenas 15:
Coffeescript:
@> Conditional Branch: Variable [0002layer-Y-Pic] <= 0
@> Scroll Map: Up, 15, 6, Wait
@>
: Branch End
@> Conditional Branch: Variable [0001layer-X-Pic] >= 328
@> Scroll Map: Right, 20, 6, Wait
@>
: Branch End
@> Conditional Branch: Variable [0002layer-Y-Pic] >= 256
@> Scroll Map: Down, 15, 6, Wait
@>
: Branch End
@> Conditional Branch: Variable [0001layer-X-Pic] <= -8
@> Scroll Map: Left, 20, 6, Wait
@>
: Branch End
@> Control Switches: [0002] = OFF
Com isso, você já tem a base para criar um jogo ou mini-game que depende de um único mapa.
Agora vamos imaginar que você precise fazer um jogo paredes entre as salas, neste caso os valores não precisam ser fora da tela, vou fazer um exemplo de mapa com paredes:
Seguindo este exemplo, os valores da posição do jogador na tela serão os mesmos mostrados acima, deslocando-se apenas 16 pixels em comparação com o exemplo anterior:
- Quando o ScreenY completar 16 anos, a transição será para cima
- Quando o ScreenY atingir 240, a transição será para baixo
- Quando o ScreenX atingir 8, a transição será para a esquerda
- Quando o ScreenX atingir 312, a transição será para a direita
Coffeescript:
@> Conditional Branch: Variable [0002:Player-Y-Pic] <= 16
@> Scroll Map: Up, 15, 6, Wait
@> Set Move Route: Player, Move Up, Move Up
@>
: Branch End
@> Conditional Branch: Variable [0001:Player-X-Pic] >= 312
@> Scroll Map: Right, 20, 6, Wait
@> Set Move Route: Player, Move Right, Move Right
@>
: Branch End
@> Conditional Branch: Variable [0002:Player-Y-Pic] >= 240
@> Scroll Map: Down, 15, 6, Wait
@> Set Move Route: Player, Move Down, Move Down
@>
: Branch End
@> Conditional Branch: Variable [0001:Player-X-Pic] <= 8
@> Scroll Map: Left, 20, 6, Wait
@> Set Move Route: Player, Move Left, Move Left
@>
: Branch End
@> Wait for All Movement
@> Control Switches: [0002] = OFF
Mas e se você quiser que o jogador possa permanecer nas bordas da tela enquanto seu rosto não estiver virado para a porta? Basta incluir uma verificação adicional em cada condição. Mas é necessário modificar apenas a Page 2:
Coffeescript:
@> Control Variables: [0001:Player-X-Pic] = Player's Screen X
@> Control Variables: [0002:Player-Y-Pic] = Player's Screen Y
@> Conditional Branch: Variable [0002:Player-Y-Pic] <= 16
@> Conditional Branch: Player is facing Up
@> Control Switches: [0002] = ON
@>
: Branch End
@>
: Branch End
@> Conditional Branch: Variable [0001:Player-X-Pic] >= 312
@> Conditional Branch: Player is facing Right
@> Control Switches: [0002] = ON
@>
: Branch End
@>
: Branch End
@> Conditional Branch: Variable [0002:Player-Y-Pic] >= 240
@> Conditional Branch: Player is facing Down
@> Control Switches: [0002] = ON
@>
: Branch End
@>
: Branch End
@> Conditional Branch: Variable [0001:Player-X-Pic] <= 8
@> Conditional Branch: Player is facing Left
@> Control Switches: [0002] = ON
@>
: Branch End
@>
: Branch End
Última edição:
