Conectar-se
Quem está conectado
33 usuários online :: 1 usuário cadastrado, Nenhum Invisível e 32 Visitantes

jailson_dante

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 08/05/2008
Número de Mensagens : 36
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 7

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://www.deploy.net.br

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

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)
avatar
Ranking : Nota B
Notas recebidas : B-C-A-C
Data de inscrição : 18/09/2008
Número de Mensagens : 2490
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 1 Insignia 3x 0
Reputação : 52

Prêmios
   : 0
   : 2
   : 1
Ver perfil do usuáriohttp://xcreatorgames.weebly.com/

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

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
avatar
Data de inscrição : 08/05/2008
Número de Mensagens : 36
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 7

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://www.deploy.net.br

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

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.
avatar
Data de inscrição : 10/08/2009
Número de Mensagens : 54
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

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

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
avatar
Data de inscrição : 07/11/2008
Número de Mensagens : 521
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   : 1
Ver perfil do usuáriohttp://wac2007.blogspot.com/

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

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/
avatar
Data de inscrição : 10/08/2009
Número de Mensagens : 54
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

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

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
avatar
Data de inscrição : 10/08/2009
Número de Mensagens : 54
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

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

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
avatar
Data de inscrição : 16/10/2008
Número de Mensagens : 304
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuáriohttp://www.gmbr.forumeiros.com

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

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
avatar
Data de inscrição : 17/12/2009
Número de Mensagens : 217
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

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.
avatar
Data de inscrição : 22/11/2009
Número de Mensagens : 1035
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 4

Prêmios
   :
   :
   :
Ver perfil do usuáriohttp://www.recursos-mania.forumeiros.com

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

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!
avatar
Ranking : Nota E
Notas recebidas : E
Data de inscrição : 26/01/2010
Número de Mensagens : 154
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

em Sab 13 Mar 2010, 07:14
Aqui como eu faço pra criar um "Poder" do player?
avatar
Data de inscrição : 18/07/2009
Número de Mensagens : 922
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 2

Prêmios
   :
   :
   :
Ver perfil do usuário

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

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:
avatar
Data de inscrição : 21/09/2010
Número de Mensagens : 45
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

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

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.
avatar
Data de inscrição : 08/06/2011
Número de Mensagens : 35
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

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.
'
avatar
Data de inscrição : 15/08/2010
Número de Mensagens : 1597
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 147

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://spyreserver.16mb.com

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

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?
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum