GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por 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] 39dll - Segredos desvendados

+3
Joker
Anderson3d
MatheusReis
7 participantes

Ir para baixo

[Tutorial] 39dll - Segredos desvendados Empty [Tutorial] 39dll - Segredos desvendados

Mensagem por MatheusReis Sáb 22 Out 2011, 12:17

[Tutorial] 39dll - Segredos desvendados


Requerimentos: GM8 Pro
Nível de dificuldade: Mediano

Bem... a pedido de alguns membros vou tentar desmistificar o 39dll postando este tutorial simples de conexão e envio de dados.

Antes vou resumir o que é necessario para que possamos estabelecer a conexão:
-iniciar as funções da dll
-fazer um cliente conectar a um receptor
-transmitir informações de um pra outro
-mostrar as informações recebidas na tela

Simples não o_O'?

Pois bem, mãos na massa. o/

Primeiros Passos


Baixem este pacote: http://dl.dropbox.com/u/29285576/39dll.zip
Ele contem a dll e um arquivo no formato 'gmres', que inclui todos os scripts necessários. Extraia-os.

-Crie um novo jogo e salve no mesmo diretório onde se encontra a dll.
-Vá na aba "File > Import Resources..." e selecione o arquivo 39dll.gmres.
[Tutorial] 39dll - Segredos desvendados Exemplov

Importe o arquivo conforme as confugurações na imagem abaixo:
[Tutorial] 39dll - Segredos desvendados Exemplomb

Agora temos tudo que precisamos para começar a utilizar a dll. Salve o jogo.

As funções


Inicialmente, crie 2 rooms (room0 e room1)

Agora, crie um objeto para gerenciar a conexão. ex: obj_gerente
E em seu create, insira:
Código:

dllinit(0,1,1);
//Isto iniciará as funções da dll
//O argumento onde está o 0 seria onde por um caminho alternativo para a dll
//se ela não estivesse na mesma pasta do gmk. Como está, deixaremos 0

//Para efetuar uma conexão precisamos de pelo menos 1 receptor e 1 cliente
//o receptor aguarda por pedidos de conexão vindos de clientes
// quando a conexão é aceita, eles podem trocar informações
//portanto, primeiro decidiremos quem sera o receptor e quem sera o cliente:

global.receptor=show_question("Deseja ser o receptor de conexões?");

//show_question mostra uma pergunta na tela, retornando 'true' (1) se o usuario
//clicou em sim e 'false' (0) se clicou em não
http://global.receptor vai memorizar se o jogo atual vai receber ou efetuar conexões

if global.receptor=true{
//se nós decidimos ser o receptor

global.outro_jogador = -1;
//cria uma variavel para guardar a ID(entificação) do outro jogador
//como ainda nao temos nenhum, poremos -1(pode ser qualquer numero negativo)

porta_de_entrada = tcplisten(3333,2,true);
//tcplisten abre uma das portas de conexão de rede para permitir conexões
//no caso, abrimos a porta numero 3333 (primeiro argumento)
//o segundo argumento indica o numero máximo de jogadores a se conectar
//e o terceiro argumento indica se esta função deve continar o jogo ou 'travá-lo' até que //seja completa.(true nao trava, false trava)
//porta_de_entrada vai memorizar a identificação da porta

};//fim dos codigos no create do receptor
else{
//do contrário (caso nao sejamos o receptor, seremos cliente)

IPdo_receptor=get_string("Qual é o IP do receptor?","localhost");
//com isso pegamos o IP do receptor, para que possamos conectar
//"localhost" é o que estará escrito inicialmente nesta janela de pergunta
//se tentarmos efetuar uma conexão com este valor, o jogo irá procurar
//um servidor no nosso próprio pc (ou seja, outra janela do jogo, sendo que esta funciona como receptor)

global.outro_jogador=tcpconnect(IPdo_receptor,3333,1);
//tcpconnect irá tentar efetuar uma conexão na ip que fornecemos (IPdo_receptor)
//na porta 3333 (a mesma porta 3333 que inserimos no codigo do host)
//'1', no terceiro argument, indica que ele tentará conectar por algum tempo até desistir
//se fosse 0, ele tentaria conectar eternamente (travando o pc) e se fosse 2, ele tentaria conectar mas não seguraria o jogo até conectar/desistir.
//retorna -1 se falhar e algum nomero maior que zero se der certo( está é a ID[entificação] da conexão)

if global.outro_jogador>0 {
//se a nossa tentativa de conexão foi um sucesso
room_goto_next();
//ir para a proxima room
}else{
//do contrario...
game_end();
//fecha o jogo(não há receptor, nao poderemos jogar)
}};
Fim do create. Agora vamos ao step.
O step, como já devem ter pensado, não será utilizado pelo cliente, pois suas funções, quando dão certo, seguem para a proxima room... portanto:
Código:
if global.receptor=true{
//caso sejamos os receptores

global.outro_jogador=tcpaccept(porta_de_entrada,1);
//tcpaccept verifica se há conexões na 'porta_de_entrada' e salva em global.outro_jogador
//retorna -1 se falhar (sem conexões) e algum nomero positivo se obter sucesso( a tal da ID[entificação] do jogador.

if global.outro_jogador>0 {
//se tivermos um novo jogador

show_message("Jogador encontrado");
//mostra na tela que um jogador se conectou

closesocket(porta_de_entrada);
//fecha a porta de entrada para outros jogadores
room_goto_next();
//vai para a proxima room
};
};
Terminamos de programar nosso gerente. Coloque ele em qualquer lugar da room0.

