Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Qualidade Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por joaoneto em Seg 02 Fev 2009, 14:15

Na aula passada eu prometi que aprenderíamos a fazer um Pong. Como eu acho que Pong é do tempo que eu era criança(a uns 25 anos atrás) então não acho que a galera de hoje queria fazer esse tipo de jogo.
Então, eu resolvi dar um passo um pouco maior, e fazermos logo um exemplo com movimento tipo RPG, com clique de mouse e tudo mais. Não serão necessários muitos eventos, nem código. As coisas começarão a complicar mais para frente, quando trabalharmos com banco de dados. Vamos começar.

Vamos começar um projeto novo. Para deixar o projeto com o “básico” para iniciar, siga as instruções da segunda lição, aqui.

Estando com o projeto iniciado, você com certeza já sabe que devemos iniciar por um objeto Controlador. No exemplo do Chat criamos um ObjStart. Agora, criaremos um ObjControle. É interessante seguir uma nomenclatura para não se perder na hora que o seu projeto estiver enorme.Vou explicar qual será nosso procedimento:

Criaremos 3 Objetos. O ObjControle ficará responsável por logar no Listener, avisar a todos que entramos, controlar nossos movimentos, avisar a todos aonde estamos e por fim, avisar a todos que saímos.
Os outros dois objetos serão idênticos, diferenciados apenas pelo nome. Um deles será o nosso player, o outro será o “Clone” do(s) player(s) que estiver(em) logado(s) no Listener também.

Vamos começar então. Crie um objeto com o nome de ObjControle. Adicione a ele os seguintes eventos:

  • Create
  • Step
  • Global Left released
  • Press

Em todos eles, Adicione um Execute Code. Agora, Coloque os códigos conforme abaixo:
Create:
Código:
//Iniciamos a SOC
soc_init();
//Tentamos Conectar
if(!player_connect(8040, "LocalHost")) {
    show_message("A conexão Falhou.");
    game_end();
    exit;
  }
//Enviamos a Mensagem de que entramos, e qual é a nossa posição atual
message_send(1, 0, pack((objPlayer).x, 2)+pack((objPlayer).y, 2));
Step:
Código:
// checamos se chegou alguma mensagem
if(message_receive()) {
  switch(message_id())
  {
  case 1:
    // Se for um novo player, dizemos a ele que existimos
    message_send(2, message_player(), pack((objPlayer).x, 2)+pack((objPlayer).y, 2));
  case 2:
    // Se for um novo player, ou algum já existente dizendo que existe
    // temos que criar um novo objPlayerClone
    o=instance_create(xstart, ystart, objPlayerClone);
    (o).player=message_player();
    (o).target_x=unpack(message_value(), 1, 2);
    (o).target_y=unpack(message_value(), 3, 2);
    break;
  case 3:
    // Atualizando a posição dos Players existentes
    with(objPlayerClone) {
      if(player==message_player()) {
        target_x=unpack(message_value(), 1, 2);
        target_y=unpack(message_value(), 3, 2);
      }
    }
    break;
  case 4:
    // Quando algum sair, destruir seu clone
    with(objPlayerClone) {
      if(player==message_player()) {
        instance_destroy();
      }
    }
    break;
  }
}
Global Left released:
Código:
//Achamos a posição do mouse
posX = mouse_x;
posY = mouse_y;
// Setamos nosso Player na posição do clique
(objPlayer).target_x=posX;
(objPlayer).target_y=posY;
// depois avisamos a todos os players que mudamos de posição
message_send(3, 0, pack(posX, 2)+pack(posY, 2));
Press
Código:
// Avisamos a todos que saimos
message_send(4, 0, "");
// Desconectamos...
player_disconnect();
// ... Finalizamos a SOC...
soc_free();
// ... E finalizamos o Jogo.
game_end();
Vamos a algumas explicações:
Você deve ter notado dois novos comandos, pack e unpack.

