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 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/
A Component is a pretty simple structure and should not contain any logic:
classPositionextendsComponent{
num x, y;
Position(this.x, this.y);
}
Or if you want to use a PooledComponent:
classPositionextendsPooledComponent{
latenum x, y;
Position._();
factoryPosition(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.
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:
classMovementSystemextendsEntityProcessingSystem{
lateMapper<Position> positionMapper;
lateMapper<Velocity> velocityMapper;
MovementSystem() : super(Aspect.forAllOf([Position, Velocity]));
voidinitialize() {
// 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);
}
voidprocessEntity(Entity entity) {
Position position = positionMapper[entity];
Velocity vel = velocityMapper[entity];
position
..x += vel.x * world.delta
..y += vel.y * world.delta;
}
}
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)