Se tudo der certo e as conexões forem efetuadas, seremos encaminhados da room0 até a room1. Portanto, faremos o tráfego de informações na room1.

OBS: Enquanto o receptor nao recebe uma conexão, o jogo ficara parado, nada acontecerá até alguém entrar.

Crie um novo objeto. ex: obj_comunicador.
Ele será quem ira enviar, ler e mostrar as informações recebidas.
No create:
Código:
outro_x=0;
outro_y=0;
Isto cria 2 variaveis para representar o outro jogador (quando recebermos informações, vamos guardá-las ali)


Depois, em seu step, colocaremos:
Código:

//Primeiro vamos enviar nossas informações ao outro jogador
clearbuffer();
//limpa o buffer( algo que usamos para processar/guardar informações);
writebyte(0);
//escreve um byte, um numero pequeno, no buffer. Usaremos estes 'writebyte' no inicio como se fosse um canal
//para tráfego de informações
//ex: se o byte for 0, enviaremos a posição do jogador. se for 1, enviaremos o nome dele
//serve para identificar o tipo de mensagem
writeshort(mouse_x);
//escreve a posição x do mouse na janela (sim, enviaremos a posição do mouse para o outro jogador)
writeshort(mouse_y);
//escreve o y
//
//ATENÇÂO!!!!!!!!!!!!!!
//writeshort é para valores NUMERICOS
//caso formos enviar um nome ou algo escrito, usaremos writestring();

sendmessage(global.outro_jogador);
//envia o que está no buffer para o outro jogador
//
//Pronto!!! enviamos a informação
//agora precisamos receber o que o outro jogador tem a enviar

tamanho=1;
//em 'tamanho' vamos guardar o tamanho em bytes de mensagens a serem recebidas
//não sabemos ainda quanto temos, mas para podermos começar o ciclo de leitura, precisamos iniciá-lo como 1
while(tamanho>0){
//enquanto 'tamanho'(de dados a receber) for maior que zero
tamanho=receivemessage(global.outro_jogador);
//receivemessage recebe a mensagem vinda do outro jogador(se houver) e retorna o tamanho em bytes
if tamanho>0{
//se houver mensagens
canal=readbyte();
//lê em qual canal a mensagem está
if canal=0{
//se o canal for o 0;
outro_x=readshort();
outro_y=readshort();
//lemos as informações enviadas pelo outro jogador
};
};
};

//enviamos e lemos informações... mas e se o jogador tiver saido? como saberemos?
//existem 2 modos:
//tcpconnected() diz se estamos conectados ou não com o jogador
//e também, se o valor de 'tamanho', recebido lá atrás, for 0, e não um numero negativo
//significa que a conexão foi perdida... portanto:
if tcpconnected(global.outro_jogador)<0 or tamanho=0 {game_end()};
//fim de jogo
Terminamos o tráfego de informações, agora precisamos por o que recebemos na tela!

Insira no draw:
Código:
draw_circle(outro_x,outro_y,10,false);
//desenhará um circulo cheio de raio 10 nas posições recebidas do outro jogador (ou seja, isto representa o mouse dele)
Insira esse objeto na room1 e pronto, experimente!
(Abra duas janelas. Seja receptor numa e cliente noutra. Conecte a localhost)

OBS(edit): Lembre-se de ler as mensagens na mesma ordem em que elas forem escritas:
ex:
writeshort(x);
writeshort(y);
writeshort(sprite);
----
x=readshort();
y=readshort();
sprite=readshort();

Este é o básico para qualquer jogo de conexões online. No próximo tutorial(se houver), criaremos um servidor de jogos, ou seja, vários jogadores juntos.

Pra quem quiser conferir o resultado, o gmk pronto e um executável podem ser baixados AQUI

Agradecimentos

39ster, pela BENÇÃO que é esta dll.

Até mais. o/


Última edição por MatheusReis em Sáb 22 Out 2011, 17:47, editado 5 vez(es)
MatheusReis
MatheusReis

Games Ranking : Nota A

Notas recebidas : B-A-A
Data de inscrição : 13/01/2010
Reputação : 31
Número de Mensagens : 1093
Prêmios : [Tutorial] 39dll - Segredos desvendados Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 2 Prata x 1 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Unity
  • Java
  • C#
  • Javascript


http://www.mathaeuz.deviantart.com

Ir para o topo Ir para baixo

[Tutorial] 39dll - Segredos desvendados Empty Re: [Tutorial] 39dll - Segredos desvendados

Mensagem por Anderson3d Sáb 22 Out 2011, 15:25

Vc é o mestre hehehe. Se fizer outros tutoriais da 39dll será lembrado eternamente na GMBR. Muito obrigado, já estou testando.
Anderson3d
Anderson3d

Games Ranking : Nota A

Notas recebidas : A - A
Data de inscrição : 15/02/2009
Reputação : 9
Número de Mensagens : 1479
Prêmios : [Tutorial] 39dll - Segredos desvendados Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.indiegamebr.com

Ir para o topo Ir para baixo

[Tutorial] 39dll - Segredos desvendados Empty Re: [Tutorial] 39dll - Segredos desvendados

Mensagem por Joker Sáb 22 Out 2011, 15:36

Testei aki,gostei muito,so que tentei adicionar outros objetos mais nao deu,fiz uma bola com movimentos basico top down ,nao deu,tentei estuar ali ve onde posso editar mais nao fucionaou , o outro jogador nao recebe a ifomaçao do objeto que eu criei =D
mais ta muit boom o tuto,parabens ! =D
Joker
Joker

Games Ranking : Sem avaliações

Data de inscrição : 08/11/2010
Reputação : 1
Número de Mensagens : 206
Prêmios : [Tutorial] 39dll - Segredos desvendados Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://the-jokergames.blogspot.com/

Ir para o topo Ir para baixo

[Tutorial] 39dll - Segredos desvendados Empty Re: [Tutorial] 39dll - Segredos desvendados

Mensagem por MatheusReis Sáb 22 Out 2011, 15:38

Lembre-se de escrever:
writeshort(obj_topdown.x);
writeshort(obj_topdown.y);

e ler:
obj_topdown.x=readshort();
obj_topdown.y=readshort();

Caso não esteja usando obj_topdown pra gerenciar os dados. ( o que é recomendado)
MatheusReis
MatheusReis

Games Ranking : Nota A

Notas recebidas : B-A-A
Data de inscrição : 13/01/2010
Reputação : 31
Número de Mensagens : 1093
Prêmios : [Tutorial] 39dll - Segredos desvendados Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 2 Prata x 1 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Unity
  • Java
  • C#
  • Javascript


http://www.mathaeuz.deviantart.com

Ir para o topo Ir para baixo

[Tutorial] 39dll - Segredos desvendados Empty Re: [Tutorial] 39dll - Segredos desvendados

Mensagem por newMatthaeus Sáb 22 Out 2011, 16:43

Alguém teria a engine para postar?Queria ver como é,porque eu estou no lite e não é possível fazer o tuto,ficarei grato a quem postar.
newMatthaeus
newMatthaeus