pack(numero, tamanho);
retorna o numero compactado no tamanho especificado.
unpack(valor, posição, tamanho);
O inverso do pack. Retorna o numero real descompactado no tamanho a partir da posição. Lembrar que a posição inicial é 1.

O uso do pack é exatamente para diminuir o tamanho do objeto que será passado para o Listener, aumentando assim sua performance de leitura e conseqüente resposta. Como os códigos estão bem comentados, e com certeza você já se familiarizou com eles, não há necessidade de explica-los.

2º passo: Vamos criar agora nossos Objetos Player. Eu aconselho a usar sprites diferentes, para que fique fácil identificar quem é player e quem é clone. O GM possui alguns sprites de modelo, mas use os que você quiser, a seu gosto.
Crie um objeto com o nome de objPlayer. Adicione a ele dois Eventos:

  • Create
  • Step

Adicione em cada um um Execute code e neles os códigos abaixo:

Create:
Código:
//Iniciando as Variáveis usadas por ele
player=-1;
target_x=x;
target_y=y;
Step:
Código:
// Calculamos se onde o objeto está em relação aos pontos passados
dist=point_distance(x, y, target_x, target_y);
//Se for maior..
if(dist>0) {
  // Movemos o objeto até ele
  direction=point_direction(x, y, target_x, target_y);
  speed=min(dist, 4);
} else {
  // Caso contrário paramos.
  speed=0;
}
Ao finalizar, replique o objeto e renomeie a réplica para objPlayerClone.

Eu sei, você está louco pra ver o char andando pela tela, e vários chars andando junto com ele. Após tudo que fizemos aí em cima, se tudo estiver correto, faça como na aula passada. Crie uma room, e coloque nela os objetos ObjControle e o ObjPlayer. Compile o projeto, execute e configure o DirectServer, e execute duas ou mais instancias do Client.exe.
A imagem abaixo foi o meu teste, olha só:


Finalmente começamos a fazer “jogos”. Não é mesmo?? Mesmo ainda havendo bugs e mais bugs, pense em como fazer um game Online com o GM está cada vez mais parecendo simples. E olha que eu nem comecei ainda...
Vou dar uma dica: quer fazer o teste com algum amigo?? Simples demais. Se você não sabe como configurar o no-ip, acesse o link abaixo:
http://www.jogosrpg.com.br/forum/index.php/topic,219.0.html
Após configurar o no-ip, mude o script que está no Create, do objeto ObjControle, trocando "LocalHost" pelo endereço do seu no-ip. Abra e configure o DirectServer, e mande o pacote(exe + dll) para o seu amigo. Bugs a parte, é apenas para que você entenda como funciona a criação de um game Online no GM, e em qualquer outro maker, pois a idéia acima(do clone) é exatamente o que acontece em todo jogo Online.

Que tal começarmos a dificultar as coisas? Próxima aula eu começarei a falar de banco de dados. Seus players podem ter contas, e acessar o jogo de qualquer lugar !!

Até a próxima.


Última edição por joaoneto em Qua 04 Fev 2009, 14:15, editado 1 vez(es)

joaoneto

Número de Mensagens : 36
Idade : 39
Data de inscrição : 08/05/2008
Reputação : 7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.deploy.net.br

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por vinians em Ter 03 Fev 2009, 11:51

Otimo tutorial, essa DLL parece muito boa mesmo. Só algumas perguntas:
1-Essa DLL é melhor que 39DLL ?
2-É uma DLL free ou seja podemos distribuir com nossos jogos?
3-Sobre o tutorial, quando eu crio um novo Player vc envia uma mensagem para todos os players com o valor '0' quando cada player recebe esta mensagem o a própria DLL da um valor para o player?
Valeu

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por joaoneto em Ter 03 Fev 2009, 13:18

  • na verdade ela não é "melhor" que a 39Dll, ela é mais simples de usar.
  • Sim, ela é free.
  • Quando se passa 0, significa que todos os players logados receberão a mensagem. Se for passado um ID específico( por exemplo 1 = Server ) Significa que só aquele player receberá a mensagem. Se enviar como no exemplo ( Player = 1 ) O servidor receberá uma mensagem para ele, e não replicará a ninguém.

O código usado nesta aula permite que haja apenas 2 players. observe o script que valida o ID da mensagem que chegou. para que haja mais players este código tem que conter uma validação do ID do player, Código esse que será explicado nas próximas lições.

joaoneto

Número de Mensagens : 36
Idade : 39
Data de inscrição : 08/05/2008
Reputação : 7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.deploy.net.br

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por patofu3.0 em Sex 18 Set 2009, 13:15

ei o meu da isso alguem me ajuda
___________________________________________
FATAL ERROR in
action number 1
of Create Event
for object ObjControle:

COMPILATION ERROR in code action
Error in code at line 2:
soc_init();

at position 2: Unknown function or script: soc_init

patofu3.0

Número de Mensagens : 54
Data de inscrição : 10/08/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por wac2007 em Sex 18 Set 2009, 13:58

patofu3.0 escreveu:ei o meu da isso alguem me ajuda
___________________________________________
FATAL ERROR in
action number 1
of Create Event
for object ObjControle:

COMPILATION ERROR in code action
Error in code at line 2:
soc_init();

at position 2: Unknown function or script: soc_init

Seu erro é que deu conflito no script. Tipow tenta ver se o nome do script num tah errado. Se o nome é soc_init() ev se num tah escrito soc_ini lembre-se que liguagem de programação é case-sensitive ;)

Flws o/

wac2007

Número de Mensagens : 521
Idade : 23
Data de inscrição : 07/11/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   : 1

http://wac2007.blogspot.com/

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por patofu3.0 em Sex 18 Set 2009, 14:04

ta certo o ta assim:

//Iniciamos a SOC
soc_init();
//Tentamos Conectar
if(!player_connect(8040, "LocalHost")) {
show_message("A conexão Falhou.");
game_end();
exit;
}
//Enviamos a Mensagem de que entramos, e qual é a nossa posição atual
message_send(1, 0, pack((objPlayer).x, 2)+pack((objPlaye

patofu3.0

Número de Mensagens : 54
Data de inscrição : 10/08/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por patofu3.0 em Sex 18 Set 2009, 15:19

gente deu certomas so que ao contrario de entrar so um entra tres players tipo
new conection from 127.00.1 assigned to player id 2
new conection from 127.00.1 assigned to player id 3
new conection from 127.00.1 assigned to player id 4
isso so com uma pessoa online eu e depois que abro outra tela copmo na imagem do tutorial ai aparece ...to player id 5...(repete o de cima sendo com id 6,7)
depois disso os dois players nao so diferentes e nao andam um na tela do outroquando um anda o outro fica parado sem falar que e o mesmo sprite de ambos mas quando configurei coloquei para ser diferente

patofu3.0

Número de Mensagens : 54
Data de inscrição : 10/08/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por lipe1994 em Sab 28 Nov 2009, 21:02

Bom,gostei do Tuto e não sei se estou revivendo :p (Mais tuto pode reviver não é??)

Como eu faria para colocar mais de 2 players???
O João neto Não vai responder,mais alguem pode me ajudar??Happy


GRATO

lipe1994

Número de Mensagens : 304
Idade : 22
Data de inscrição : 16/10/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://www.gmbr.forumeiros.com

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por juao230 em Qui 25 Fev 2010, 13:18

Quem nem o cara ai de cima, tem um problema...

Nem um dos dos links que ele passou pegou no meu, os dois deram erro. Sad
Se puder ajeita ai o link por favor.

juao230

Número de Mensagens : 217
Data de inscrição : 17/12/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por Suadao em Dom 28 Fev 2010, 09:55

No meu também não pegou o link,
Que pena que o joaoneto
não visita mais o fórum :/

Valew!

Suadao

Número de Mensagens : 1035
Idade : 26
Data de inscrição : 22/11/2009
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://www.recursos-mania.forumeiros.com

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por joorock12 em Sab 13 Mar 2010, 07:14

Aqui como eu faço pra criar um "Poder" do player?

joorock12

Ranking : Nota E
Número de Mensagens : 154
Idade : 20
Data de inscrição : 26/01/2010
Notas recebidas : E
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por Adriel em Qua 01 Set 2010, 13:13

O meu tá dando esse erro :
Spoiler:

___________________________________________
ERROR in
action number 1
of Create Event
for object objStart:

In script message_send:
Error in code at line 14:
/* message_send( id, player, value);Sends a message.id - The message id.player - The player.value - The string to send.*/var buf, cur, size, i;// Create a buffer.buf=buffer_create();// Fills it.buffer_add(buf, global.SOC_BYTE, argument0);if(global.___SOC_PLAYER_HOST) { if(argument3==0) { buffer_add(buf, global.SOC_SHORT, 1); } else { buffer_add(buf, global.SOC_SHORT, argument3); }} else { buffer_add(buf, global.SOC_SHORT, argument1);}buffer_add(buf, global.SOC_BYTE, min(255, string_length(argument2)));buffer_add(buf, global.SOC_STRING, min(255, string_length(argument2)), argument2);// If we are hosting...if(global.___SOC_PLAYER_HOST) { // If the message is for all players... if(argument1==0) { size=ds_map_size(global.___SOC_PLAYER_MAP); cur=ds_map_find_first(global.___SOC_PLAYER_MAP); // Loop through all players and send the message to them. for(i=0; i<size; i+=1) { if(cur!=argument3&&ds_map_exists(global.___SOC_PLAYER_MAP, cur)) { soc_send(ds_map_find_value(global.___SOC_PLAYER_MAP, cur), buf); } cur=ds_map_find_next(global.___SOC_PLAYER_MAP, cur); } } else { // Else send the message to the player is directed to. if(ds_map_exists(global.___SOC_PLAYER_MAP, argument1)) { soc_send(ds_map_find_value(global.___SOC_PLAYER_MAP, argument1), buf); } }} else { // Just send it to the server, and let it handle the message. soc_send(global.___SOC_PLAYER_SOCKET, buf);}// Destroy the buffer.buffer_destroy(buf);
^
at position 11: Unknown variable ___SOC_PLAYER_HOST

Maus se estou revivendo, mas eu preciso de ajuda :oops:

Adriel

Número de Mensagens : 922
Idade : 18
Data de inscrição : 18/07/2009
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por shaedol em Sex 24 Set 2010, 23:02

Ta dando isso alguem por favor me ajuda:

___________________________________________
ERROR in
action number 1
of Create Event
for object objControle:

Error defining an external function.

shaedol

Número de Mensagens : 45
Data de inscrição : 21/09/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por joaomalhao em Qua 22 Jun 2011, 14:48

quando da esse erro do 'Error defining an external function'
voce tem de ir á pasta onde guardou o jogo juntamente com o DirectServer
e abrir o direct server escrever '8040' e carregar 'enter' depois vai aperecer 'y/n' voce carrega 'y' depois sim abre o jogo.

Ah eu tambem tenho uma duvida quando abro o jogo aparece 'Error in code at line 2:
case 2:
^
at position 9: Case statement only allowed inside switch statement.
'

joaomalhao

Número de Mensagens : 35
Data de inscrição : 08/06/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por Isaque Onix em Sab 14 Jan 2012, 20:06

o link ta quebrado!
O link ta quebrado, não da pra entrar, mais da pra fazer sem o download? oque eu preciso?

Isaque Onix

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

Qualidade Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Mensagem por Conteúdo patrocinado Hoje à(s) 08:54


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum