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] 39dll - Segredos desvendados
+3
Joker
Anderson3d
MatheusReis
7 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
[Tutorial] 39dll - Segredos desvendados
[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.
Importe o arquivo conforme as confugurações na imagem abaixo:
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)
}};
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
};
};
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;
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
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)
(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();
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)
Re: [Tutorial] 39dll - Segredos desvendados
Vc é o mestre hehehe. Se fizer outros tutoriais da 39dll será lembrado eternamente na GMBR. Muito obrigado, já estou testando.
Re: [Tutorial] 39dll - Segredos desvendados
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
mais ta muit boom o tuto,parabens ! =D
Re: [Tutorial] 39dll - Segredos desvendados
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)
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)
Re: [Tutorial] 39dll - Segredos desvendados
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- Data de inscrição : 09/08/2011
Reputação : 0
Número de Mensagens : 110
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] 39dll - Segredos desvendados
Não que seguir o tutorial ou ter o gmk vá fazer diferença no lite... mas que seja:
Download
Download
Re: [Tutorial] 39dll - Segredos desvendados
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
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
Re: [Tutorial] 39dll - Segredos desvendados
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:
Re: [Tutorial] 39dll - Segredos desvendados
Perfeito MatheusReis!
Agora fica bem mais fácil fazer coisas interessantes no GM.
Muitíssimo obrigado pela colaboração!
Agora fica bem mais fácil fazer coisas interessantes no GM.
Muitíssimo obrigado pela colaboração!
Super Maker- Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] 39dll - Segredos desvendados
Cara,um tutorial excelente.Jogos online estão cada vez menos impossíveis de serem criados
Este tutorial irá ajudar bastante,não só eu como outras pessoas também .
Show de bola =)
Este tutorial irá ajudar bastante,não só eu como outras pessoas também .
Show de bola =)
Convidad- Convidado
Re: [Tutorial] 39dll - Segredos desvendados
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?
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos