Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
[Tutorial] Game genérico
5 participantes
Página 1 de 1
[Tutorial] Game genérico
Título: Um jogo que "cria" jogos
Nível: Intermediário/Avançado
Versão: Pro (mas fazendo o download, você meio que TERÁ pro)
Descrição: Só uma idéia que eu tive, funcionou, achei bacana e resolvi compartilhar.
Introdução: Comecei com essa idéia pra poder programar e testar uns códigos longe do game maker, mas percebi que o potencial da idéia é bem grande.
Basicamente, trata-se de criar um executável que não faz nada além de ler arquivos de texto e executá-los. Pra isso, basta criar um arquivo no game maker, criar uma room e, no create event dessa room, você coloca:
Criando recursos: Um jogo normal tem objetos, sprites, entre outras coisas. Muitos jogos têm só objetos e sprites. No game maker, ao criar um recurso qualquer, ele recebe uma id que pode ser chamada ao longo de todo o jogo. Logo, trata-se de uma variável global. Então, a primeira coisa a ser feita é declarar os recursos a serem utilizados no jogo como globais. Exemplo:
O que foi feito até agora: definimos, na primeira linha do arquivo .txt quais serão as variáveis globais a serem utilizadas ao longo do jogo e criamos os objetos. Veja que, via de regra, a primeira linha já deve ter todos os objetos do jogo. Mas como saber de antemão todos os objetos a ser utilizados? A meu ver, isso é impossível, mas não precisamos escrever a primeira linha completamente, ela pode ir sendo modificada à medida que se fizer necessário. Só que pra isso não gerar uma grande confusão, a programação deve ser muito bem organizada. Trataremos disso também, mais tarde, mas voltemos ao nosso código.
Nós adicionamos 3 objetos, com todas as variáveis no valor default, mas nenhum deles faz nada. Ainda.
Como eu vejo que o tutorial ficará imenso, deixo pra vocês descobrirem como importar cada recurso. O manual é seu amigo e funções com "_add" ou "_create", também. Exemplos:
Organizando recursos: Você deve estar pensando: "é, isso é possível, mas o arquivo vai ficar absurdamente grande e bagunçado". Se você parar de ler agora e ir programar, sim, mas tenho algumas dicas pra deixar seu arquivo organizado. Aliás, seus arquivos organizados.
Isso mesmo, um arquivo pra cada recurso. Se pra cada som e cada imagem é necessário importar um arquivo, porque não fazer o mesmo com objetos, paths, timelines, etc? No arquivo principal, declare as variáveis e crie os objetos, mas não defina o que eles fazem. Pra isso, mande executar outro arquivo de texto, no qual você adiciona os eventos. Além disso, eu gosto de importar os sprites nesse arquivo do objeto, também, de forma que isso saia do arquivo principal. Importar as rooms de outros arquivos também é uma boa idéia. Assim, a cara do arquivo principal fica mais ou menos assim:
Caramba, como você é observador! É verdade, eu pedi pro jogo executar o primeiro arquivo .txt que ele achar. Mas que disse que arquivos de texto têm que ter a extensão .txt? Segredo: não importa a extensão do seu arquivo de texto, o game maker lê ele numa boa!
Assim, arquivos com objetos podem ter extensão .obj, arquivos com rooms podem ter extensão .room e assim por diante. Você escolhe a extensão que quiser. "Uau! E será que poderíamos alterar nosso executável pra procurar um arquivo com uma extensão pré-definida, diferente da .txt?" Pare de se adiantar... Mas já que tocamos no assunto, podemos sim. Eu recomendo usar algo totalmente aleatório e despretensioso. Algo como a extensão .saim, o que acha?
Uma dica: sempre crie os objetos antes de incluir seus eventos. Isso evita erros como "unknown variable", que aparece ao tentar, por exemplo, criar evento de colisão com um objeto que ainda não foi criado.
Mais uma coisa: podemos usar pastas, também, pra não trocar as bolas. Assim como o game maker, colocaremos os objetos na pasta "objetos", as imagens na pasta "sprites", e assim por diante. Alterando mais uma vez o arquivo-motor do nosso jogo, ele fica com essa cara:
Objetos e rooms: Tá legal, eu não deveria ter que escrever isso, mas que tipo de tutorial deixa tudo pra ser pesquisado no manual? A seguir, vou mostrar alguns arquivos típicos pra adição de objetos e rooms. Primeiro, objetos:
Pra organizar, coloque o texto correspondente ao código do evento em linhas separadas daquelas da função "object_event_add". Pesquise um pouco sobre identação, também.
Agora, um exemplo típico de uma room:
Esse arquivo tem uma solução pra pergunta que você está se coçando pra fazer: "Terei que visualizar mentalmente a posição de cada objeto na room?" A resposta é não. Você pode criar um código de cores num minimapa em .bmp. Pra cada ponto da grid, um ponto correspondente na imagem, pra cada cor de cada pixel na imagem, um objeto correspondente na grid. Note que, obviamente, esse arquivo tem que ser executado antes de ir para a room.
Templates: Você pode criar objetos com códigos-padrão pra usar em vários jogos. Por exemplo, um personagem de plataforma, um goomba, pareder quadradas, sei lá, e depois, com novos arquivos, adicionar (ou até excluir) eventos, personalizando o objeto. Exemplo:
Pra fazer ele lidar com inimigos, pode-se adicionar, atravé de outros arquivos, mais e mais eventos, inclusive eventos do mesmo tipo que já foram adicionados. Seria o equivalente a incluir um pedaço de código depois daquele já existente.
scripts: Você não percebeu que eu não falei nada sobre a importação de scripts, percebeu? Ah, bom, então deixa esse assunto pra outro dia... Ih, agora falei!
Bom, eu ia deixar as desvantagens pro final do tutorial, mas já que VOCÊ tocou nesse assunto, vamos lá: não é possível importar scripts com o jogo rodando. Mas isso não é o fim do jogo genérico. Existem formas de contornar isso. Uma forma é colocar o script todo num arquivo e chamá-lo usando execute_file, ao invés do simples nome do arquivo, mas nosso amigo MatheusReis me mostrou uma forma de colocar o conteúdo do arquivo numa string:
Ambas soluções funcionam, mas são lentas. Portanto, use apenas em períodos de teste. Um jogo profissional, genérico ou não, deve ter seus scripts inclusos no executável.
Notepad++: Uma coisa que você deve estar se perguntando é "como farei pra saber se não cometi nenhum erro bobo, como escrever errado o nome da função ou esquecer de fechar um parêntese? Como programar sem os highlites (aquela colorida bacana que o game maker dá no seu código)?". Bom, o notepad++ é um programa leve que pode solucionar o problema.
Para adicionar GML, baixe esse outro arquivo (que eu que fiz ), vá em "view\used-defined dialogue", clique em Import (na versão em português está do avesso, "exportar"), selecione o arquivo, feche e reabra o notepad++. Depois, vá em "Language" e GML estará disponível.
Lembre-se que alguns cuidados deverão ser tomados, como um espaço antes dos nomes das funções, senão os highlights não funcionam.
Fim Bom, acho que falei de tudo. Qualquer coisa que eu tenha esquecido, volto aqui e edito de novo. Ainda tenho que falar das vantagens e desvantagens, mas isso não faz parte do tutorial (ou faz?). De qualquer forma, fica aqui o fim da aula, você está dispensado e o resto é conversa de corredor.
Vantagens: Aqui são só algumas que eu pensei
- Você pode enviar seus jogos por qualquer e-mail, pra alguém que tenha o executável, afinal são só arquivos de texto, imagem, etc, enfim, não haverá aquela maldita proteção antivírus que barra seus executáveis.
- Com o mesmo raciocínio, pode publicar o código-fonte de seus jogos em sites, pra jogadores cuja rede é de extrema restrição a downloads.
- Outras pessoas podem modificar seus jogos com facilidade. Sei que muitos aqui vêem isso como desvantagem, mas lembrem-se que counter-strike foi uma modificação do half-life. Enfim, pode ser divertido ver o que outras pessoas farão com suas idéias.
- Se isso não te convenceu, use um sistema de encriptação com a senha dentro do executável, como uma constante. Com esses programas de decriptação, acaba sendo uma forma mais segura de proteger seus códigos do que incluí-los no executável.
- Você pode criar templates de objetos e usar em diversos jogos diferentes.
- Em pouco tempo você estará fera nessa forma de programar e um passo à frente pra aprender outras linguagens.
- Você pode criar suas próprias extensões.
- Organizar os objetos em arquivos separados pode facilitar a visualização de diversos objetos ao mesmo tempo.
- Importando os objetos ou executando arquivos externos, você pode alterar seus códigos em tempo real - isso mesmo, com o jogo rodando - bastando executar o arquivo novamente (em caso de importação, talvez fosse interessante deletar o objeto antes de importá-lo, o que é possível desde que você preveja essa opção desde a primeira versão).
Desvantagens conhecidas:
- Não há o manual do game maker à mão. Mas você pode ver as funções, com argumentos, aqui nesse tópico ou baixar o manual em pdf nesse outro.
- Scripts. Já falei bastante sobre isso.
Mais: O pulo do gato, não se ensina. Eis aqui um arquivo que serve como jogo genérico. Ele lê vários arquivos da extensão .saim e os executa. Pra selecionar o arquivo, use as setas (pra cima/pra baixo) ou o mouse. Pra selecionar e executar o arquivo, aperte espaço, enter ou dê um clique duplo. Se não houver um arquivo da extensão .saim na pasta, ele perguntará qual extensão você quer usar.
link
Nível: Intermediário/Avançado
Versão: Pro (mas fazendo o download, você meio que TERÁ pro)
Descrição: Só uma idéia que eu tive, funcionou, achei bacana e resolvi compartilhar.
Introdução: Comecei com essa idéia pra poder programar e testar uns códigos longe do game maker, mas percebi que o potencial da idéia é bem grande.
Basicamente, trata-se de criar um executável que não faz nada além de ler arquivos de texto e executá-los. Pra isso, basta criar um arquivo no game maker, criar uma room e, no create event dessa room, você coloca:
- Código:
arquivoDoJogo=file_find_first(working_directory+"*.txt", fa_archive)
execute_file(arquivoDoJogo);
Criando recursos: Um jogo normal tem objetos, sprites, entre outras coisas. Muitos jogos têm só objetos e sprites. No game maker, ao criar um recurso qualquer, ele recebe uma id que pode ser chamada ao longo de todo o jogo. Logo, trata-se de uma variável global. Então, a primeira coisa a ser feita é declarar os recursos a serem utilizados no jogo como globais. Exemplo:
- Código:
globalvar obj_player, obj_wall, obj_enemy, spr_player, spr_wall, spr_enemy;
- Código:
obj_player=object_add();
obj_wall=object_add();
obj_enemy=object_add();
spr_player=...
O que foi feito até agora: definimos, na primeira linha do arquivo .txt quais serão as variáveis globais a serem utilizadas ao longo do jogo e criamos os objetos. Veja que, via de regra, a primeira linha já deve ter todos os objetos do jogo. Mas como saber de antemão todos os objetos a ser utilizados? A meu ver, isso é impossível, mas não precisamos escrever a primeira linha completamente, ela pode ir sendo modificada à medida que se fizer necessário. Só que pra isso não gerar uma grande confusão, a programação deve ser muito bem organizada. Trataremos disso também, mais tarde, mas voltemos ao nosso código.
Nós adicionamos 3 objetos, com todas as variáveis no valor default, mas nenhum deles faz nada. Ainda.
Como eu vejo que o tutorial ficará imenso, deixo pra vocês descobrirem como importar cada recurso. O manual é seu amigo e funções com "_add" ou "_create", também. Exemplos:
- Código:
sprite_add(fname,imgnumb,removeback,smooth,xorig,yorig);
background_add(fname,removeback,smooth);
background_create_gradient(w,h,col1,col2,kind);
sound_add(fname,kind,preload);
path_add();
timeline_add();
font_add(name,size,bold,italic,first,last);
room_add();
Organizando recursos: Você deve estar pensando: "é, isso é possível, mas o arquivo vai ficar absurdamente grande e bagunçado". Se você parar de ler agora e ir programar, sim, mas tenho algumas dicas pra deixar seu arquivo organizado. Aliás, seus arquivos organizados.
Isso mesmo, um arquivo pra cada recurso. Se pra cada som e cada imagem é necessário importar um arquivo, porque não fazer o mesmo com objetos, paths, timelines, etc? No arquivo principal, declare as variáveis e crie os objetos, mas não defina o que eles fazem. Pra isso, mande executar outro arquivo de texto, no qual você adiciona os eventos. Além disso, eu gosto de importar os sprites nesse arquivo do objeto, também, de forma que isso saia do arquivo principal. Importar as rooms de outros arquivos também é uma boa idéia. Assim, a cara do arquivo principal fica mais ou menos assim:
- Código:
globalvar obj_player, obj_enemy, spr_player, spr_enemy, room_play;
obj_player=object_add();
obj_enemy=object_add();
room_play=room_add();
execute_file(arquivo do obj_player); //adiciona os eventos e sprites ao obj_player
execute_file(arquivo do obj_enemy); //adiciona os eventos e sprites ao obj_enemy
execute_file(arquivo da room_play); //define todos os parâmetros da room_play
room_goto(room_play); //vai até a room_play
Caramba, como você é observador! É verdade, eu pedi pro jogo executar o primeiro arquivo .txt que ele achar. Mas que disse que arquivos de texto têm que ter a extensão .txt? Segredo: não importa a extensão do seu arquivo de texto, o game maker lê ele numa boa!
Assim, arquivos com objetos podem ter extensão .obj, arquivos com rooms podem ter extensão .room e assim por diante. Você escolhe a extensão que quiser. "Uau! E será que poderíamos alterar nosso executável pra procurar um arquivo com uma extensão pré-definida, diferente da .txt?" Pare de se adiantar... Mas já que tocamos no assunto, podemos sim. Eu recomendo usar algo totalmente aleatório e despretensioso. Algo como a extensão .saim, o que acha?
Uma dica: sempre crie os objetos antes de incluir seus eventos. Isso evita erros como "unknown variable", que aparece ao tentar, por exemplo, criar evento de colisão com um objeto que ainda não foi criado.
Mais uma coisa: podemos usar pastas, também, pra não trocar as bolas. Assim como o game maker, colocaremos os objetos na pasta "objetos", as imagens na pasta "sprites", e assim por diante. Alterando mais uma vez o arquivo-motor do nosso jogo, ele fica com essa cara:
- Código:
globalvar obj_player, obj_enemy, spr_player, spr_enemy, room_play;
obj_player=object_add();
obj_enemy=object_add();
room_play=room_add();
var MASK;
MASK=working_directory+"\objetos\"
execute_file(MASK+"player.obj"); //adiciona os eventos e sprites ao obj_player
execute_file(MASK+"enemy.obj"); //adiciona os eventos e sprites ao obj_enemy
MASK=working_directory+"\rooms\"
execute_file(MASK+"play.room"); //define todos os parâmetros da room_play
room_goto(room_play); //vai até a room_play
Objetos e rooms: Tá legal, eu não deveria ter que escrever isso, mas que tipo de tutorial deixa tudo pra ser pesquisado no manual? A seguir, vou mostrar alguns arquivos típicos pra adição de objetos e rooms. Primeiro, objetos:
- Código:
var FILE;
FILE=working_directory+"\sprites\casa.bmp";
spr_casa=sprite_add(FILE, 1, 0, 1, 0, 0);
object_set_sprite(obj_casa, spr_casa);
object_event_add(obj_casa, ev_create, 0, '
depth=1
if (place_meeting(x, y, obj_brancas) || place_meeting(x, y, obj_pretas))
livre=false
else livre=true
')
Pra organizar, coloque o texto correspondente ao código do evento em linhas separadas daquelas da função "object_event_add". Pesquise um pouco sobre identação, também.
Agora, um exemplo típico de uma room:
- Código:
room_set_width(rm_tabu, 8*32);
room_set_height(rm_tabu, 8*32);
room_set_code(rm_tabu, '
var spr_tabu, i, j;
var FILE;
FILE=working_directory+"\sprites\tabuleiro.bmp"
spr_tabu=sprite_add(FILE, 1, 0, 1, 0, 0 );
draw_sprite(spr_tabu, 0, 0, 0);
for(i=0; i<8; i+=1){
for(j=0; j<8; j+=1){
if (draw_getpixel(i, j)==$ffff00){
instance_create(32*i+16, 32*j+16, obj_brancas);
}
if (draw_getpixel(i, j)==$0000ff){
instance_create(32*i+16, 32*j+16, obj_pretas);
}
if (draw_getpixel(i, j)!=$ffffff){
instance_create(32*i, 32*j, obj_casa);
}
}
}
sprite_delete(spr_tabu);
')
Esse arquivo tem uma solução pra pergunta que você está se coçando pra fazer: "Terei que visualizar mentalmente a posição de cada objeto na room?" A resposta é não. Você pode criar um código de cores num minimapa em .bmp. Pra cada ponto da grid, um ponto correspondente na imagem, pra cada cor de cada pixel na imagem, um objeto correspondente na grid. Note que, obviamente, esse arquivo tem que ser executado antes de ir para a room.
Templates: Você pode criar objetos com códigos-padrão pra usar em vários jogos. Por exemplo, um personagem de plataforma, um goomba, pareder quadradas, sei lá, e depois, com novos arquivos, adicionar (ou até excluir) eventos, personalizando o objeto. Exemplo:
- Código:
//plataform player template
execute_file("player.draw", 16, 32) //desenha e define o sprite
object_event_add(obj_player, ev_create, 0, '
hsp=4; //velocidade horizontal
vsp=0; //velocidade vertical
pulo=10; //velocidade quando pula
gravidade=0.5; //quanto será adicionado à velocidade vertica
dir=vk_right; //tecla pra andar à direita
esq=vk_left; //tecla pra andar à esquerda
cima=vk_up; //tecla pra andar acima
baixo=vk_down; //tecla pra andar abaixo
parede=obj_wall; //o objeto que servirá como parede
piso=obj_wall; //o objeto que servirá como piso
')
object_event_add(obj_player, ev_step, 1, '
repeat(hsp){
if !place_meeting(x+keyboard_check(dir)-keyboard_check(esq), y, parede){
x=median(0, room_width, x+keyboard_check(dir)-keyboard_check(esq));
}
}
grav=(!place_meeting(x, y+1, piso))*gravidade;
vsp=vsp+grav-(grav==0)*keyboard_check_pressed(cima)*pulo;
if vsp!=0
if !place_meeting(x, y+vsp, piso){
y+=vsp;
}
else{
while(!place_meeting(x, y+sign(vsp), piso)){
y+=sign(vsp);
}
vsp=0;
}
')
Pra fazer ele lidar com inimigos, pode-se adicionar, atravé de outros arquivos, mais e mais eventos, inclusive eventos do mesmo tipo que já foram adicionados. Seria o equivalente a incluir um pedaço de código depois daquele já existente.
scripts: Você não percebeu que eu não falei nada sobre a importação de scripts, percebeu? Ah, bom, então deixa esse assunto pra outro dia... Ih, agora falei!
Bom, eu ia deixar as desvantagens pro final do tutorial, mas já que VOCÊ tocou nesse assunto, vamos lá: não é possível importar scripts com o jogo rodando. Mas isso não é o fim do jogo genérico. Existem formas de contornar isso. Uma forma é colocar o script todo num arquivo e chamá-lo usando execute_file, ao invés do simples nome do arquivo, mas nosso amigo MatheusReis me mostrou uma forma de colocar o conteúdo do arquivo numa string:
- Código:
var filefrom, res_str, res2;
filefrom=file_text_open_read(argument0);
//
res_str=file_text_read_string(filefrom)+"
";
file_text_readln(filefrom);
while(!file_text_eof(filefrom)){
res2=res_str;
res_str=res2+file_text_read_string(filefrom)+"
";
file_text_readln(filefrom)};
file_text_close(filefrom);
return (res_str);
Ambas soluções funcionam, mas são lentas. Portanto, use apenas em períodos de teste. Um jogo profissional, genérico ou não, deve ter seus scripts inclusos no executável.
Notepad++: Uma coisa que você deve estar se perguntando é "como farei pra saber se não cometi nenhum erro bobo, como escrever errado o nome da função ou esquecer de fechar um parêntese? Como programar sem os highlites (aquela colorida bacana que o game maker dá no seu código)?". Bom, o notepad++ é um programa leve que pode solucionar o problema.
Para adicionar GML, baixe esse outro arquivo (que eu que fiz ), vá em "view\used-defined dialogue", clique em Import (na versão em português está do avesso, "exportar"), selecione o arquivo, feche e reabra o notepad++. Depois, vá em "Language" e GML estará disponível.
Lembre-se que alguns cuidados deverão ser tomados, como um espaço antes dos nomes das funções, senão os highlights não funcionam.
Fim Bom, acho que falei de tudo. Qualquer coisa que eu tenha esquecido, volto aqui e edito de novo. Ainda tenho que falar das vantagens e desvantagens, mas isso não faz parte do tutorial (ou faz?). De qualquer forma, fica aqui o fim da aula, você está dispensado e o resto é conversa de corredor.
Vantagens: Aqui são só algumas que eu pensei
- Você pode enviar seus jogos por qualquer e-mail, pra alguém que tenha o executável, afinal são só arquivos de texto, imagem, etc, enfim, não haverá aquela maldita proteção antivírus que barra seus executáveis.
- Com o mesmo raciocínio, pode publicar o código-fonte de seus jogos em sites, pra jogadores cuja rede é de extrema restrição a downloads.
- Outras pessoas podem modificar seus jogos com facilidade. Sei que muitos aqui vêem isso como desvantagem, mas lembrem-se que counter-strike foi uma modificação do half-life. Enfim, pode ser divertido ver o que outras pessoas farão com suas idéias.
- Se isso não te convenceu, use um sistema de encriptação com a senha dentro do executável, como uma constante. Com esses programas de decriptação, acaba sendo uma forma mais segura de proteger seus códigos do que incluí-los no executável.
- Você pode criar templates de objetos e usar em diversos jogos diferentes.
- Em pouco tempo você estará fera nessa forma de programar e um passo à frente pra aprender outras linguagens.
- Você pode criar suas próprias extensões.
- Organizar os objetos em arquivos separados pode facilitar a visualização de diversos objetos ao mesmo tempo.
- Importando os objetos ou executando arquivos externos, você pode alterar seus códigos em tempo real - isso mesmo, com o jogo rodando - bastando executar o arquivo novamente (em caso de importação, talvez fosse interessante deletar o objeto antes de importá-lo, o que é possível desde que você preveja essa opção desde a primeira versão).
Desvantagens conhecidas:
- Não há o manual do game maker à mão. Mas você pode ver as funções, com argumentos, aqui nesse tópico ou baixar o manual em pdf nesse outro.
- Scripts. Já falei bastante sobre isso.
Mais: O pulo do gato, não se ensina. Eis aqui um arquivo que serve como jogo genérico. Ele lê vários arquivos da extensão .saim e os executa. Pra selecionar o arquivo, use as setas (pra cima/pra baixo) ou o mouse. Pra selecionar e executar o arquivo, aperte espaço, enter ou dê um clique duplo. Se não houver um arquivo da extensão .saim na pasta, ele perguntará qual extensão você quer usar.
link
Última edição por saim em Qua 26 Out 2011, 11:26, editado 4 vez(es)
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Tutorial] Game genérico
Já ouvi falar desse método no Game Maker, só não me lembro onde, enfim o que importa é que funfa mesmo, e para quem já tem experiencia em GML não terá dúvida nem problemas, aaa quem não entendeu por que o código "var" eu explico: var serve para declarar uma variável descartável, depois quando eu tiver mais tempo posso explicar melhor por que agora estou meio ocupado. FLW!
= EDIT: ========================================================
É não será preciso eu dizer a descrição do código var pois seu tutorial está perfeito, então eu saquei bem para que isso aê serve, até acho que já fiz antes para executar códigos em um arquivo de texto, bom seu tutorial está ótimo e completo se eu não estiver enganado eu me lembrei e aprendi agora alguns tipos.
FLW!
= EDIT: ========================================================
É não será preciso eu dizer a descrição do código var pois seu tutorial está perfeito, então eu saquei bem para que isso aê serve, até acho que já fiz antes para executar códigos em um arquivo de texto, bom seu tutorial está ótimo e completo se eu não estiver enganado eu me lembrei e aprendi agora alguns tipos.
FLW!
Última edição por weslleyvieira em Qua 27 Abr 2011, 15:08, editado 1 vez(es)
Re: [Tutorial] Game genérico
Função inútil? Eu já fiz algo parecido. Tentei fazer um editor para os códigos embutido (Não queria usar o notepad), mas não consegui e deixei o projeto parado. Iria ser o RSS Maker ou Game Maker Engine.
Eu particularmente prefiro instalar o GM no meu pen drive. Mas para quem quer aprender, usar esse sistema será muito bom.
Agora, não sei se é proibido, pois é um Game Maker Pro completo, da pra fazer tudo assim.
FLWS!
Eu particularmente prefiro instalar o GM no meu pen drive. Mas para quem quer aprender, usar esse sistema será muito bom.
Agora, não sei se é proibido, pois é um Game Maker Pro completo, da pra fazer tudo assim.
FLWS!
Re: [Tutorial] Game genérico
Eu tenho um tutorial sobre variáveis na minha assinatura, quem quiser, pode dar uma olhada!weslleyvieira escreveu:quem não entendeu por que o código "var" eu explico: var serve para declarar uma variável descartável, depois quando eu tiver mais tempo posso explicar melhor por que agora estou meio ocupado. FLW!
Não deve ser proibido, senão haveriam formas de restringir. E não dá pra fazer TUDO. Além de ser muito mais trabalhoso, existem aquelas limitações mencionadas.Alex FC escreveu:Agora, não sei se é proibido, pois é um Game Maker Pro completo, da pra fazer tudo assim.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Tutorial] Game genérico
Moçada, fiz mudanças radicais no texto do tutorial e, em breve, adicionarei alguns exemplos.
Estou postando aqui embaixo pra chamar quem ainda não leu, quem já tinha lido a versão anterior e quem avalia se o tutorial deve permanecer aprovado ou não (particularmente, eu acho que agora sim, ele deveria estar aprovado).
Estou postando aqui embaixo pra chamar quem ainda não leu, quem já tinha lido a versão anterior e quem avalia se o tutorial deve permanecer aprovado ou não (particularmente, eu acho que agora sim, ele deveria estar aprovado).
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Tutorial] Game genérico
Adorei o tutorial! Obrigado por ter disponibilizado o syntax highlighter pro Notepad++.
Só essas partes que achei estranho:
No game maker, ao criar um recurso qualquer, ele recebe uma id que pode ser chamada ao longo de todo o jogo. Logo, trata-se de uma variável global.
No caso, seria uma constante global. Pode-se perceber que, mesmo usando sprite_replace ou sprite_assign, por exemplo, o valor continua sempre o mesmo.
Basicamente, trata-se de criar um executável que não faz nada além de ler arquivos de texto e executá-los. Pra isso, basta criar um arquivo no game maker, criar uma room e, no create event dessa room, você coloca:
- Código:
arquivoDoJogo=file_find_first(working_directory+"*.txt", fa_archive)
execute_file(arquivoDoJogo);
A working_directory não aponta o diretório do jogo, ela aponta o caminho de onde o jogo foi chamado. Se você chamar o jogo que está no drive "D" navegando pelo drive "C", ela apontará para o drive "C".
O local real do jogo é sempre o primeiro parâmetro de chamada (parameter_string(0)).
Valeu! Muito bom tuto!
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] Game genérico
Saim otimo tutorial to estudando ele para ver se consigo faser algo mas não consegui configurar meu notepad aqui um print da interface dele:
Você poderia me ajudar a configurar meu nottepad?
Baixei ele no link que você deixou(baixei ontem deve ser a ultima versão neh).
Eu ja comecei a entender como funciona ate ja fiz um teste de criar um objeto e cosegui sem CRTL+C/CRTL+V , mas digitar os codigos fica dificil d+ no bloco de notas.
Cara você esta de parabens li dois tutos seus muito bons mesmo impossivél não aprender!
Continue assim!
Você poderia me ajudar a configurar meu nottepad?
Baixei ele no link que você deixou(baixei ontem deve ser a ultima versão neh).
Eu ja comecei a entender como funciona ate ja fiz um teste de criar um objeto e cosegui sem CRTL+C/CRTL+V , mas digitar os codigos fica dificil d+ no bloco de notas.
Cara você esta de parabens li dois tutos seus muito bons mesmo impossivél não aprender!
Continue assim!
GabrielXavier- Games Ranking :
Notas recebidas : A
Data de inscrição : 25/02/2012
Reputação : 45
Número de Mensagens : 403
Prêmios :
x 0 x 1 x 0
x 0 x 1 x 1
x 0 x 0 x 0
Plataformas :- Game Maker Studio 2.0
Re: [Tutorial] Game genérico
Oi, Gabrielgeh!
Faz tempo que usei uma versão em português... Como tem esse erro nas palavras "importar" e "exportar", presumi que haveriam mais erros. Sem falar que os tutoriais da internet estão todos em inglês. Mas DEVE ser em visualizar - é um nome parecido com "view" e está na mesma posição, a partir da esquerda. A opção "user-defined-language" é a décima opção, o que equivale à última do segundo conjunto de opções. Aí, você vai ter que verificar se a diferença entre "exportar" e "importar" já foi corrigida ou não...
Uma coisa que vai facilitar a digitação é ir em settings (configurações) - preferences - Backup/Auto-Completion e, em Auto-Completion, escolher "word completion" e escolher "desde o primeiro caractere". Isso não vai trazer de volta a lista de constantes e funções do game maker, que nós nos acostumamos tanto, mas vai fazer com que CADA palavra que você tenha digitado no arquivo apareça na lista de auto-completar. Isso evita que você erre o nome de variáveis. Gostei tanto que agora eu programo no notepad++ mesmo estando em casa, e depois copio-colo pro game maker.
Claro que eu coloquei o caminho em inglês, porque não tenho a versão em português aqui, mas não é difícil traduzir.
Outra coisa que eu acho que o notepad++ é superior ao game maker é a função "search in all opened files". Se você está programando um jogo razoavelmente complexo, pode abrir vários objetos ao mesmo tempo. Aí, se você quer mudar o nome de uma variável ou sei lá, alguma coisa que você sabe que aparece em vários objetos - mas não tem certeza se lembra em quais são eles - pode abrir todos ao mesmo tempo e usar essa função. É meio auto-explicativo, aparece uma lista no pé da página com a linha em que o texto aparece, dentro de uma aba com o nome do arquivo em que ele está.
Por fim, uma opção bem útil também é clicar com o botão direito na aba do arquivo e selecionar a opção "clone to other view". Você pode trabalhar simultaneamente em trechos da primeira e da última linha de um arquivo, que jamais caberiam na mesma tela. Também já salvou minha vida, algumas vezes...
Faz tempo que usei uma versão em português... Como tem esse erro nas palavras "importar" e "exportar", presumi que haveriam mais erros. Sem falar que os tutoriais da internet estão todos em inglês. Mas DEVE ser em visualizar - é um nome parecido com "view" e está na mesma posição, a partir da esquerda. A opção "user-defined-language" é a décima opção, o que equivale à última do segundo conjunto de opções. Aí, você vai ter que verificar se a diferença entre "exportar" e "importar" já foi corrigida ou não...
Uma coisa que vai facilitar a digitação é ir em settings (configurações) - preferences - Backup/Auto-Completion e, em Auto-Completion, escolher "word completion" e escolher "desde o primeiro caractere". Isso não vai trazer de volta a lista de constantes e funções do game maker, que nós nos acostumamos tanto, mas vai fazer com que CADA palavra que você tenha digitado no arquivo apareça na lista de auto-completar. Isso evita que você erre o nome de variáveis. Gostei tanto que agora eu programo no notepad++ mesmo estando em casa, e depois copio-colo pro game maker.
Claro que eu coloquei o caminho em inglês, porque não tenho a versão em português aqui, mas não é difícil traduzir.
Outra coisa que eu acho que o notepad++ é superior ao game maker é a função "search in all opened files". Se você está programando um jogo razoavelmente complexo, pode abrir vários objetos ao mesmo tempo. Aí, se você quer mudar o nome de uma variável ou sei lá, alguma coisa que você sabe que aparece em vários objetos - mas não tem certeza se lembra em quais são eles - pode abrir todos ao mesmo tempo e usar essa função. É meio auto-explicativo, aparece uma lista no pé da página com a linha em que o texto aparece, dentro de uma aba com o nome do arquivo em que ele está.
Por fim, uma opção bem útil também é clicar com o botão direito na aba do arquivo e selecionar a opção "clone to other view". Você pode trabalhar simultaneamente em trechos da primeira e da última linha de um arquivo, que jamais caberiam na mesma tela. Também já salvou minha vida, algumas vezes...
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Tutorial] Game genérico
Saim consegui colocar o arquivo!
Se outro membro tiver dificuldade o caminho é:
Linguagem/Define you Language.../Exportar...
Ai você seleciona o arquivo que o Saim disponibilizou.
Obrigado pela ajuda Saim!
Abraços.
Se outro membro tiver dificuldade o caminho é:
Linguagem/Define you Language.../Exportar...
Ai você seleciona o arquivo que o Saim disponibilizou.
Obrigado pela ajuda Saim!
Abraços.
GabrielXavier- Games Ranking :
Notas recebidas : A
Data de inscrição : 25/02/2012
Reputação : 45
Número de Mensagens : 403
Prêmios :
x 0 x 1 x 0
x 0 x 1 x 1
x 0 x 0 x 0
Plataformas :- Game Maker Studio 2.0
Tópicos semelhantes
» Alquén pode me passar um tutorial de como criar um game do Naruto no Game maker 7.0 pro?
» [Engine/Tutorial] Game Patching 1.3
» Tutorial RPG no Game Maker
» Tutorial: O que é ser um game designer?
» Tutorial - Strings no Game Maker
» [Engine/Tutorial] Game Patching 1.3
» Tutorial RPG no Game Maker
» Tutorial: O que é ser um game designer?
» Tutorial - Strings no Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos