Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o tema • Voltar para a ficha do tema
1 - Criando um jogo do zero no RMVXA!
3 participantes
Aldeia RPG :: RPG Maker :: RPG Maker VX Ace :: Tutoriais
Página 1 de 1
1 - Criando um jogo do zero no RMVXA!
Quando comecei a programar eu tentei muito desenvolver um jogo estilo tower defense mas infelizmente não tinha conhecimento suficiente na época. Mas hoje, alguns bons anos depois essa ideia voltou a mente e me pareceu uma boa oportunidade pra trazer pra Aldeia um tutorial um pouco diferente.
Vamos criar um novo projeto no RPG Maker VX Ace e apagar todos os scripts dele com exceção do main, deve ficar mais ou menos assim:
Se executarmos o jogo agora vai dar um erro por que dentro do main é usado o SceneManager (que nós acabamos de apagar :o). O método chamado é o SceneManager.run, vamo dar uma olhada no que ele faz para podermos fazer o mesmo.
Apenas olhando por cima da pra entender um pouco do que cada linha faz, os nomes são bem explicativos. Na primeira linha o módulo responsável por gerenciar o "banco de dados" do jogo é inicializada. O que nos importa agora são as linhas 22 e 23, nelas podemos ver que é criada uma instância da 'scene' inicial e após isso ele entra em um loop que se encerra somente quando a variável que guarda essa scene for nil. Ou seja, enquanto a scene existir o método main dentro dela vai ser chamado.
Nós precisamos dar uma recapitulada nesses pontos básicos do jogo por que precisamos trabalhar de modo semelhante pra criar esse tower defense! Um detalhe, para consultar os scripts recomendo criar um novo projeto e deixar ele sem alteração nenhuma. Dar uma olhada na Ajuda do RPG Maker também é muito útil já que todo o RGSS3 está documentado.
Enfim, vamos agora para o método main dentro da classe Scene_Base. Nosso objetivo, para quem ainda não entendeu, é chegar ao ciclo principal de atualização do jogo.
O método update entra em loop, logo é ele que nós buscamos. Se formos nele veremos que chama o método update_basic, que é onde iremos parar.
Nota-se que os módulos Graphics e Input são atualizados a cada frame. Vamos então adicionar eles ao nosso projeto:
Agora se testarmos o jogo veremos apenas uma tela preta. Nós vamos então criar uma classe chamada Title, que será a nossa tela de título. Lembrando que todos os scripts que adicionarmos no jogo deve ficar acima do main.
Precisamos que essa classe Title mantenha o ciclo de atualizações do jogo, então vamos copiar as linhas 8 a 11 do main e vamos criar um método chamado main dentro da classe Title, onde colocaremos o código copiado. Agora que já temos o main, falta instanciar essa classe lá no main do jogo (confuso -.. Vamos ao script Main, caso não tenha entendido bem o que precisamos fazer é só analisar o print.
Mais limpo, certo? Mas não funciona kkkkkk
Precisamos chamar o método main dentro da classe Title para que funcione e o jogo permaneça aberto. Nós precisamos então criar um método construtor para a classe Title e dentro dele podemos chamas o main. Método construtor é um método que é chamado automaticamente ao instanciar uma classe. Em ruby o método construtor é o initialize, quando usamos: Classe.new o método initialize dentro dessa classe é chamado.
A classe Title fica da seguinte maneira:
Agora podemos executar o jogo que ele vai permanecer aberto. Mas meio que foda-se a tela de título por enquanto, vamos focar logo no jogo em si. Criaremos uma classe chamada Map, podem dar Ctrl + C na Title e Ctrl + V depois já que a estrutura é a mesma, mudando apenas o nome da classe.
Espera um pouco! Se formos copiar esse códigos repetidos toda vez que formos criar uma tela diferente dentro do jogo mais pra frente vai dar um puta trabalhar fazer isso. Vamos usar um pouco dos recursos que o Ruby nos oferece para lidar com essa situação de maneira mais inteligente.
Precisamos então criar uma classe chamas Base pois ela servirá como base para as nossas telas. O mesmo processo de novo (ctrl + c....). Agora nossa lista de scripts deve estar assim:
Todos os 3 primeiros scripts são iguais com exceção apenas do nome. Vamos ao script Base agora, precisamos criar um método chamado start, que será chamado antes do main, criaremos também um método chamado terminate que chamaremos após o main, se ficou um pouco confuso:
Seu código deve ser mais ou menos como esse dai de cima. Agora vamos para o script Title (leiam com atenção, farão o mesmo com a classe Map), precisamos fazer com que ele herde os método da classe Base, para fazer isso em ruby precisamos definir da seguinte forma: class Title < Base. Agora que herdamos todos os métodos da classe base, ao invés de reescrever o main e o initialize dentro da classe Title vamos apenas deixar os métodos start e terminate lá sem nenhum código dentro.
O nosso projeto continua funcionando perfeitamente após essas mudanças, caso tenha dado algum erro ai reveja os passos anteriores. Lembrando que devem fazer o mesmo com a classe Map!
Vamos dar os primeiros passos dentro da classe Map, pelo menos desenhar um chão pra diferenciar desse fundo preto.
Dentro da classe Map vamos criar um método chamado create_ground. Esse método criará uma instância da classe Sprite e armazenará o chão. No momento ele será apenas um fundo verde.
Precisamos também desenhar o mapa, certo? Criaremos um método chamado draw_ground logo abaixo do anterior. Nele nós limparemos o bitmap e desenharemos um fundo verde. Se tiverem alguma noção de inglês compreender o código não deve ser complicado, pra quem não entende muito bem:
13 - Variável chamada width que armazena o valor da largura do bitmap
14 - Variável chamada height que armazena o valor da altura do bitmap
15 - Variável chamada color que armazena uma cor no formato RGB
17 - Limpa o bitmap
18 - Preenche uma área dentro do bitmap (x: 0, y: 0, largura: width, altura: height) com uma cor.
Esse método deve ser chamado no final do create_ground e o método create_ground deve ser chamado dentro do método start. O código final ficou da seguinte forma:
Um pequeno erro de digitação que não será corrigido no print por que to com preguiça, o nome do método é draw_ground, não groud.
Se testarmos o jogo agora não continuaremos naquela tela preta infeliz. Isso por que não chegamos a criar uma instância da classe Map então devemos fazer isso dentro da classe Title.
Testando agora obteremos o seguinte resultado:
Vamos criar um novo projeto no RPG Maker VX Ace e apagar todos os scripts dele com exceção do main, deve ficar mais ou menos assim:
Se executarmos o jogo agora vai dar um erro por que dentro do main é usado o SceneManager (que nós acabamos de apagar :o). O método chamado é o SceneManager.run, vamo dar uma olhada no que ele faz para podermos fazer o mesmo.
Apenas olhando por cima da pra entender um pouco do que cada linha faz, os nomes são bem explicativos. Na primeira linha o módulo responsável por gerenciar o "banco de dados" do jogo é inicializada. O que nos importa agora são as linhas 22 e 23, nelas podemos ver que é criada uma instância da 'scene' inicial e após isso ele entra em um loop que se encerra somente quando a variável que guarda essa scene for nil. Ou seja, enquanto a scene existir o método main dentro dela vai ser chamado.
Nós precisamos dar uma recapitulada nesses pontos básicos do jogo por que precisamos trabalhar de modo semelhante pra criar esse tower defense! Um detalhe, para consultar os scripts recomendo criar um novo projeto e deixar ele sem alteração nenhuma. Dar uma olhada na Ajuda do RPG Maker também é muito útil já que todo o RGSS3 está documentado.
Enfim, vamos agora para o método main dentro da classe Scene_Base. Nosso objetivo, para quem ainda não entendeu, é chegar ao ciclo principal de atualização do jogo.
O método update entra em loop, logo é ele que nós buscamos. Se formos nele veremos que chama o método update_basic, que é onde iremos parar.
Nota-se que os módulos Graphics e Input são atualizados a cada frame. Vamos então adicionar eles ao nosso projeto:
Agora se testarmos o jogo veremos apenas uma tela preta. Nós vamos então criar uma classe chamada Title, que será a nossa tela de título. Lembrando que todos os scripts que adicionarmos no jogo deve ficar acima do main.
Precisamos que essa classe Title mantenha o ciclo de atualizações do jogo, então vamos copiar as linhas 8 a 11 do main e vamos criar um método chamado main dentro da classe Title, onde colocaremos o código copiado. Agora que já temos o main, falta instanciar essa classe lá no main do jogo (confuso -.. Vamos ao script Main, caso não tenha entendido bem o que precisamos fazer é só analisar o print.
Mais limpo, certo? Mas não funciona kkkkkk
Precisamos chamar o método main dentro da classe Title para que funcione e o jogo permaneça aberto. Nós precisamos então criar um método construtor para a classe Title e dentro dele podemos chamas o main. Método construtor é um método que é chamado automaticamente ao instanciar uma classe. Em ruby o método construtor é o initialize, quando usamos: Classe.new o método initialize dentro dessa classe é chamado.
A classe Title fica da seguinte maneira:
Agora podemos executar o jogo que ele vai permanecer aberto. Mas meio que foda-se a tela de título por enquanto, vamos focar logo no jogo em si. Criaremos uma classe chamada Map, podem dar Ctrl + C na Title e Ctrl + V depois já que a estrutura é a mesma, mudando apenas o nome da classe.
Espera um pouco! Se formos copiar esse códigos repetidos toda vez que formos criar uma tela diferente dentro do jogo mais pra frente vai dar um puta trabalhar fazer isso. Vamos usar um pouco dos recursos que o Ruby nos oferece para lidar com essa situação de maneira mais inteligente.
Precisamos então criar uma classe chamas Base pois ela servirá como base para as nossas telas. O mesmo processo de novo (ctrl + c....). Agora nossa lista de scripts deve estar assim:
Todos os 3 primeiros scripts são iguais com exceção apenas do nome. Vamos ao script Base agora, precisamos criar um método chamado start, que será chamado antes do main, criaremos também um método chamado terminate que chamaremos após o main, se ficou um pouco confuso:
Seu código deve ser mais ou menos como esse dai de cima. Agora vamos para o script Title (leiam com atenção, farão o mesmo com a classe Map), precisamos fazer com que ele herde os método da classe Base, para fazer isso em ruby precisamos definir da seguinte forma: class Title < Base. Agora que herdamos todos os métodos da classe base, ao invés de reescrever o main e o initialize dentro da classe Title vamos apenas deixar os métodos start e terminate lá sem nenhum código dentro.
O nosso projeto continua funcionando perfeitamente após essas mudanças, caso tenha dado algum erro ai reveja os passos anteriores. Lembrando que devem fazer o mesmo com a classe Map!
Vamos dar os primeiros passos dentro da classe Map, pelo menos desenhar um chão pra diferenciar desse fundo preto.
Dentro da classe Map vamos criar um método chamado create_ground. Esse método criará uma instância da classe Sprite e armazenará o chão. No momento ele será apenas um fundo verde.
Precisamos também desenhar o mapa, certo? Criaremos um método chamado draw_ground logo abaixo do anterior. Nele nós limparemos o bitmap e desenharemos um fundo verde. Se tiverem alguma noção de inglês compreender o código não deve ser complicado, pra quem não entende muito bem:
13 - Variável chamada width que armazena o valor da largura do bitmap
14 - Variável chamada height que armazena o valor da altura do bitmap
15 - Variável chamada color que armazena uma cor no formato RGB
17 - Limpa o bitmap
18 - Preenche uma área dentro do bitmap (x: 0, y: 0, largura: width, altura: height) com uma cor.
Esse método deve ser chamado no final do create_ground e o método create_ground deve ser chamado dentro do método start. O código final ficou da seguinte forma:
Um pequeno erro de digitação que não será corrigido no print por que to com preguiça, o nome do método é draw_ground, não groud.
Se testarmos o jogo agora não continuaremos naquela tela preta infeliz. Isso por que não chegamos a criar uma instância da classe Map então devemos fazer isso dentro da classe Title.
Testando agora obteremos o seguinte resultado:
_________________
OFWGKTA- Experiente
- Mensagens : 408
Créditos : 27
Ficha do personagem
Nível: 1
Experiência:
(5/50)
Vida:
(30/30)
Tópicos semelhantes
» Criando Setup pro seu Jogo
» Criando um jogo browser?
» [Tutorial] Criando um K/D para seu jogo
» Criando um jogo Básico P1- A História
» RPG Maker VX Ace Criando Jogo 2013
» Criando um jogo browser?
» [Tutorial] Criando um K/D para seu jogo
» Criando um jogo Básico P1- A História
» RPG Maker VX Ace Criando Jogo 2013
Aldeia RPG :: RPG Maker :: RPG Maker VX Ace :: Tutoriais
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos