Vamos desenvolver jogos multiplataforma com Rust~

I. Introdução

  Desde que fui imerso na magia dos MODs de Warcraft III quando criança, sempre tive um carinho especial pelas linguagens de script de jogos. Olhando para trás, naquela época, a linguagem JASS desenvolvida pela Blizzard foi usada para desenvolver os níveis de jogo de Warcraft 3. Embora JASS seja extremamente rudimentar da perspectiva de hoje, com suas principais características sendo digitação estática + nenhuma função de GC, foi em uma época em que os padrões da indústria ainda não haviam sido formados, representa uma tentativa ousada de linguagem de desenvolvimento de jogos.

Por que usar linguagens de script para desenvolver jogos?

  A introdução da linguagem de script de jogos visa principalmente melhorar a conveniência de desenvolvimento e teste. Se você usar diretamente uma linguagem de baixo nível como C++, toda vez que alterar uma linha de código, poderá precisar gastar muito tempo aguardando a compilação e o empacotamento da complexa cadeia de ferramentas. Ao usar linguagem de script, o programa que implementa a jogabilidade pode ser carregado e executado a quente, melhorando significativamente a eficiência de desenvolvimento do jogo.

  Com o tempo, linguagens de script de tipo dinâmico, como Lua e JavaScript, tornaram-se comuns no desenvolvimento de jogos. Porém, com o desenvolvimento das linguagens de programação, temos a oportunidade de redefinir um novo padrão para linguagens de script de jogos – tanto retrô quanto inovador. Esta é a combinação de Rust + WASM.

2. Rust + WASM + Dora SSR: Redefinindo o desenvolvimento de scripts de jogos

  Ao combinar Rust e WASM, podemos atualizar e testar jogos diretamente em dispositivos Android ou iOS, por exemplo, sem sacrificar o desempenho, sem depender de cadeias tradicionais de ferramentas de desenvolvimento de aplicativos. Além disso, com a ajuda da interface Web IDE do mecanismo de jogo de código aberto Dora SSR, o código do jogo escrito em Rust pode ser compilado uma vez, testado e executado em uma variedade de dispositivos de jogo.

Por que escolher a ferrugem?

  Rust oferece garantias de segurança de memória incomparáveis ​​sem a necessidade de intervenção do coletor de lixo (GC), o que o torna ideal para desenvolvimento de jogos, especialmente em cenários sensíveis ao desempenho. Combinado com WASM, Rust pode não apenas fornecer eficiência de execução de alto desempenho, mas também manter consistência e segurança entre plataformas.

Guia rápido

  Antes de iniciar o desenvolvimento, precisamos instalar o motor de jogo Dora SSR. O mecanismo oferece suporte a várias plataformas, incluindo Windows, Linux, macOS, iOS e Android. Para etapas e requisitos específicos de instalação, consulte o guia de início rápido oficial: Dora SSR Quick Start .

Versão Dora SSR v1.3.17 em execução no macOS

Passo 1: Crie um novo projeto

  Depois que o programa binário do mecanismo Dora SSR for iniciado, abra o Dora SSR Web IDE no navegador, clique com o botão direito na árvore de recursos do jogo à esquerda, selecione "Novo" e crie uma nova pasta chamada "Olá".

Acesse o Web IDE da Dora SSR no navegador e crie uma nova pasta

Passo 2: Escreva o código do jogo

  Em seguida, crie um novo projeto Rust na linha de comando:

rustup target add wasm32-wasi
cargo new hello-dora --name init
cd hello-dora
cargo add dora_ssr

src/main.rsEscreva o código em   :

use dora_ssr::*;

fn main () {
  let mut sprite = match Sprite::with_file("Image/logo.png") {
    Some(sprite) => sprite,
    None => return,
  };
  let mut sprite_clone = sprite.clone();
  sprite.schedule(once(move |mut co| async move {
    for i in (1..=3).rev() {
      p!("{}", i);
      sleep!(co, 1.0);
    }
    p!("Hello World");
    sprite_clone.perform_def(ActionDef::sequence(&vec![
      ActionDef::scale(0.1, 1.0, 0.5, EaseType::Linear),
      ActionDef::scale(0.5, 0.5, 1.0, EaseType::OutBack),
    ]));
  }));
}

  Construa e gere arquivos WASM:

cargo build --release --target wasm32-wasi

Etapa 3: faça upload e execute o jogo

  No Dora SSR Web IDE, clique com o botão direito na pasta recém-criada "Hello", selecione "Upload" e carregue o arquivo WASM compilado init.wasm.

Fazer upload de arquivos através do Web IDE pode ser mais conveniente do que usar scripts auxiliares

  Ou use o script auxiliar upload.py para fazer upload do arquivo WASM na pasta do projeto Rust. O parâmetro IP é o endereço do IDE da Web exibido após o início do Dora SSR. a ser carregado:

python3 upload.py "192.168.3.1" "Hello"

Use scripts para concluir a compilação com um clique, fazer upload e começar a executar

Etapa 4: publique o jogo

  Na árvore de recursos do jogo no lado esquerdo do editor, clique com o botão direito na pasta do projeto recém-criada e selecione “Download”.

  Aguarde o navegador exibir um prompt de download para o arquivo de projeto empacotado.

3. Como conseguir

  O processo de implementação do suporte ao desenvolvimento da linguagem Rust e incorporação do tempo de execução WASM no Dora SSR é uma nova exploração e tentativa técnica, que inclui principalmente três etapas principais:

1. Projeto de linguagem de definição de interface (IDL)

  Para incorporar o tempo de execução WASM e oferecer suporte à linguagem Rust em um mecanismo de jogo escrito em C++, primeiro você precisa projetar uma linguagem de definição de interface (IDL) para facilitar a comunicação e a troca de dados entre diferentes linguagens de programação. O design do IDL é baseado na interface C++, e tags adaptadas aos recursos da linguagem Rust são adicionadas, como object, readonly, optionaletc., para realizar o mapeamento de interface entre linguagens. A seguir está um exemplo de interface de um IDL WASM projetado por Dora SSR:

object class EntityGroup @ Group
{
	readonly common int count;
	optional readonly common Entity* first;
	optional Entity* find(function<bool(Entity* e)> func) const;
	static EntityGroup* create(VecStr components);
};

  Considerando as diferenças entre os recursos orientados a objetos do C++ e a filosofia de design do Rust, simulamos parcialmente o comportamento orientado a objetos em C++ em Rust, o que exigiu a escrita de alguns mecanismos adicionais em Rust para corresponder às classes e métodos em C++. Embora essa abordagem acrescente algum trabalho de desenvolvimento, ela mantém a interface limpa e o sistema passível de manutenção.

2. Programa para gerar código cola

  A segunda etapa é escrever um programa para gerar código cola para chamar um ao outro entre C++, WASM e Rust por meio de IDL. Para isso, optou-se por utilizar a linguagem Yuescript criada pelo projeto Dora SSR. Yuescript é uma linguagem de programação dinâmica baseada em Lua. Ela combina a biblioteca de análise de sintaxe lpeg no ecossistema da linguagem Lua para lidar com análise IDL e geração de código cola. A vantagem de usar Yuescript é que ele herda a flexibilidade e a leveza de Lua, ao mesmo tempo que fornece sintaxe e funções mais ricas, adequadas para lidar com tarefas complexas de geração de código. A seguir está um trecho de código de um analisador IDL escrito usando a gramática PEG.

Param = P {
	"Param"
	Param: V"Func" * White * Name / mark"callback" + Type * White * Name / mark"variable"
	Func: Ct P"function<" * White * Type * White * Ct P"(" * White * (V"Param" * (White * P"," * White * V"Param")^0 * White)^-1 * P")" * White * P">"
}

Method = Docs * Ct(White * MethodLabel) * White * Type * White * (C(P"operator==") + Name) * White * (P"@" * White * Name + Cc false) * White * Ct(P"(" * White * (Param * (White * P"," * White * Param)^0 * White)^-1 * P")") * White * C(P"const")^-1 * White * P";" / mark"method"

3. Incorporar tempo de execução WASM e integração de código

  A etapa final é incorporar o tempo de execução WASM e o código cola C++ gerado no mecanismo de jogo para concluir a integração do código. Para o tempo de execução WASM, optamos por usar WASM3, um interpretador WebAssembly leve e de alto desempenho que suporta múltiplas arquiteturas de CPU, simplifica a complexidade da cadeia de compilação e melhora a compatibilidade entre plataformas. Desta forma, Dora SSR pode suportar a execução de jogos desenvolvidos em Rust em dispositivos de hardware de diversas arquiteturas, melhorando muito a acessibilidade e flexibilidade dos projetos de jogos.

  Durante o processo de integração, lançamos um pacote crate para desenvolvedores Rust, que contém todas as interfaces e ferramentas necessárias para que os desenvolvedores possam desenvolver e republicar facilmente outros módulos de jogos escritos na linguagem Rust baseados no mecanismo de jogo Dora SSR no futuro.

4. Conclusão

  Escolher Dora SSR + Rust como ferramenta de desenvolvimento de jogos não é apenas uma busca pela tecnologia de ponta, mas também uma nova exploração do processo de desenvolvimento de jogos. Sinceramente, convidamos todos que amam o desenvolvimento de jogos a se juntarem à nossa comunidade e explorarem juntos esta emocionante jornada tecnológica. Bem-vindo a visitar nosso repositório GitHub e a página inicial do projeto para saber mais e participar de nosso desenvolvimento. Vamos criar juntos uma nova era de desenvolvimento de jogos!

  Nosso grupo Q está aqui, seja bem-vindo para jogar: 512620381

Companheiro de frango, deepin-IDE de "código aberto" e finalmente conseguiu a inicialização! Bom cara, a Tencent realmente transformou o Switch em uma "máquina de aprendizagem pensante" Revisão de falhas e explicação da situação da Tencent Cloud em 8 de abril Reconstrução de inicialização de desktop remoto RustDesk Cliente Web Banco de dados de terminal de código aberto do WeChat baseado em SQLite WCDB inaugurou uma grande atualização Lista de abril TIOBE: PHP caiu para o nível mais baixo, Fabrice Bellard, o pai do FFmpeg, lançou a ferramenta de compressão de áudio TSAC , o Google lançou um grande modelo de código, CodeGemma , isso vai te matar? É tão bom que é de código aberto - ferramenta de edição de imagens e pôsteres de código aberto
{{o.nome}}
{{m.nome}}

Acho que você gosta

Origin my.oschina.net/u/4925410/blog/11052782
Recomendado
Clasificación