Projeto em estágio inicial tentando portar o jogo Flash Incredibots 2 CE para o TypeScript e Pixi.js.
Instruções do ambiente de desenvolvimento a seguir, não se aplicam à versão HTML5.
Obrigado por baixar o Incredibots! Prepare-se para construir, controlar e compartilhar suas próprias criações de robôs em um playground baseado em física!
Para executar o Incredibots ou Incredibots2, basta abrir o arquivo Incredibots.html ou Incredibots2.html em um navegador da web com flash player instalado.
Aproveitar!
O código -fonte dos clientes de jogos IB1 e IB2 está localizado nos subdiretos SRC/Incredibots e SRC/Incredibots2. Abra o IDE ActionScript de sua escolha (usei o Flex Builder 3) e crie um novo projeto usando o diretório apropriado. O arquivo de aplicativo Runnable Main deve ser definido como main.a, e eu usei o param -default-Frame-taxa 30 como um argumento do compilador. Além disso, verifique se a biblioteca Flgui.swc na pasta Libs. O código -fonte contém algumas declarações [incorporadas], que acredito que podem funcionar apenas com o Flex Builder, mas outros IDEs provavelmente têm métodos semelhantes de vincular ativos.
Depois que tudo estiver configurado e o projeto compila corretamente, o IDE deve criar uma pasta bin-debug (ou algo semelhante), contendo o SWF e um arquivo HTML que incorpore o SWF. Agora você poderá fazer alterações no código e vê -las refletidas no SWF construído!
Darei uma visão geral básica das principais classes no código do lado do cliente, na esperança de deixar claro como exatamente tudo funciona. A classe de aplicativo principal é principal. Você pode pensar em um controlador representando vagamente um tipo de 'tela'. Há um para o menu principal e, em seguida, um para a tela principal do jogo, com subclasses para todos os diferentes tipos de telas de jogos principais (ou seja, 1 subclasse por tutorial, 1 para o modo Sandbox, 1 para o modo de desafio, etc.). A classe (infelizmente monolítica) que lida com a maior parte da funcionalidade principal de edição de robôs é o ControlerGame, que possui métodos para responder a todos os botões e opções de menu que estão disponíveis durante a edição de um robô, além de métodos para lidar com a criação, a exclusão, a seleção, a movimentação e a edição de peças robôs. A matriz AllParts no ControlGame representa o robô atualmente trabalhado, como uma variedade de peças. Ele também lida com o início e a parada da simulação box2d
O pacote de peças contém definições de classe para cada tipo de peça disponível ao criar um robô. isto é, (ou seja, configurações de caixa de areia, restrições de desafio).
O pacote de ações simplesmente contém uma lista de ações que podem ser executadas pelo usuário no modo de edição. Essas ações são usadas exclusivamente pelos recursos de 'desfazer' e 'refazer', e cada ação sabe o que precisa ser feito para desfazer ou refazer.
A classe de entrada lida com todas as interações do teclado e do mouse com elementos não-GUI, e despacha chamadas para os métodos apropriados (geralmente no ControlGame) para responder a um determinado clique do mouse ou pressionar a tecla.
A classe Draw lida com o desenho de robôs na tela. Existem 2 casos com os quais ele precisa lidar com o modo de edição e simulação. Quando no modo de edição, ele desenha todas as formas para a tela com base na matriz atual de peças. Quando no modo SIM, ele desenha as formas com base no posicionamento da representação Box2D dessas partes, mas precisa fazê -las parecer iguais nos dois casos. Em teoria, essa classe é bastante modular e deve ser capaz de ser trocada com uma classe alternativa usada para atrair a tela com bastante facilidade, caso você gostaria de escrever seus próprios métodos para lidar com os gráficos de robôs.
O pacote da GUI tem várias aulas que constroem os vários painéis e janelas da GUI ao longo do jogo. O mais importante deles é provavelmente a classe SaveloadWindow, que lida com a exibição de uma lista de robôs disponíveis para carga do servidor. Ele também lida com pontuações altas, economizando e carregando robôs, replays e desafios e pesquisando robôs e outros. Atualmente, está desativado, pois os servidores estão diminuindo, mas se outro servidor subir, essa classe terá que ser modificada. Outras classes deste pacote incluem Guiwindow, que é a classe base de todas as pequenas caixas de diálogo pop -up ao longo do jogo, e componentes como Guibutton, Guitextarea, etc.
Finalmente, a classe de banco de dados lida com todas as interações com o servidor. Possui operações para salvar e carregar robôs e replays, bem como para obter listas de cada uma delas e para fazer login, criar um novo usuário, fazer upload/download de pontuações e mais alguns. Cada operação possui uma função de retorno de chamada correspondente, que processa o resultado retornado pelo servidor e retorna os dados de volta à classe apropriada para exibição. É importante notar que as funções putxIntobytearray e extrações de cenas de lei, onde x é um de 'robô', 'reprodução' ou 'desafio'. Essas funções são usadas para ler e escrever dados no jogo para ou de um bytearray flash. O robô, reprodução ou desafio é enviado ao servidor como parte da parte dos dados de um URLRequest. Essas funções também são usadas pelos recursos de 'importação' e 'exportação', como uma maneira fácil de converter entre objetos e texto no jogo. Se você deseja adicionar recursos que precisam ser salvos, juntamente com um robô, repetição ou desafio, provavelmente precisará colocá -los em uma dessas funções explicitamente.
O código do servidor é tudo contido na subpasta HTDOCS. Está escrito inteiramente em PHP. Vou falar sobre o código do servidor de banco de dados primeiro.
O código do banco de dados está no ./src/htdocs/incredibotsbol ou 2]/database/diretório. Os Incredibots foram construídos usando o Amazon S3 e o SimpledB como back -ends. Você pode ler mais sobre isso em http://aws.amazon.com. A maior parte do código do servidor DB é escrita especificamente com isso em mente e, infelizmente, nunca cheguei a refatorá -lo, de modo que a camada de banco de dados seja abstraída em um pacote comum. Portanto, pode ser muito trabalho mudar para algo como o MySQL, embora funcione tão bem quanto simplificado e S3 se mantidos adequadamente.
Observe que o Incredibots também utiliza o MySQL através do banco de dados do PHPBB Forums. Como tivemos um único login para o jogo e os fóruns, todas as contas de usuário são gerenciadas pela tabela PHPBB_USERS dos fóruns. É por isso que o código dos fóruns PHPBB está incluído no pacote, tive que fazer algumas modificações no código dos fóruns para fazer o único login funcionar, além de alguns outros recursos, como a capacidade de incorporar robôs dentro de postagens do fórum. Dito isto, o login básico e a criação de novas contas devem funcionar bem com qualquer versão do PHPBB em execução, e não deve ser muito difícil alterar a funcionalidade de login para trabalhar com qualquer banco de dados/sistema que desejar.
O código do banco de dados atual deve funcionar bem fora da caixa com qualquer conta do Amazon AWS. As únicas coisas que precisam ser modificadas são as credenciais no arquivo Common_variables.php. Além disso, cada arquivo GGSCORES _*. PHP corresponde a uma das 20 operações de dB que o cliente pode ligar. Todas as chamadas são direcionadas inicialmente ao ggscores.php, que inclui o arquivo adequado correspondente ao parâmetro 'OP'. Cada operação fala com o banco de dados da Amazon (ou tabela phpbb_users em MySQL) e explica uma resposta para o cliente. Os dados binários para todos os robôs, replays e desafios são enviados ao servidor por meio de dados de postagem HTTP e são salvos no S3 como blobs, com uma pequena quantidade de metadados para cada um armazenado no SimpledB.
Nota: Uma coisa que pode ser uma boa idéia adicionar é uma validação de soma de verificação MD5 ao enviar os dados binários do cliente para o servidor, para proteger a corrupção de pacotes. Eu sei que isso aconteceu no passado algumas vezes e, quando acontece, o robô/reprodução/desafio afetado se torna corrupto e está perdido para sempre ... (Dun Dun Dun!)
O restante do código do servidor contém principalmente componentes do site do Incredibots. A página Index.php contém código para incorporar o SWF e exibi -lo corretamente. Para hospedar um SWF, você acabaria de fazer o upload do arquivo SWF que resulta da construção do cliente, chamado Incredibots.swf (ou Incredibots2.swf) para o mesmo diretório que index.php. A página do users.php também está aqui, que exibe todos os robôs, replays e desafios enviados por um determinado usuário em uma página da web (um pouco) bem formatada.
O Incredibots foi originalmente projetado por Ryan Clark, programado por Oliver Trujillo, com arte de Matt Parry. Uma grande quantidade de crédito também deve ir para Erin Catto e o mecanismo de física Box2D, bem como a porta flash de onde nosso jogo é construído. http://www.box2d.org/ http://box2dflash.sourceforge.net/
Incredibots é provavelmente o jogo em que me diverti mais trabalhando. Foi uma explosão checando todas as criações malucas feitas pela comunidade Incredibots, e desejo -lhe tudo de bom para manter os incríveis. Saúde e feliz edifício bot!
- Oliver