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
Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
+23
Ralphed
dudu1997
Joker
jaws
Lauro
Henrique_GJ
Mr. Kaleb
Gabreel
Denis Lemos
Furious God
shaedol
jpaulo
tavares199551
doidobr
patofu3.0
CPinheiro
André Gustavo
Natch
ETraud
valfogo
Hélio
vinians
joaoneto
27 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 2
Página 1 de 2 • 1, 2
Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
Na aula passada iniciamos nosso aprendizado sobre o uso da SOC – Simple Online Communication, uma das melhores Dlls de TCP já feitas para o GM.
Hoje iremos fazer um sistema simples de comunicação, um Chat. Com poucas linhas de código, e usando o DirectServer (usado na aula passada como servidor) poderemos fazer um chat simples.
Vamos usar o exemplo que foi construído na aula passada. Ele já possui a soc.dll, os scripts, e um objeto de inicialização. Nesta aula, para poder “escrever” na tela, estaremos trabalhando com o Evento Draw. Vamos lá.
Abra o projeto Client, aquele que foi construído na aula passada. No objeto objStart, no evento Create, abra o Execute Code. Adicionaremos a ele algum código.Antes do código existente, adicione as variáveis nome e texto, Assim:
Para que pelo menos os usuários possam se “identificar” no chat, vamos colocar um get_string, que recuperará o nome do usuário para ser usado depois nas mensagens.
Vamos falar sobre comunicação. Para se comunicar, usamos os seguintes comandos da SOC:
message_send( id, player, valor);
Envia uma mensagem a um player específico, com ID e valor. Se player for 0(zero) a mensagem é enviada a todos os que estiverem conectados(pensou na possibilidade de uma sala privada??)
message_receive();
Checa se chegou alguma mensagem.
message_id();
retorna o ID da ultima mensagem recebida.
message_player();
retorna o ID do player que enviou a ultima mensagem.
message_value();
retorna o valor da ultima mensagem recebida.
Usando os comandos acima, é que vamos fazer toda a comunicação entre o Listener e o Client, e de Client para Client.
Não pense que, usando 0 no player, você não precisa do Listener, muito pelo contrário, é ele que, ao receber uma mensagem com player = 0 é que redireciona a mensagem para todos os players online.
Voltemos ao Código. A primeira coisa a fazer é “avisar” a todos os players online que você entrou. Para isso, coloque o seguinte código logo após o código já existente:
Então vejamos, passo a passo o código acima:
Agora a parte importante. Não basta apenas dizer que chegamos, precisamos averiguar a todo momento se chegou alguma mensagem, e poder digitar textos e envia-los. Vamos então.
Adicione um Evento Step e nele um Execute Code. Agora adicione este código:
Vamos analizar o que foi feito ali em cima:
Agora, vamos exibir as mensagens que chegarem.
Adicione um evento Draw, nele um execute Code e adicione o Código:
Adicione um Evento Press , Nele um Execute code e coloque o seguinte código:
Fizemos isso por uma simples razão:
“A string enviada para o Listener, mesmo estando com player = 0, não retorna para quem a enviou”.
Ou seja, devemos fazer do Lado Client aquilo que será feito do Lado Listener, para que vejamos o que aconteceu. Se o passo acima não for feito, todos os outros players verão a sua mensagem, menos você. Ao final, usamos o message_send, para enviar o que digitamos.
A esta altura, podemos testar nosso Chat. Mas antes, para evitar erros, objetos instanciados na memória entre outras coisas, vamos adicionar um evento de saída.
Adicione um Evento Press , coloque um Execute code e nele o código:
Para podermos testar, precisamos compilar o executável, pois vamos abrir duas instancias do Client.
Para compilar, vá no menu File -> Create Executable, como na figura abaixo:
Após compilar, execute o Directserver(os passos de execução foram explicados na aula anterior) e execute duas instancias do Client.exe. Ao clicar em OK em uma delas, na outra aparecerá o texto que “o fulano entrou na sala.”. experimente digitar textos nas duas janelas, apertar enter e, para sair, não feche no X da janela, aperte ESC(nosso comando de saída, lembra??)
Acabamos de entrar no que eu chamo de “esqueleto” de um jogo Online. Pense, você consegue se conectar a um servidor (Listener), dizer quem você é, enviar uma mensagem para que todos os que estiverem conectados possam ler, e ler as mensagens que todos enviarem.
Nosso chat ficou meia-boca, dava pra fazer bem melhor. Mas a intenção da aula foi concluída, dar os primeiros passos na comunicação entre Clients, através do Listener, enviando e recebendo informações.
Isto que foi mostrado aqui é a ponta da ponta do Iceberg. O GM é capaz de muito mais, mas muito mesmo, bastando saber como desenvolver. Alguns dirão:
“Mas pra quê que eu vou perder tempo com isso, se o Netplay me dá isso pronto??”
Eu sou um profissional. Me tornei profissional por querer sempre mais, aprender mais, inovar mais, e melhorar mais. Usar GM pra fazer jogo é coisa de quem já sabe o que quer, não apenas tenta. E eu estou aqui por estes, que sabem o que querem, e conseguirão.
Por hoje é só. Na próxima aula, veremos como é simples fazer um “Pong” usando o SOC.
Até lá.
Hoje iremos fazer um sistema simples de comunicação, um Chat. Com poucas linhas de código, e usando o DirectServer (usado na aula passada como servidor) poderemos fazer um chat simples.
Vamos usar o exemplo que foi construído na aula passada. Ele já possui a soc.dll, os scripts, e um objeto de inicialização. Nesta aula, para poder “escrever” na tela, estaremos trabalhando com o Evento Draw. Vamos lá.
Abra o projeto Client, aquele que foi construído na aula passada. No objeto objStart, no evento Create, abra o Execute Code. Adicionaremos a ele algum código.Antes do código existente, adicione as variáveis nome e texto, Assim:
- Código:
nome = "";
texto = "";
- Código:
for(i=0; i<28; i+=1) {
texto[i]="";
}
Para que pelo menos os usuários possam se “identificar” no chat, vamos colocar um get_string, que recuperará o nome do usuário para ser usado depois nas mensagens.
- Código:
nome=get_string("Qual o seu nome?", "Maker "+string(floor(random(1000))));
Vamos falar sobre comunicação. Para se comunicar, usamos os seguintes comandos da SOC:
message_send( id, player, valor);
Envia uma mensagem a um player específico, com ID e valor. Se player for 0(zero) a mensagem é enviada a todos os que estiverem conectados(pensou na possibilidade de uma sala privada??)
message_receive();
Checa se chegou alguma mensagem.
message_id();
retorna o ID da ultima mensagem recebida.
message_player();
retorna o ID do player que enviou a ultima mensagem.
message_value();
retorna o valor da ultima mensagem recebida.
Usando os comandos acima, é que vamos fazer toda a comunicação entre o Listener e o Client, e de Client para Client.
Não pense que, usando 0 no player, você não precisa do Listener, muito pelo contrário, é ele que, ao receber uma mensagem com player = 0 é que redireciona a mensagem para todos os players online.
Voltemos ao Código. A primeira coisa a fazer é “avisar” a todos os players online que você entrou. Para isso, coloque o seguinte código logo após o código já existente:
- Código:
message_send(1, 0, nome+" entrou na sala.");
- Código:
nome = "";
texto = "";
for(i=0; i<28; i+=1) {
texto[i]="";
}
nome=get_string("Qual o seu nome?", "Maker "+string(floor(random(1000))));
//Iniciando o Socket
soc_init();
//Conectando ao servidor
if (!player_connect(8040, "localhost")) {
show_message("Falha ao Conectar no servidor.")
soc_free();
game_end();
}
message_send(1, 0, nome+" entrou na sala.");
Então vejamos, passo a passo o código acima:
- Ao iniciar, declaramos as variáveis que serão usadas nos textos.
- Recuperamos o nome do player.
- Iniciamos a Dll.
- Tentamos conectar(o qual se não conseguir encerra a aplicação).
- Enviamos uma mensagem que entramos na sala.
Agora a parte importante. Não basta apenas dizer que chegamos, precisamos averiguar a todo momento se chegou alguma mensagem, e poder digitar textos e envia-los. Vamos então.
Adicione um Evento Step e nele um Execute Code. Agora adicione este código:
- Código:
// Checamos se alguma mensagem chegou
if(message_receive()) {
switch(message_id())
{
case 1:
// Se sim, colocaremos ela no array de strings
// Primeiro movemos todos para cima
for(i=0; i<27; i+=1) {
texto[i]=texto[i+1];
}
// Finalmente adicionamos a string que chegou
texto[27]=message_value();
break;
}
}
Vamos analizar o que foi feito ali em cima:
- Validamos se chegou alguma mensagem. Se sim:
- Usamos um case para saber se é o ID de mensagem que esperávamos. Da forma como foi feito no case, podemos enviar mensagens diferentes, com propósitos diferentes.
- Subimos os textos na fila do array.
- Colocamos o texto que chegou no Array.
Agora, vamos exibir as mensagens que chegarem.
Adicione um evento Draw, nele um execute Code e adicione o Código:
- Código:
// Desenharemos todas as linhas do array
for(i=0; i<28; i+=1) {
draw_text(10, 10+i*16, texto[i]);
}
// finalmente desenhamos o que se está digitando
draw_text(10, 454, ">> "+keyboard_string);
Adicione um Evento Press
- Código:
//Primeiro subimos as strings
for(i=0; i<27; i+=1) {
texto[i]=texto[i+1];
}
// finalmente colocamos a string escrita, mais o nome.
texto[27]=nome+": "+keyboard_string;
// agora a enviamos
message_send(1, 0, nome+": "+keyboard_string);
keyboard_string = "";
Fizemos isso por uma simples razão:
“A string enviada para o Listener, mesmo estando com player = 0, não retorna para quem a enviou”.
Ou seja, devemos fazer do Lado Client aquilo que será feito do Lado Listener, para que vejamos o que aconteceu. Se o passo acima não for feito, todos os outros players verão a sua mensagem, menos você. Ao final, usamos o message_send, para enviar o que digitamos.
A esta altura, podemos testar nosso Chat. Mas antes, para evitar erros, objetos instanciados na memória entre outras coisas, vamos adicionar um evento de saída.
Adicione um Evento Press
- Código:
// Dizemos aos outros players que estamos saindo.
message_send(1, 0, nome+" saiu.");
// Desconectamos do Server.
player_disconnect();
// desalocamos a DLL.
soc_free();
// e finalizamos o jogo.
game_end();
Para podermos testar, precisamos compilar o executável, pois vamos abrir duas instancias do Client.
Para compilar, vá no menu File -> Create Executable, como na figura abaixo:
Após compilar, execute o Directserver(os passos de execução foram explicados na aula anterior) e execute duas instancias do Client.exe. Ao clicar em OK em uma delas, na outra aparecerá o texto que “o fulano entrou na sala.”. experimente digitar textos nas duas janelas, apertar enter e, para sair, não feche no X da janela, aperte ESC(nosso comando de saída, lembra??)
Acabamos de entrar no que eu chamo de “esqueleto” de um jogo Online. Pense, você consegue se conectar a um servidor (Listener), dizer quem você é, enviar uma mensagem para que todos os que estiverem conectados possam ler, e ler as mensagens que todos enviarem.
Nosso chat ficou meia-boca, dava pra fazer bem melhor. Mas a intenção da aula foi concluída, dar os primeiros passos na comunicação entre Clients, através do Listener, enviando e recebendo informações.
Isto que foi mostrado aqui é a ponta da ponta do Iceberg. O GM é capaz de muito mais, mas muito mesmo, bastando saber como desenvolver. Alguns dirão:
“Mas pra quê que eu vou perder tempo com isso, se o Netplay me dá isso pronto??”
Eu sou um profissional. Me tornei profissional por querer sempre mais, aprender mais, inovar mais, e melhorar mais. Usar GM pra fazer jogo é coisa de quem já sabe o que quer, não apenas tenta. E eu estou aqui por estes, que sabem o que querem, e conseguirão.
Por hoje é só. Na próxima aula, veremos como é simples fazer um “Pong” usando o SOC.
Até lá.
Última edição por joaoneto em Qua 04 Fev 2009, 14:14, editado 1 vez(es)
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
Minha nossa, ótimo tutorial, não só pelo conteúdo, mais pela forma como você explica. Espero fazer meu RPG On Line rapidamente com suas explicações. Parabéns!!!!!!
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
Realmente Muito boM!
quando eu começei no GM free eu usava seu tutorial SEMPRE
mas quando baixei o GM pro, eu aprendi a me virar um pouco...
sem querer ofender mas preferia suas aulas antigas xD
quando eu começei no GM free eu usava seu tutorial SEMPRE
mas quando baixei o GM pro, eu aprendi a me virar um pouco...
sem querer ofender mas preferia suas aulas antigas xD
Hélio- Data de inscrição : 02/06/2008
Reputação : 0
Número de Mensagens : 1010
Prêmios :
x 0 x 0 x 0
x 0 x 1 x 0
x 0 x 0 x 0
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
Eu fico feliz em saber que você leu minhas aulas quando eu começei com o GM, a muito tempo atrás. Realmente elas poderiam parecer mais interessantes mesmo pois eu tratava dos detalhes do GM, como contruir cenários, falei muito sobre colisão e até comecei o esqueleto de um simples jogo de Plataforma 2D.smeraudo escreveu:Realmente Muito boM!
quando eu começei no GM free eu usava seu tutorial SEMPRE
mas quando baixei o GM pro, eu aprendi a me virar um pouco...
sem querer ofender mas preferia suas aulas antigas xD
Mas os tempos mudam. Fazer um game Online com certeza é uma curiosidade grande de muitos, e estou aqui pra tentar facilitar a coisa.
Mesmo assim obirgado, tentarei encontrar nos meus arquivos as primeiras aulas e quem sabe eu não as posto também.
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
FIko Simplesmente... MARA!
dahora, lets continue
dahora, lets continue
valfogo- Data de inscrição : 16/01/2009
Reputação : 0
Número de Mensagens : 44
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
___________________________________________
ERROR in
action number 1
of Create Event
for object objStart:
Error defining an external function.
????
ERROR in
action number 1
of Create Event
for object objStart:
Error defining an external function.
????
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
A dll SOC deve estar na pasta do seu projeto, junto com ele.ETraud escreveu:___________________________________________
ERROR in
action number 1
of Create Event
for object objStart:
Error defining an external function.
????
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
mais uma óptima aula...
*não sei se estou a fazer algo de errado em reviver esses tópicos, mas é que eu estou a ler essas aulas agora...
E ler um tópico, aprender com ele, e depois não agradecer dizendo que leu, isso é mau...
ao menos do meu ponto de vista
*não sei se estou a fazer algo de errado em reviver esses tópicos, mas é que eu estou a ler essas aulas agora...
E ler um tópico, aprender com ele, e depois não agradecer dizendo que leu, isso é mau...
ao menos do meu ponto de vista
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
@REVIVEU TOPICO
LEIA AS REGRAS DO FORUM ;)
LEIA AS REGRAS DO FORUM ;)
André Gustavo- Data de inscrição : 16/06/2009
Reputação : 1
Número de Mensagens : 278
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
Não sei se isso conta como reviver um tópico (por se tratar de um tutorial), mas se você quer evitar esse tipo de coisa, você pode agradecê-lo nos créditos de seu jogo. (=
patofu3.0- Data de inscrição : 10/08/2009
Reputação : 0
Número de Mensagens : 54
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
cara nao da o meu da erro sera que alguem pode me ajudar da isso:
daisso me ajudem
daisso me ajudem
patofu3.0- Data de inscrição : 10/08/2009
Reputação : 0
Número de Mensagens : 54
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
da um erro gigantesco depois do erro eu o apago e da uma telinha perguntando qual seu nome tem la maker (numero) quandoaperto em ok da outro erro
patofu3.0- Data de inscrição : 10/08/2009
Reputação : 0
Número de Mensagens : 54
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
patofu3.0 escreveu:cara nao ta
Oque você quis dizer?
Se não foi sobre o tópico foi um tremendo flood...
Edit: Cuidado,post duplo!
doidobr- Data de inscrição : 21/02/2009
Reputação : 0
Número de Mensagens : 670
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
o meu quando eu entro sem decopilar ele entra normal mas quando eu decopilo ele pra .exe eu escrevo o nome e depois aparese essa mnsagem... que isso?? porque ta dando isso??
- Spoiler:
__________________________________________
ERROR in
action number 1
of Create Event
for object objStart:
Error defining an external function.
tavares199551- Data de inscrição : 07/02/2010
Reputação : 0
Número de Mensagens : 47
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
jpaulo- Data de inscrição : 21/03/2010
Reputação : 0
Número de Mensagens : 345
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
como assim eveno press?
shaedol- Data de inscrição : 21/09/2010
Reputação : 0
Número de Mensagens : 45
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
msm coisa de shaedol
n tem evento press
n tem evento press
Furious God- Data de inscrição : 10/05/2010
Reputação : 0
Número de Mensagens : 62
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
shaedol escreveu:como assim eveno press?
Furious God escreveu:msm coisa de shaedol
n tem evento press
Evento Keyboard, Key Press ou Key Release
Quando ele diz evento Press, siginifica no evento de apertar uma tecla a sua escolha, que no caso seria o Key Press !
Denis Lemos- Data de inscrição : 17/05/2009
Reputação : 1
Número de Mensagens : 938
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 1.4
- Unity
- C#
- Godot
- C ou C++
Re: Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat
Key press >any key?
msm assim dah isso
___________________________________________
ERROR in
action number 1
of Create Event
for object objstart:
Error defining an external function.
e o programa tah na msm pasta do meu executable
msm assim dah isso
___________________________________________
ERROR in
action number 1
of Create Event
for object objstart:
Error defining an external function.
e o programa tah na msm pasta do meu executable
Furious God- Data de inscrição : 10/05/2010
Reputação : 0
Número de Mensagens : 62
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Página 1 de 2 • 1, 2
Tópicos semelhantes
» Curso GM Online - 1º lição - Saiba como funciona um jogo Online
» Curso GM Online - 5º Lição - 1º parte - Banco de dados
» Curso GM Online - 5º Lição - 2º parte - Banco de dados
» Curso GM Online - 5º Lição - 3º Parte - Banco de Dados
» Curso GM Online - 2º Lição - Primeiro teste Client/Listener
» Curso GM Online - 5º Lição - 1º parte - Banco de dados
» Curso GM Online - 5º Lição - 2º parte - Banco de dados
» Curso GM Online - 5º Lição - 3º Parte - Banco de Dados
» Curso GM Online - 2º Lição - Primeiro teste Client/Listener
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 2
Permissões neste sub-fórum
Não podes responder a tópicos