实体构件系统

braga的Python项目详细描述


#braga

实体组件系统。

先决条件
python 2.7



ecs简而言之,实体代表整个"事物"——就像一只猫。组件是表示事物的能力或性质的属性或方法的组。要赋予实体(如cat)能力,cat需要与组件(尤其是组件实例)关联。例如,"location"可以是一个组件类;或者"portable",或者"container",或者"canbeswitchedon",或者"flying",或者类似的东西。要使cat具有活动的质量,请给cat一个"alive"组件类的实例;该"alive"实例将存储cat是否处于活动状态。


ecs的s用于system;系统允许您将实体分组以同时进行更新,并提供服务interfa。用于更改具有指定组件配置文件的实体的CE。


使用预设组件组合方面-选择具有特定组件组合的实体世界-收集给定项目的所有实体和系统


创建一个实体以在特定项目中使用,创建该实体并为您的项目在整个世界中添加组件(请参见下文)。如果您只是在胡闹,请使用"entity()"实例化一个实体。实体是用uuid创建的。

例如,您可能希望某些实体(例如猫或树)活着,而其他实体(例如文件柜或书籍)不活着。
您的"活着"组件可能看起来像这样:

```
ive=alive

def die(self):
self.alive=false
````
这里,"alive"组件类型存储一个属性,该属性指示猫、树或其他生物实体是活的还是死的,以及一个允许猫或树过期的方法。

/>
像"alive"这样的简单组件类型不需要知道其他组件或实体,甚至不需要知道特定"alive"实例所属的实体。但是,有时如果不应用一些逻辑检查(这些检查可能需要有关组件所属实体的知识),就不能进行更改。例如,也许某些实体可以拾取和携带其他实体。然而,一个人不应该能够携带两件以上的东西,一只手一件,除非他们背着背包,而猫不应该能够携带一件以上的东西,在它的嘴里。(显然,这是一个极其简单的世界。欢迎使用游戏设计。)本着分层设计的精神,单个组件不应该知道其他组件或实体,甚至它们的父实体。系统的关键是管理修改组件所涉及的逻辑。

一个系统的关键是负责一个特定的实体集合(通常是一组具有特定组件集的实体),因此没有世界的系统是没有意义的,世界定义了游戏中的所有实体,从而为每个系统提供了边界。

除了包含逻辑外,系统还用于自动对组o执行操作或与组o相关的操作f用户定义频率的组件。假设你有一个带有图形的游戏,需要以给定的频率渲染该游戏。您可能会发现编写一个系统来收集和导出有关各个实体位置的信息很有帮助。每个系统都必须有一个"update"方法,该方法将调用时钟的每个滴答声(您定义的频率)。


braga附带了一个"assemblage"类,可以用来创建工厂。汇编存储您希望此类实体具有的组件类型,它们的"make"方法返回具有该特定组件组合的实体。可以使用组件类型列表或组件类型字典加上初始参数来初始化程序集。例如:

```
e:{})
>;dead_cat=dead_cat_factory.make()
>;dead_cat.alive
false
````

方法:

```
>;pet-cat-factory=assemblage([name,alive,portable])
>;fore-cat=pet-cat-factory.make(name='stallion',alive=false)
>;new-cat=pet-cat-factory.make(name='grep')
>;fore-cat.name
'stallion'
>;new-cat.alive
true
````

方面

方面主要用于系统确定世界上哪些实体与所讨论的系统相关。像汇编一样,方面是用组件类型初始化的,并且有一个"是否感兴趣"方法,当用实体调用时,如果实体有一组与方面一致的组件类型,则该方法将返回true。


方面可以选择必须有特定组件的实体类型,_不能有特定的组件类型,_可以有特定的组件类型,或以上的任意组合。方面是用一组组件初始化的,这些组件实体必须具有"all of"、"some of"或"exclude"。例如,

```
精确的]).make(alive=false,has撸leaves=false)
>;ent=assemblage([活着的,健谈的,落叶的]).make()
>;树方面。你对(死的树)感兴趣吗
true
>;树方面。你对(ent)世界感兴趣吗
false
``````

游戏中的所有实体和系统。如果你使用braga来定义一个特定游戏的对象、能力和系统,那么**强烈**鼓励你只为你的游戏在世界上创建实体。world s有一个"make_entity"方法,可以选择使用汇编和初始kwargs,因此可以使用"make_entity",就像使用汇编的"make"一样——只有"make_entity"会自动将实体设置为世界的一部分。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java搜索具有外键的JPA实体的约定是什么?   java事务没有使用事务和嵌套方法的2个实例回滚   SpringBootJavaMessageFormat。使用umlauts格式(ä/ö/ü)   java如何通过字符串在sqlite中搜索列   JAVAlang.ClassNotFoundException:org。冬眠Hibernate4的例外情况   java消息正文在Gmail中被弄乱了   java Apache Ignite未使用空值更新缓存   Java正则表达式未捕获组   java onBackPressed();除非我叫super否则不行。onBackPressed();两次密码   java CustomAlertDialog在删除数据库记录后未完成其进程   C++中的迭代器(Stl)与java,是否存在概念上的区别?   Java在不知道字符编码的情况下将字节[]转换为字符串   来自本地WSDL文件的java Web服务客户端   java工具可用于在一个位置聚合所有项目相关信息   java在Netbeans中的maven项目中设置依赖项