Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev0.10.1

dartemis

Um framework de sistema de entidades para desenvolvimento de jogos. Baseado no Artemis.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
140
Curtidas
13
Pontos Pub
160

Instalar pacote

flutter pub add dartemis

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

Dartemis é um framework leve de Entity-Component-System (ECS) para desenvolvimento de jogos em Dart, inspirado no framework Artemis. Ele oferece uma abordagem estruturada para gerenciar entidades, componentes e sistemas de jogos, promovendo desempenho e escalabilidade. Projetado para uso com Flutter, suporta múltiplas plataformas, incluindo Android, iOS, Web, macOS, Windows e Linux. O framework permite lógica de jogo orientada por dados de forma eficiente por meio da separação de preocupações, tornando-se ideal para arquiteturas complexas de jogos. Os desenvolvedores podem facilmente expandir funcionalidades usando sistemas e componentes personalizados.

Casos de uso

  • Construindo jogos 2D/3D
  • Gerenciando grandes quantidades de entidades de jogo
  • Implementando lógica de jogo orientada por dados
  • Criando sistemas de jogo modulares
  • Otimizando o desempenho em loops de jogo

Principais recursos

  • Arquitetura Entidade-Componente-Sistema
  • Alto desempenho e baixo custo de memória
  • Suporte multiplataforma
  • Modelo de sistema e componente extensível
  • Sistema embutido de eventos e consultas

Indicado para

  • Desenvolvedores de jogos usando Flutter
  • Projetos que exigem gerenciamento escalonável de entidades
  • Equipes construindo mecânicas de jogo complexas
  • Desenvolvedores procurando melhores práticas do ECS
  • aplicações críticas de desempenho

Considerações

  • Requer compreensão dos padrões ECS
  • Curva de aprendizado mais acentuada para iniciantes
  • Suporte limitado a gráficos ou áudio embutidos
  • Não é um motor de jogo completo
  • Melhor usado com ferramentas adicionais para depuração

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

dartemis

Build Status Coverage Status Pub

Content

About

dartemis is a Dart port of the Entity System Framework Artemis.

The original has been written in Java by Arni Arent and Tiago Costa and can be found here: https://gamadu.com/artemis/ (archived) with the source available here: https://code.google.com/p/artemis-framework/

Ports for other languages are also available:

  • C#: https://github.com/thelinuxlich/artemis_CSharp
  • Python: https://github.com/kernhanda/PyArtemis

Some useful links about what an Entity System/Entity Component System is:

Getting started

  1. Add dartemis to your project by adding it to your pubspec.yaml:

    dependencies:
      dartemis: any
    
  2. Import it in your project:

    import 'package:dartemis/dartemis.dart';
    
  3. Create a world:

    final world = World();
    
  4. Create an entity from a list of components. Entities with different components will be processed by different systems:

    world.createEntity([
      Position(0, 0), 
      Velocity(1, 1),
    ]);
    

    A Component is a pretty simple structure and should not contain any logic:

    class Position extends Component {
      num x, y;
      Position(this.x, this.y);
    }
    

    Or if you want to use a PooledComponent:

    class Position extends PooledComponent {
      late num x, y;
     
      Position._();
      factory Position(num x, num y) {
        final position = Pooled.of<Position>(() => Position._())
          ..x = x
          ..y = y;
        return position;
      }
    }
    

    By using a factory constructor and calling the static function Pooled.of, dartemis is able to reuse destroyed components and they will not be garbage collected.

  5. Define a systems that should process your entities. The Aspect defines which components an entity needs to have in order to be processed by the system:

    class MovementSystem extends EntityProcessingSystem {
      late Mapper<Position> positionMapper;
      late Mapper<Velocity> velocityMapper;
    
      MovementSystem() : super(Aspect.forAllOf([Position, Velocity]));
    
      void initialize() {
        // initialize your system
        // Mappers, Systems and Managers have to be assigned here
        // see dartemis_builder if you don't want to write this code
        positionMapper = Mapper<Position>(world);
        velocityMapper = Mapper<Velocity>(world);
      }
    
      void processEntity(Entity entity) {
        Position position = positionMapper[entity];
        Velocity vel = velocityMapper[entity];
        position
          ..x += vel.x * world.delta
          ..y += vel.y * world.delta;
      }
    }
    

    Or using dartemis_builder

    part 'filename.g.part';
    
    @Generate(
      EntityProcessingSystem,
      allOf: [
        Position,
        Velocity,
      ],
    )
    class SimpleMovementSystem extends _$SimpleMovementSystem {
      @override
      void processEntity(Entity entity, Position position, Velocity velocity) {    
        position
          ..x += velocity.x * world.delta
          ..y += velocity.y * world.delta;
      }
    }
    
  6. Add your system to the world:

    world.addSystem(MovementSystem());
    
  7. Initialize the world:

    world.initialize();   
    
  8. Usually your logic requires a delta, so you need to set it in your game loop:

    world.delta = delta;
    
  9. In your game loop you then process your systems:

    world.process();
    

Documentation

API

Reference Manual

Example Games using dartemis

  • darteroids - Very simple example included in the example folder of dartemis, (Source)
  • Shapeocalypse - A fast paced reaction game using Angular, WebAudio and WebGL
  • damacreat - An iogame similar to agar.io about creatures made of dark matter (circles) consuming dark energy (circles) and other dark matter creatures (circles), which can shoot black holes (circles)

Categorias

Dependências

Lista de dependências 1 itens

Repositório-fonte

Projetos que usam este pacote

Ainda não há dados.