(AVISO: Velojet escreveu este [plugin / behavior] como um meio de explorar os aspectos pr?ticos da utiliza??o Construct 2 em um contexto multiplayer. ? oferecido aqui com esse esp?rito, e n?o como uma maneira totalmente funcional de fazer jogos multiplayer com Construct 2.)
NOTA: N?o ? sens?vel ao toque e s? foi testado em navegadores de PC (Firefox, Chrome, Safari).
Ent?o, pela primeira vez, aqui est? o meu MultiPlayer em a??o , atrav?s da internet, em um jogo realmente simples de dois jogadores, Cleaners. Voc? move o seu mop em volta da mesa, tentando limpar mais pe?as do que seu oponente. Se voc? colidir com ele / ela / ele, voc? perde.
NOTA: Voc? pode achar que h? um grande lag entre as teclas pressionadas e seu movimento mop. Esse atraso depende de uma variedade de factores, que ser? discutido mais tarde num post.
Primeiro, voc? vai ver:
<img src="http://www.millercrawford.com/images-offsite/construct2/waiting_server.jpg" border="0">
Felizmente, voc? n?o ter? muito tempo para esperar antes de voc? ver, se voc? for o primeiro a entrar no jogo:
<img src="http://www.millercrawford.com/images-offsite/construct2/waiting_2nd_player.jpg" border="0">
Se j? ? outro jogador que est? esperando por voc? para aparecer, voc? ver?:
<img src="http://www.millercrawford.com/images-offsite/construct2/ready_room_1.jpg" border="0">
... e agora voc? pode come?ar a se mover seu mop (setas) e limpeza -, enquanto o outro jogador, com o mop cinza, faz a mesma coisa - e tenta limpar mais pe?as do que voc?.
Se voc? foi o primeiro a entrar, voc? vai ter que esperar por um outro jogador - se ningu?m aparecer, voc? pode disparar at? outro navegador e tentar mover duas mops de uma s? vez. Existem v?rias salas de jogos, ent?o uma s?rie de jogos pode ser jogado simultaneamente.
Agora, para dar uma olhada nos bastidores. Meu objetivo principal foi o de explorar as possibilidades de jogos multiplayer usando um front end para o Construct 2. Eu tamb?m queria fazer um plugin/behavior MultiPlayer para que os Construtores pudessem usar num n?vel mais elevado, IOW eles / voc? n?o deve ter para manipular mensagens Socket.IO e separ?-las, a fim de extrair o seu significado.
Voc? pode ver isso em como o c?digo do Cleaners C2 funciona com a actualiza??o de um jogador de web:
<img src="http://www.millercrawford.com/images-offsite/construct2/c2-web_player_update.jpg" border="0">
Uma maneira em que eu consegui simplificar o front end C2 era fazer meu MultiPlayer um comportamento que se anexa a um objeto (normalmente um Sprite), ao inv?s de um plug-in separado para atuar como um controlador. Originalmente, eu comecei a estudar a estrada do plugin Photon com meu plugin PhotonPlayer . Isso combinado com o controlador de um Sprite em uma ?nica unidade, mas isso significava que tinha de lidar com todas as rotinas de desenho complexo em si. Agora, meus MultiPlayer est?o ligados a um comportamento que ? mais complicado para o objeto a que est? ligado, deixando-o livre para enviar apenas a movimentos para o servidor do jogo e voltar a partir do servidor as informa??es de localiza??o actualizado e outros dados (como a pontua??o). (Mais detalhes mais tarde sobre suas rela??es com o servidor.)
OK, ent?o voc? est? querendo experimentar o meu comportamento multiplayer para si mesmo, em seu pr?prio servidor. Aqui est? o que voc? precisa fazer (voc? j? deve ter feito os passos 1 e 2):
1) Configure um servidor NodeJS - voc? encontrar? como baixar e configurar nas instru??es aqui . (Aviso:. Estou disposto de oferecer alguma ajuda com este passo - se voc? precisar, voc? pode encontrar muitos na interweb)
2) Instale estes m?dulos: Install Express, NodeJS (axo que ? now)NowJS. (O mesmo aviso se aplica aqui.)
3) Download meu servidor do Cleaners.
4) Descompacte-o em uma subpasta de sua instala??o NodeJS.
5) Execute o servidor do jogo, digitando na linha de comando nessa pasta: node server.js.
6) Abra uma janela do navegador neste local: localhost:7000 (escolher uma porta diferente, se voc? tem 7000 j? est? em uso por outro aplicativo - voc? tamb?m vai precisar alterar o n?mero da porta na linha 34 de server.js). Voc? dever? ver a primeira imagem acima (com 'localhost:7000' como o endere?o neste momento).
7) Abra outra janela do navegador no mesmo local: localhost:7000. Voc? dever? ver a terceira imagem acima, com as posi??es dos jogadores invertidos.
8) Mova o mop em uma janela e voc? tamb?m ver? seu movimento contrapartida cinza na outra.
9) Mudar de janela em janela e veja se voc? pode bater-se!
Ent?o, onde ? que isto est? a ser constru?do para os dois? Poder?o voc?s estar a perguntar. Bem, se voc? olhar na pasta 'public', voc? vai ver c2runtime.js. Isso ? Construir a contribui??o de 2 a Cleaners. Ela veio do meu projecto Cleaners Construct 2.
Voc? pode transferir agora o meu capx do Cleaners e olhar para sua folha de eventos no Construct 2, voc? vai achar que n?o h? nenhuma l?gica do jogo l?. Num jogo multiplayer industrial, um servidor com autoridade lida com toda a l?gica. Os ?nicos dados de localiza??o que o Construct 2 "jogo" envia para o servidor ? a direc??o de um movimento (esquerda / direita / cima / baixo) feito pelo objecto que o comportamento multiplayer ? anexado. Ele n?o envia suas coordenadas x / y, pois esta seria uma maneira muito f?cil para um cliente desonesto do "jogo" enganar.
Da mesma forma, o servidor mant?m a pontua??o e os dados de sa?de e envia-los para os jogadores do cliente (juntamente com quaisquer outros dados necess?rios sobre o estado do jogo). Isso n?o deixa muito para o Construct 2 "jogo" para fazer! Na verdade, voc? vai ver que ele realmente tem apenas duas tarefas:
1) enviar movimentos para o servidor do jogo, e
2) apresentar o estado actual do jogo.
Eu fiz um demo em Multiplayer mais simples para voc? usar como base para experimentar por si mesmo. Veja como:
1) Download o meu behavior MultiPlayer e colocar ele na pasta que acaba em Construct 2\exporters\html5\behaviors.
2) Download o meu Multiplayer Workout capx .
3) Download meu servidor NodeJS Workout Multiplayer ] e descompact?-lo em uma outra subpasta de seus nodejs instala??o.
4) Abra uma janela do navegador em localhost:7700.
5) Abra as janelas do navegador (quantos voc? quiser) no mesmo endere?o.
6) Mova o sprite em uma janela e voc? tamb?m ver? as suas cong?neres de cores diferentes mover nos outros:
<img src="http://www.millercrawford.com/images-offsite/construct2/multiplayer-workout.jpg" border="0">
N?o ? um jogo! (Eu disse que era mais simples.) Por um lado, n?o ? nenhum jogo s?o quartos separados, e, como voc? acabou de ver, n?o h? nenhum limite imposto ao n?mero de jogadores.
Eleve a sua imagina??o para experimentar. Mas note que voc? n?o ser? capaz de visualiz?-lo da maneira normal! Isso porque ele n?o sabe o que fazer se ele n?o se poder conectar ao servidor do jogo. Ent?o aqui est? o fluxo de trabalho que voc? precisa seguir:
1) Edite Multiplayer Workout em Construct 2 (claro!).
2) Exportar seu projecto como um site HTML5 para a pasta p?blica da subpasta nodejs que voc? criou no passo 3 acima. N?O fazer "minify" do script - porque agora o objecto NowJS confunde o Google Closure Compiler.
3) Edite server.js para implementar a l?gica de jogo. Voc? precisa estar familiarizado com JavaScript para fazer isso, ? claro, mas eu liberalmente comentou o meu c?digo para ajud?-lo a acompanhar o que se passa.
4) Os passos seguintes s?o os mesmos que os passos 5-9 do primeiro conjunto de instru??es numerados acima.
Para fazer um jogo de seu pr?prio a partir do zero usando o meu comportamento multiplayer, voc? precisa saber o que ele oferece - aqui est?o as suas condi??es (eventos), a??es e express?es que voc? pode fazer uso de:
- Condi??o: Novo jogador web juntou
- Estado: jogador Web foi atualizado
- Estado: em caso de colis?o com outro jogador
- Estado: jogador Web / s para ser criado
- Condi??o: No meu jogador mudou
- Estado: Web jogador deixou (usar isso para destruir o sprite associada)
- Estado: Servidor do jogo est? pronto
- A??o: Definir o ID do jogador na web (a partir do C2-alocado UID)
- A??o: Inicializar dados do jogador na web para criar (a partir do servidor alocado ID do cliente e sua atual coordenadas X / Y)
- Express?o: Obter atual X coordenada de web jogador
- Express?o: Obter Y atual coordenada de web jogador
- Express?o: Obter web jogador C2 UID
- Express?o: Obter n?mero de jogadores da web para fazer
- Express?o: Obter servidor alocado UID do jogador
- Express?o: Obter o nome do jogador
- Express?o: Obter pontua??o atual do jogador
- Express?o: Obter sa?de atual do jogador
(Os tr?s ?ltimos n?o s?o express?es usadas nos meus projectos da amostra.)
H? muitos problemas com v?rios jogadores que eu n?o sei lidar. Por exemplo, eu n?o tenho tentado compensar a lat?ncia (o tempo gasto na movimenta??o de dados de e para o servidor) ou lag (atraso entre a a??o de um jogador e seu resultado - em parte causado pela lat?ncia).
est? uma explica??o muito ?til para essas quest?es por Rob Hawkes num Google TechTalk, falando sobre as suas tentativas de criar um MMOG em HTML5 (ele ? particularmente bom em lidar com fraudes, ele carrega as cicatrizes de v?rios encontros).
E eu vou discutir essas quest?es como elas afectam o meu comportamento MultiPlayer em um post mais tarde, bem como explicar por que isso ? um comportamento baseado em azulejo, em vez de uma que permite o movimento pixel-por-pixel (voc? provavelmente pode adivinhar o porqu?).
Meu objectivo tem sido o de criar um contexto experimental pr?tico em que podemos explorar e discutir as possibilidades e os problemas do uso de Construct 2 no desenvolvimento de jogos multiplayer. Deixe-me saber se isso ajuda.
Aten??o todos os cr?ditos deste tutorial v?o para o utilizador Velojet!
Thread Original: Comportamento Multiplayer + Demo Online
Atention all the credits for this tutorial goes to Velojet!
Original Thread: Behavior Multiplayer + Online Demo