这些类中的大多数都有不能被sphinx读取的cdefed函数。如果您想了解更多关于使用它们的信息,请阅读源代码。
Python GameSystems
这是创建可从python使用的GameSystem的基础。它将组件Componnet存储在一个python列表中,并允许动态控制组件数据,因为它只是一个python对象。这些类型GameSystem并不像更优化的游戏系统那样连续地存储它们的内存,但是非常适合于原型制作或简单地不做那么多处理的游戏系统。
class kivent_core.systems.gamesystem.GameSystem(kwargs)
GameSystem是游戏的一部分,它保存着操作实体Entity 组件Conponent数据的逻辑。它还将管理组装、清理、存储和销毁保存系统数据的组件。基本的游戏GameSystem跟踪组件,这是一个常规的python对象,支持python的所有动态特性,但没有很多静态优化。基本的设置是,我们将创建一个组件对象,并在实体不再需要的时候释放它们以进行垃圾收集。我们将避免通过重用列表中的空间来调整组件列表的大小(删除组件后,组件将被清除为“无”,内部空闲列表将在增加列表之前提供这些空间)。
Attributes属性:
- system_id (int) :正整数类型,此游戏系统的名称,用于命名实体组件属性,并引用GameSystem。
- system_index(NumericProperty):SystemManager数组中GameSystem的整数索引。对应于实体Entity数组中可以找到该系统的Component组件索引的位置。
- updateable (BooleanProperty):Boolean让GameWorld标记是否在这个游戏系统上运行更新。默认为假
- paused (BooleanProperty): 布尔值,用于确定是否应在当前Tick上更新此GameSystem(前提是updateable为真)
- gameworld (ObjectProperty): GameWorld对象引用 ,通过在KV文件中进行绑定
- gameview (StringProperty): 该GameSystem将被渲染到的GameView名字. 如果设置为None,该GameSystem将被渲染到GameWorld的Canvas。默认是None
- update_time (NumericProperty): GamSystem更新Tick刷新率。默认是 1 / 60或者60FPS 。
- components(list):当前激活的component列表。如果列表包含 None,component已经被垃圾回收,内部会维护一个空闲列表,在处理的时候需要跳过这些处理。
- frame_time (float): 上次更新的剩余时间,尚未消耗。
- do_allocation (BooleanProperty):决定在GameWorld分配内存的时候,GameWorld是否运行分配GameSystem的工作
- do_components(BooleanProperty):指示GameSystem是否实际具有组件,从而保留一个用于将组件存储在EntityManager数组中的插槽。
- zones(ListProperty):确定GameSystem内存分配中存在哪些区域。在默认实现中未使用。
函数
-
allocate(self, Buffer master_buffer, dict reserve_spec)
- Args:
master_buffer(Buffer) : 系统将从中分配自身的缓冲区。
reserve_spec(dict):key-value字典数据结构。代表:zone名字 - Entities 数量
如果你的GameSystem想要对某些保持生命周期的数据做静态内存分配,那么需要重载该函数。
- Args:
clear_component(self, component_index)
如果必须在销毁或重用组件之前以某种方式清理组件,那么需要重载该函数。
copy_component(self, unsigned int entity_id, unsigned int component_index)
-
create_component(self, unsigned int entity_id, str zone, args)
- Args:
entity_id (unsigned int) : 要将此组件分配给的Entity的标识ID。
zone(str):不用于基本GameSystem,但用于使用indexedMemoryZone的其他系统。
arg(dict):字典类型,component创建用于初始化参数 - Return:
component_index (unsigned int) : 新分配好的Component ID
- Args:
-
get_component(self, zone)
此函数在内部用于确定是将新点添加到列表中,还是使用现有的空闲槽。通常,除非您正在为组件设计自定义内存管理,否则不需要直接调用或使用它。
- Return:
component_id (unsigned int): 新生成组件的Component ID。
- Return:
init_component(self, component_index, entity_id, zone, args)
重写此函数以提供用于设置组件的自定义逻辑,默认情况下,args字典参数每个key-value对将在组件上setattr。
on_add_system(self, component_index, entity_id, zone, args)
在GameWorld的state改变的期间,GameSystem被添加的时候,函数就会被调用
on_delete_system(self, component_index, entity_id, zone, args)
当GameWorld删除一个System的时候,函数就会调用
on_gameview(self, instance, value)
如果设置了gameview,则处理将此Widget添加到相应父级的事件。
on_remove_system(self, instance, value)
在GameWorld state更改期间移除GameSystem时调用的函数
remove_component(self, unsigned int component_index)
通常情况下,GameWorld会自动调用它。如果要在不销毁Entity的情况下删除组件,请直接调用此函数。如果要重写组件清理的行为,请重写clear_component。如果你直接处理系统组件的存储时才重写此功能。
Args:
component_index(unsigned int):组件需要被删除的component_id-
update(self, dt)
- Args:
dt(float):Clock传入的时间参数。应该等于update_time。
- Args:
重写此函数以创建游戏系统更新逻辑,通常如下所示:
gameworld = self.gameworld
entities = gameworld.entities
for component in self.components:
#make sure to skip released components.
if component is not None:
#If we need other components from the entity let us
#retrieve it like this:
entity_id = component.entity_id
entity = entities[entity_id]
#Do your system logic per entity here
class kivent_core.systems.gamesystem.GameSystem(kwargs)
组件将跟踪游戏系统逻辑的数据。它跟踪自己的ID(组件列表中的索引)和它自己Entity的ID。如果返回的实体_id为<unsigned int>-1,则组件当前未连接到实体。
Attributes属性:
_id(unsigned int):Component的id
Cython GameSystems
StaticMemGameSystem 和 MemComponent 是所有内置游戏系统GameSystem的基础。它们是cythonic类,将数据存储在使用自定义内存管理分配的原始C数组中,这些自定义内存管理是为内存处理程序模块中的池和连续处理而设计的。
kivent_core.systems.staticmemgamesystem.StaticMemGameSystem
StaticMemGameSystem保留一个静态分配的C结构数组作为其组件。分配分为几个不同的Zone“区域”。这样做有助于确保对特定类型的所有实体Entity进行大致有序的处理。StaticMemGameSystem的组件也将进行"池"管理。所有组件都将创建一次,并尽可能频繁地重复使用。在区域中创建的组件不能超过Zone配置指定的数量。这个类不应该直接使用,而是从继承来创建自己的游戏系统,使用静态的内存池功能。在python中永远不应该继承这个类,因为您需要cython/c级别的访问权来访问各种属性和组件。
Attributes属性:
size_of_component_block (int):内存将在内部分解成块大小为 size_of_component_block大小的字节块。默认值为4。
type_size(int):类型大小,一般你会设置成sizeof(你的结构体)
component_type(MemComponent) :这个对象可以让你的C struct 组件的数据从python进行访问。应该从MemComponent继承
processor (BooleanProperty):如果设置为true,系统将分配一个助手对象ZonedAggregator,以便在更新函数中批处理系统的所有组件。默认为false。
system_names (ListProperty):要由ZonedAggregator绑定其他组件系统的名称,这应该是在更新函数期间需要组件数据的其他StaticMemGameSystem系统的列表。
do_allocation (BooleanProperty):对于StaticMemGameSystem,默认为true
components(IndexedMemoryZone):与简单的python列表不同,组件存储在更复杂的indexedmemoryzone中,后者既支持对底层结构数组的直接C访问,也支持对封装C数据的组件类型对象的python级别访问。
allocate(self, Buffer master_buffer, dict reserve_spec)
从提供的Buffer中,根据reserve_spec参数zone_name-count字典 分配indexedmemoryzone
indexedmemoryzone将存储在C扩展名imz_components属性的内部,可以通过components属性在python中访问。如果processor 为真,则还将分配ZonedAggregator。这将根据system_name 存储指向实体各个组件的空指针。这使得检索各种组件数据进行处理变得更容易。
- Args:
master_buffer(Buffer):此系统项将从中分配自身的缓冲区
reserve_spec (dict):字典类型key-value,代表区域名-entity数量
clear_component(self, unsigned int component_index)
没有为StaticMemGameSystem实现,在子类化时重载该函数。使用此功能设置清除组件的值以进行回收
get_component(self, str zone)
替代GameSystem的默认get_component,使用indexedMemoryZone代替处理组件数据。clear_component将在返回组件的新索引之前调用,以确保不存在垃圾数据。
返回:
unsigned int:新产生的组件Index-
get_size_estimate(self, dict reserve_spec)
返回在调用allocate之前可以安全调用的估计大小内存空间。GameWorld内部用来估计是否有足够的内存来支持GameSystem
- 返回:
int:系统分配的估计大小(字节)。
- 返回:
init_component(self, unsigned int component_index, unsigned int entity_id, args)
没有为StaticMemGameSystem实现,在子类化时重载实现。使用此函数设置组件值的初始化。
remove_component(self, unsigned int component_index)
覆盖GameSystem的默认行为,将数据处理职责传递给indexedMemoryZone。在调用memoryzone上的free_slot之前,将调用clear_component。
kivent_core.systems.staticmemgamesystem.MemComponent
Aggregators
待续。。。
Position Systems
待续。。。
Rotate Systems
待续。。。
Scale Systems
待续。。。
Color Systems
待续。。。
Rendering Systems
待续。。。
Controlling the Viewing Area
待续。。。