Articles of artemis

如何关联实体组件系统中的实体(Artemis)

我想在ECS体系结构中使用Artemis框架实现两个实体之间的关联,Artemis框架非常适合我处理组件,实体和系统。 我有一个实体“帝国”(帝国ID,研究技术等几个组成部分),我希望在两个帝国(战争,和平)之间建立“外交”。 我可以通过哪种方式实施ECS架构? 我知道联合组件,但不涉及实体。 谢谢

你将如何实现和区分input操作和input状态?

我目前正试图设置我的游戏,我开始实施input。 它是这样工作的: 我有一个Input类,每当按下某个键(或释放或其他)时都会通知InputMapper 。 这个InputMapper获取按键,并根据当前的InputContext (Action和State是枚举)返回一个Action或一个State (我使用这篇文章来了解它应该如何工作)。 这里的Action表示像Jump一样的一次性动作,而State表示像move_right这样的连续move_right 。 我现在将一个InputListener附加到InputMapper ,每次按下它都会得到Action或State 。 在游戏中,我使用了一个实体组件系统 。 我有一个ControlComponent ,它应该有一个variables来决定一个实体应该做什么,一个KeyBoardSystem应该设置这些variables。 然后ControlComponent被诸如WalkSystem或JumpSystem类的东西使用。 我现在的问题是:你将如何在一个实体 – 组件系统中实现这些国家和行动? 我知道国家可以由控制组件中的布尔代表,但行动? 他们可能是事件,但ControlComponent doesnt(不应该?)有任何方法或知道使用它的系统。 任何帮助表示赞赏。

与阿尔忒弥斯画小精灵

我正在尝试跟踪StarWarrior代码(Artemis教程)。 我无法弄清楚这些精灵是如何绘制的。 这是玩家船舶初始化的代码: /// <summary>The initialize player ship.</summary> private void InitializePlayerShip() { Entity entity = this.entityWorld.CreateEntity(); entity.Group = "SHIPS"; entity.AddComponentFromPool<TransformComponent>(); entity.AddComponent(new SpatialFormComponent("PlayerShip")); entity.AddComponent(new HealthComponent(30)); entity.GetComponent<TransformComponent>().X = this.GraphicsDevice.Viewport.Width * 0.5f; entity.GetComponent<TransformComponent>().Y = this.GraphicsDevice.Viewport.Height – 50; entity.Tag = "PLAYER"; } 哪一行代码实际上导致船只被绘制? (绘图发生在PlayerShip.cs中)下面是我认为正在发生的代码的注释版本: /// <summary>The initialize player ship.</summary> private void InitializePlayerShip() { Entity entity = this.entityWorld.CreateEntity(); //declare and […]

实体组件体系结构中的系统function

我开始与ECS合作,但我不完全确定自己的理解正确。 正如我现在看到的 – 系统可以实现碰撞,移动的逻辑,类似的东西。 但是专门用于挖掘游戏逻辑的系统是否正确? 它具有挖掘动作的方法,它还设置animation组件来播放“挖掘”animation,并侦听关于animation完成的事件,然后执行挖掘动作。 我做对了吗?

如何实施“碰撞系统”?

我的游戏是使用Artemis框架使用实体系统的方法编写的。 我知道我的碰撞检测是从运动系统调用的,但是我想知道是否使用这种方法进行碰撞检测是一种正确的方法。 我知道我正在考虑一个专门用于碰撞检测的新系统,它将会处理所有的固体实体,以检查它们是否与另一个碰撞。 我想知道如果这是一个正确的方法来处理实体系统方法的碰撞检测? 另外,我应该如何实现这个碰撞系统 ? 我虽然IntervalEntitySystem会检查每200毫秒(这个值是关于Artemis文档select),如果有一些实体正在碰撞。 protected void processEntities(ImmutableBag<Entity> ib) { for (int i = 0; i < ib.size(); i++) { Entity e = ib.get(i); //check of collision with other entities here } }

实体组件系统,input和愤怒的小鸟!

我正在使用Artemis ECS。 我已经有一个游戏的基本知识。 我现在正在试图确定如何正常处理input和较小程度的冲突。 有些人说ECSs,一切都应该是一个组件和数据驱动,你不应该真的使用事件/消息,或者至less在可能的情况下避免它们。 基于组件的devise中的input处理涵盖了我所要求的,但是我会理解何时以及如何通过使用我们都知道的一个游戏(愤怒的小鸟)作为示例来提高事件,添加组件或更加完善。 所以,对于愤怒的小鸟,我会有一些实体组件(组件是纯数据,实体只是一个ID): 弹射器(位置,精灵,状态{免费,可用}?,可点击?,可拖动?可释放?) 鸟(位置,速度,物理{密度},精灵) baddy(位置,速度,物理{密度},精灵,健康) 框(位置,速度,物理{密度},精灵,健康) 以下系统开始: SpriteSystem(具有sprite组件的所有实体) PhysicsSystem(具有所有具有位置,速度和物理组件的实体) HealthSystem(具有健康组件的所有实体) InputSystem(知道键盘/鼠标事件,如点击,拖动,释放,按键等,不知道什么实体应该有…) InputSystem如何与其他系统交互来说弹射器被点击,如果有鸟剩下,没有一个在飞行中,允许它被拖动并释放/开火。 InputSystem会修改catapult实体上的ClickableComponent,DragableComponent和ReleasableComponents吗? 或者,它应该提高某种点击,拖动和发布事件? 什么系统会监听组件更改/事件? 一个弹射系统也许? 当PhysicsSystem注意到Bird和Baddy碰撞时,它是否会产生碰撞事件,我猜健康系统会监听? 或者,是否应该修改已经在实体上的碰撞组件? 碰撞和点击组件需要清除每个游戏循环,如果我采取组件的方法(似乎有点naff …)

用实体组件系统构建服务器端networking

我一直在做一个在线游戏,最近一直在努力将游戏的基础转换为使用Artemis实体系统框架 。 我有一点困难的概念,确切地说应该如何改变服务器networking以使用这种方法。 我原来的做法是让每个会话接收数据包,附加会话信息,然后推送他们到主队列。 然后我有一个单独的线程(我们称之为InputHandler)负责从主队列中删除数据包并处理它们。 在数据包处理期间,该线程可以将要发送到客户端的数据包添加到输出队列。 然后从输出队列中读取另一个线程(我们称之为OutputHandler),并将数据包分派到相应的会话(例如,如果数据包需要发送到所有会话或单个会话)。 我转换到使用Artemis的最初想法是有另一个线程(WorldProcessor)负责所有的实体处理(这是AI,一般逻辑,自动保存等)。 但是,我意识到我不能再做任何事情,比如从InputHandler线程添加实体,因为这可能会导致并发问题。 更好的想法是在InputHandler线程中进行世界处理吗? 我想这也许可以通过建立一个networking系统,在给定的时间框架内尽可能多地处理数据包,然后将控制权交给其他系统来完成。 我考虑的另一种方法是使用InputHandler将事件添加到WorldProcessor中的队列中,然后在系统处理期间处理这些事件,但是我觉得这增加了另一层复杂性,并且必须有更好的方法。 我希望你能给我一些见解或一些关于如何去连接networking和世界处理器线程安全的提示。

组件是否应该在像Artemis这样的基于组件的系统中有子组件?

我正在devise一个使用Artemis的游戏,尽管这更多的是关于基于组件的devise的哲学问题。 假设我有适用于给定组件的非原始数据(组件“动物”可能具有诸如“牙齿”或“饮食”的特性)。 正如我所看到的,在数据​​驱动devise中有三种方法可以解决这个问题: 1)使用“传统”OOP为这些特质生成类。 我想这对性能有负面影响,因为系统必须意识到这些特性才能处理它们。 这也与数据驱动devise的整体理念相矛盾。 2)将这些特质作为子部件包含在内。 这看起来不错,因为我们现在混淆了组件的作用和实体的作用。 此外,Artemis不能将这些子组件映射到其父组件上。 3)将“牙齿”,“饮食”等作为组成部分与 “动物” 一起添加到整个实体中。 虽然这在层次上感到奇怪,但它可能仅仅是基于组件的系统的一个特点。 我怀疑3是正确的思考方式,但是我对其他想法很好奇。