Data de inscrição : 09/08/2011
Reputação : 0
Número de Mensagens : 110
Prêmios : [Tutorial] 39dll - Segredos desvendados Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Tutorial] 39dll - Segredos desvendados Empty Re: [Tutorial] 39dll - Segredos desvendados

Mensagem por MatheusReis Sáb 22 Out 2011, 16:50

Não que seguir o tutorial ou ter o gmk vá fazer diferença no lite... mas que seja:
Download
MatheusReis
MatheusReis

Games Ranking : Nota A

Notas recebidas : B-A-A
Data de inscrição : 13/01/2010
Reputação : 31
Número de Mensagens : 1093
Prêmios : [Tutorial] 39dll - Segredos desvendados Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 2 Prata x 1 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Unity
  • Java
  • C#
  • Javascript


http://www.mathaeuz.deviantart.com

Ir para o topo Ir para baixo

[Tutorial] 39dll - Segredos desvendados Empty Re: [Tutorial] 39dll - Segredos desvendados

Mensagem por thundercats Sáb 22 Out 2011, 19:37

MatheusReis

e ai cara blz?! muito legal essa engine .


o IP que o player_cliente tem que colocar é mesmo IP que o site meuip.datahouse.com.br mostra para o player_servidor?

vlw investigador
thundercats
thundercats

Data de inscrição : 20/09/2011
Reputação : 1
Número de Mensagens : 161
Prêmios : [Tutorial] 39dll - Segredos desvendados Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://gamemakerhtml5.blogspot.com/p/jogos.html

Ir para o topo Ir para baixo

[Tutorial] 39dll - Segredos desvendados Empty Re: [Tutorial] 39dll - Segredos desvendados

Mensagem por MatheusReis Sáb 22 Out 2011, 19:56

Exatamente. Estes sites são bem úteis para jogadores que não tem um programa de redirecionamento/fornecimento rápido de ip. Outro modo de verificar seu IP é, no caso do Win XP, é clicar no Ícone de conexões de rede e verificar manualmente:
[Tutorial] 39dll - Segredos desvendados Exemploh
MatheusReis
MatheusReis

Games Ranking : Nota A

Notas recebidas : B-A-A
Data de inscrição : 13/01/2010
Reputação : 31
Número de Mensagens : 1093
Prêmios : [Tutorial] 39dll - Segredos desvendados Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 2 Prata x 1 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Unity
  • Java
  • C#
  • Javascript


http://www.mathaeuz.deviantart.com

Ir para o topo Ir para baixo

[Tutorial] 39dll - Segredos desvendados Empty Re: [Tutorial] 39dll - Segredos desvendados

Mensagem por Super Maker Sáb 22 Out 2011, 22:54

Perfeito MatheusReis!
Agora fica bem mais fácil fazer coisas interessantes no GM.
Muitíssimo obrigado pela colaboração!
Super Maker
Super Maker

Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios : [Tutorial] 39dll - Segredos desvendados Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Tutorial] 39dll - Segredos desvendados Empty Re: [Tutorial] 39dll - Segredos desvendados

Mensagem por Convidad Sáb 22 Out 2011, 23:17

Cara,um tutorial excelente.Jogos online estão cada vez menos impossíveis de serem criados Happy
Este tutorial irá ajudar bastante,não só eu como outras pessoas também .

Show de bola =)
avatar
Convidad
Convidado


Ir para o topo Ir para baixo

[Tutorial] 39dll - Segredos desvendados Empty Re: [Tutorial] 39dll - Segredos desvendados

Mensagem por machosupremo Sex 08 Mar 2013, 16:57

Velho, eu fiz um engine e tava tudo certo (testando servidor e cliente na mesma maquina), porem quando eu coloquei o cliente em outra maquina numa mesma rede ele não conseguiu se conectar, sabe me dizer o pq disso?
machosupremo
machosupremo

Data de inscrição : 10/10/2012
Reputação : 2
Número de Mensagens : 99
Prêmios : [Tutorial] 39dll - Segredos desvendados Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.dinoup.com

Ir para o topo Ir para baixo

[Tutorial] 39dll - Segredos desvendados Empty Re: [Tutorial] 39dll - Segredos desvendados

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos