[Tutorial] 39dll Tutorial - Part I

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

[Tutorial] 39dll Tutorial - Part I

Mensagem por !!Game Play!! em Sex 15 Mar 2013, 21:26

39dll Tutorial Part I

Luke Escude



Descrição : Eu achei este tutorial sobre a 39dll no site da gmc (forum de game maker da yoyogames) , então resolvi traduzi-la e postar aqui no fórum pra ver se ajudam os usuários a entender melhor sobre esta dll , eu ainda não testei , mas pelos comentários , parece ser bom !

Então vamos começar , bom proveito e os créditos vai a Luke Escude que disponibilizou este tutorial para todos!

Obs:Tutorial traduzido ,comentários das engines traduzidas , menos as imagem , voçes mesmo terão que traduzi-las

Nível de dificuldade: Avançado

Game Maker : GM7 GM8 (Não testado em outros game maker's pelo o que eu sei)

Tutorial Original: http://www.lukeescude.com/online-tutorial/



1. A Dll

O 39dll é uma dll por 39ster (GMC), que permite aos programadores Game Maker para enviar dados de e para um servidor e um cliente. Você vê, os comandos embutidos no Game Maker, muitas vezes referida como "Mplay", são lixo completo.
A DLL 39dll vem com as bases de cliente e servidor (continue lendo)
Você vai aprender sobre apenas as porções on-line, o TCP da DLL. Ele também contém utilidades, tais como criptografia de arquivos, e algumas outras coisas que eu não quero mexer com agora. Este tutorial deve ser bastante fácil de seguir. Exemplos para download, a DLL, e uma base de cliente / servidor (todos feitos por mim, se o DLL é claro) estão disponíveis para você em todo o tutorial.

NOTA: Leia este tutorial todo. Não pense que você pode pular uma seção se você "já sabe disso."

2. O que o TCP significa?

TCP significa Transmission Control Protocol. O irmão conhecido atual do TCP é UDP, que é algo que funciona de forma diferente .. TCP será a base para a nossa comunicação com a Internet.

Um servidor, também chamado de host, é o núcleo do mundo Online. Se você pode imaginar uma roda em um carrinho de mercado, há o centro de "hub" com raios saindo para a borda. Que hub, é o servidor, neste caso.

Um cliente é o que se conecta ao servidor. É o raio da nossa roda metafórica. Abaixo está uma imagem artisticamente desenhada, que mostra as relações entre clientes e servidores:



A seta TCP pra cima mostra o upload para o servidor. Trata-se de dados transmitidos a partir do cliente para o servidor.
A seta TCP pra baixo mostra o download para o cliente.


O seu é o modelo cliente-servidor no TCP. Muito simples, certo? Nota: Dados não pode ser passado de cliente para cliente. Ele tem que ir através do servidor para chegar a outro cliente. Caso contrário, eu teria que linhas pretas que ligam os clientes.


3. O Servidor

Até agora, você deve ter uma boa compreensão do trabalho em rede TCP. Hora de sujar as mãos.

Primeiro, começar com uma base de GMK que tem todas as chamadas de função 39dll. Abaixo, há um link para a base do servidor que eu fiz para você:

ServerBase.GMK

Se você olhar para que linda coleção de scripts, você verá um monte de coisas. Para o nosso jogo online, vamos trabalhar com os comandos TCP.

O objeto Server_Init configura todo o servidor. No evento CREATE, precisamos ter o seguinte código:

Spoiler:
dllinit(0,true,false);
servertcp=tcplisten(8080,10,1);


No código acima, dllinit () é a função exigida pela DLL para inicializá-lo. O primeiro parâmetro, 0, significa apenas que o nome do arquivo DLL regular, "39dll.dll". O primeiro Boolean, True, significa que queremos carregar funções de soquete. Tomada basicamente significa TCP. O parâmetro final, False, é carregar utilitários. (As outras coisas eu não quero mexer com)

Então nós criamos uma variável, servertcp, que, literalmente, é a porta TCP que estamos ouvindo. O primeiro parâmetro é a porta. Para o exemplo, eu defini-lo para 8080. Por favor, alterá-lo, uma vez que alguns programas utilizam 8080. O segundo parâmetro, 10, é a quantidade máxima de conexões (jogadores) que deseja permitir conectado. Os conjuntos de um bloqueio para OFF. Não se preocupe com isso, apenas mantê-la em 1.

Agora, nosso objetivo Server_Init vai ter um evento STEP. Cada passo, ele vai verificar se há uma conexão do cliente:

Spoiler:
stcp = tcpaccept(servertcp,true);
if (stcp)
{
setsync(stcp,0);
o=instance_create(x,y,player);
o.tcp=stcp;
setsync(stcp,1);
}



O código acima é executado a cada passo. A STCP é uma variável temporária que armazena o cliente TCP ID. Eu vou mais para isso mais tarde. tcpaccept () aceita a conexão, o primeiro parâmetro, obviamente, objeto do servidor, ea segunda é o modo bloqueio, que vamos manter como verdadeiro.

Em seguida, o comando define setsync Bloqueio para fora. Mais uma vez, não se preocupe com o bloqueio. Pegue a minha palavra para ela.

Nosso próximo comando, faz um objeto novo jogador. (Nós não nos importamos em que o objeto é, uma vez que este é apenas o servidor). Isso é importante! No objeto de jogador, é cada função o servidor realiza para o cliente. Cada objeto representa o cliente do jogador na vida real, no computador de outra pessoa. Assim, se houver 13 pessoas ligadas ao seu servidor, haverá 13 objetos do jogador no servidor. NOTA: No cliente, sempre que enviar os dados do servidor, é objeto jogador específico é a que recebe os dados e usa-lo. Isto irá tornar-se mais evidente mais adiante.

O comando o.tcp = stcp define o objeto jogador TCP ID. Este ID TCP é como o objeto jogador sabe qual cliente ele é exclusivo para. Vou fazer outro diagrama artisticamente desenhada, com um pouco, para ajudar a visualizar tudo isso.

Outra setsync () define comando de bloqueio para fora.

Se você entender completamente o que aconteceu até agora, você está pronto para ir para o resto. Se você ainda está tendo problemas, re-ler as seções acima e olhar para as minhas habilidades de arte incríveis abaixo:



Observe como os clientes não ligar em ordem. A de cima ligado, então a uma inferior, etc
Mas você vê, cada objeto jogador é atribuído a apenas um cliente específico


Agora que você entende os fundamentos de hospedagem do servidor, e à espera de conexões, vamos dar uma olhada de perto o jogador.

O que está no evento de criação do objeto jogador realmente é inútil. Não me lembro por que eu furei a = tcp "" lá dentro. Eu acho que era para manter "tcp" um número inteiro, em vez de uma string. O que parece inútil. Quem sabe.

O evento jogador etapa é onde isso está acontecendo. Eu vou digitar o código abaixo, em seguida, explicar. Por favor, se familiarizar com a declaração Switch, bem como a declaração de interrupção. Eu vou tocar levemente sobre estes temas que vão aparecendo. Aqui está o evento STEP do objeto jogador:

Spoiler:
while (1) //Loop Infinito
{
msize=receivemessage(tcp);
if msize=0
{
instance_destroy()
}
if (msize <=0) break;
mid = readbyte();
switch (mid)
{
case 0:

break;
case 1:

break;
//Nada a baixo disto
}
}


O básico de um while(1) ou while(true) é um loop infinito. Nosso primeiro comando, receiveMessage (), armazena a mensagem em espera em "msize". Note, este é o lugar onde a lição que aprendemos acima se aplica. Você vê que "tcp" dentro do ()? Esse é o ID do TCP do cliente conectado atualmente associada a esse objeto jogador específico.
A próxima instrução if verifica se msize é igual a 0. Msize só vai ser igual a 0 se o jogador espontaneamente desconectado, sem nenhum motivo. Se não verificar isso, os objetos jogador iria aumentar, e nós não queremos isso.

Em seguida, a declaração, se (msize <= 0) break; basicamente faz msize certeza não tem nenhuma mensagem de espera. O reinício do comando break do loop while, para que possamos verificar novamente se há uma mensagem.

Tudo bem, aqui é onde alguma complexidade e mal-entendidos começar. A declaração mid = ReadByte () armazena o primeiro elemento da mensagem de espera, que é um byte. Este byte, na frente de todas as mensagens enviadas a partir do servidor / cliente, diz o programa para ler a mensagem. Não tem necessariamente de ser um byte. Pode ser uma string, etc Mas é necessário para que o cliente ou servidor sabe a ordem dos dados dentro da mensagem. Leia, para a próxima seção, sobre o que exatamente isso significa.

4. Estrutura de mensagens


A forma como você estrutura uma mensagem de / para o servidor / cliente é muito importante. É como você passar dados. Dados em sua mensagem deve ser enviada na ordem em que ele será lido! Esta seção irá listar os comandos para gravar informações em uma mensagem, que você vai enviar a um cliente ou servidor.

Vamos na mesma página: uma "mensagem" é um pacote de dados que você envia. Ele pode conter strings, inteiros, bytes, duplos, etc Os dados que você escreve em uma mensagem no cliente, precisa ser lido na mesma ordem no servidor. Aqui está um exemplo:

Spoiler:
(cliente envia a seguinte mensagem para o servidor ... Nota, todos os dados é na mesma mensagem.)
1(Este é o byte que eu estava falando acima. Ele diz ao servidor como ler a mensagem)
"Olá, meu nome é Lucas."
8675309
23,87
"O bolo é uma mentira!"


(Agora, aqui está o servidor que recebe a mensagem corretamente)
byte (Oh, olhe! Primeiro byte, 1, diz-nos que estará lendo uma string, integer, double, em seguida, uma outra string)
string
integer
double
string

Isso pode ser difícil de entender no início. Basicamente, no lado do cliente, ele está enviando uma mensagem com os seguintes dados: String, Integer, String, Double ... O servidor não tem idéia do que está dentro da mensagem, de modo que furar em que byte na frente para deixar o servidor sabe. Claro, você tem que programa para o objeto do jogador o que fazer quando recebe o byte. De qualquer forma, o byte de 1, faz a declaração do objeto jogador INTERRUPTOR ir para o CASO 1, que permite que o servidor sabe, "Hey, esse é o caso 1, então esta mensagem terá uma string, um inteiro, um casal, então, uma cadeia! "

Esta é a maneira que eu sempre estruturado lo. O byte de frente é o caso da árvore interruptor. Então, se nós voltarmos para o nosso código:

Spoiler:
mid = readbyte();
switch (mid)
{
case 0:

break;
case 1:

break;
//Nada abaixo daqui
}


A Variável "mid" é preenchido com aquele o primeiro byte, em seguida, ele vai para a instrução CASE que lembra o formato da mensagem. Faz sentido? Vou fornecer um exemplo de programa de bate-papo no final do tutorial que eu criei. NOTA: Os comandos DLL reais usados para adicionar dados para a mensagem será explicado depois do Recap.


5. Recap



Então, nós aprendemos que os clientes se conectam a um servidor. O servidor é o centro de todas as operações. Todos os dados que você deseja disponibilizar a todos os clientes precisa ser enviado para o servidor, o servidor irá lidar com ele de lá.

Um objeto Server_Init é necessário para iniciar a DLL, e escutar na porta do seu jogo para incomming conexões. A ligação é feita, no caso de este PASSO mesmo objecto, em seguida, um objecto jogador é criado com o ID do cliente TCP recentemente ligado.

Este objeto novo jogador é específico para apenas um cliente, o cliente que acabou de ser unidos. A variável "tcp", local para o jogador, é o ID do mesmo TCP o cliente ingressou com.

Ao enviar uma mensagem, ela precisa ser enviado exatamente como ele vai ser recebido, com os seguintes dados do byte que rege o servidor / cliente que recebe a mensagem. Este byte determina como a mensagem deve ser lida e tratada.




Então pessoal , terminei aqui a primeira parte do tutorial , talvez hoje ou amanha postarei o restante da tradução deste tutorial os tópicos 6 , 7 , 8 , 9(final) que ensinarão sobre Gravar, e leitura de uma mensagem , Enviando a mensagem e sobre o Client

Ate a próxima , e se deu algum tipo de erro ate aqui , desculpe-me não pode ajuda-los , como disso no inicio , não fui eu que criei




Abç

!!Game Play!!

Número de Mensagens : 159
Idade : 19
Data de inscrição : 24/12/2011
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.blackcubestudio.tkk/

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