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
» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Ontem à(s) 18:28

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16


[Tutorial] 39dll Tutorial - Part I

Ir para baixo

[Tutorial] 39dll Tutorial - Part I Empty [Tutorial] 39dll Tutorial - Part I

Mensagem por !!Game Play!! 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:

[Tutorial] 39dll Tutorial - Part I Serverimagea

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:

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:

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:

[Tutorial] 39dll Tutorial - Part I Tcpimage

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:

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:

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:


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


[Tutorial] 39dll Tutorial - Part I Partii

Abç
!!Game Play!!
!!Game Play!!

Data de inscrição : 24/12/2011
Reputação : 4
Número de Mensagens : 159
Prêmios : [Tutorial] 39dll Tutorial - Part I 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.blackcubestudio.tkk/

Ir para o topo Ir para baixo

Ir para o topo


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