class kivent_core.gameworld.GameWorld
游戏世界是您游戏中所有实体和游戏系统的管理者。它将负责初始化和删除实体,以及管理添加、删除和暂停哪些游戏系统。
Attributes属性:
- state(StringProperty) :一个字符串属性,对应于应用程序在states 字典dict 中的当前状态。它将控制游戏gamescreenmanager 的当前screen,以及当前从画布中添加或删除哪些系统或暂停哪些系统。
- number_entities(NumericProperty) :这是系统中当前实体的数量。不要直接修改,用于生成entity_id。
- gamescreenmanager(ObjectProperty) :对GameScreenManager的引用
- entities(list) :是所有实体对象的列表,entity_id对应于此列表中的位置。
- states(dict) :是一个包含system_ids的字典。keys是‘systems_added’,’systems_removed’, ‘systems_paused’, ‘systems_unpaused’
- entites_to_remove(list) :将在下一个update tick中清除的entity_ids列表
- system_manager(SystemManager):注册所有添加到游戏世界的游戏系统GameSystem,并包含分配和使用这些GameSystem的信息。
- master_buffer(object):一个缓冲区,所有其他静态分配内存的来源
- system_count (NumericProperty):在实体Enityes数组中已经分配内存的system数量
- update_time(NumericProperty):更新间隔
- size_of_entity_block (NumericProperty):Entity的内存块大小,单位是千字节KB
- size_of_gameworld(NumericProperty):整个GameWorld 静态分配内存大小,单位是千字节KB
- zones(DictProperty): 字典类型,区域名-Entity数量。字典元素是: Zones[zone_name] = entity_count(int)
- model_manager(ModelManager) : 处理VertexModels的加载。您应该只使用这个模型管理器加载模型数据,不要自己去实例化
- managers(dict):GameWorld中已经注册的GameManagers。默认情况下将包含“纹理管理器”、“模型管理器”、“声音管理器”和“系统管理器”(‘texture_manager’, ‘model_manager’, ‘sound_manager’, and ‘system_manager’ )。其他GameSystem可以使用register_manager注册Managers,或者使用unregister_manager注销Managers
函数
-
add_state(self, state_name, screenmanager_screen=None, systems_added=None, systems_removed=None, systems_paused=None, systems_unpaused=None, on_change_callback=None)
- Args:
state_name(str) : state的名字,应该是独一无二的。 - Kwargs:
- screenmanager_screen(str):当这个state被过渡进入时,GameScreenManager设置当前screen的名字,默认为None。
- systems_added(list):system_id的列表。当这个state被过渡进入时,这个列表中的system_ids应该被添加到GameWorld 的canvas中,默认是为None
- systems_removed(list):system_id的列表。当这个state被过渡进入时,这个列表中的system_ids应该从GameWorld 的canvas中删除,默认是为None
- systems_paused(list):system_id的列表。当这个state被过渡进入时,这个列表中的system_ids应该被暂停,默认是为None
- systems_unpaused(list):system_id的列表。当这个state被过渡进入时,这个列表中的system_ids应该恢复运行,默认是为None
- on_change_callback (object):回调函数将接受state_name,previous_state_name作为参数。回调函数在state 改变之后触发调用。默认是None
- Args:
这个函数为你的GameWorld增加了一个新的state,这样有助于组织在Canvas中哪些GameSystem会激活,停止或者恢复运行。并帮助将其链接到GameScreenManager的Screen,以便可以同步用户界面和游戏逻辑。
-
add_system(self, widget)
- Args:
widget(GameSystem):要添加到GameWorld中system_manager中的GameSystem。
- Args:
-
add_widget(self, widget, index=0, canvas=None)
- Args:
widget(Widget or CWidget):要添加到的Widget - Kwargs:
index(int):要在子列表中指定该Widget的索引。
canvas(str):取值None,‘before’或者‘after’。指定哪一个canvas添加该widget。默认值是None,意味着base canvas
- Args:
重载实现了Kivy中默认的add_widget,这样可以确保能够处理GameSystem中相关的逻辑,以及可以接受Widget和CWidget基类作为参数。如果一个GameSystem被添加,gamesystem就会被作为widget参数调用add_system
-
allocate(self)
通常作为init_gameworld的一部分进行内部调用,此函数为gameworld分配主_缓冲区master_buffer,注册zones,分配EntityManager,并在所有GameSystem上调用allocate(do_allocation==true)
-
clear_entities(self, zones=[])
清除GameWorld中每一个Enity
-
delete_system(self, system_id)
- Args:
system_id(str):需要被删除的GameSystem 的ID
从GameWorld中删除GameSystem
- Args:
-
ensure_startup(self, list_of_systems)
- Args:
list_of_systems(list):systems_ids列表,期待初始化的内容 - Rreturn:
bool:如果所有的system都已经添加了,那么返回True,否则返回False
- Args:
在init_gameworld期间运行,以确定开始分配是否安全。在这种情况下,意味着所有列在系统列表list_of_systems中的系统ID都已添加到GameWorld中。
-
get_entity(self, str zone)
如果在deactivated_entities中没有实体当前可用,内部会用于创建新实体,不要直接调用该函数。
-
init_entity(self, dict components_to_use, list component_order, zone='general')
- Args:
components_to_use (dict):字典类型参数。key是system_id,value是用于创建Component的参数
component_order (list):列表类型参数。应该包含components_to_use 里面所有的system_id参数,定义了component初始化顺序
该函数用于创建一个新的实体Entity。它会返回创建Entity的entiy_id。
这是用于创建新实体的函数。它返回所创建实体的实体ID值entity_id。components_to_use是system_id的dict,用于generate_component函数参数。component_order 是初始化组件的顺序。
如果用components_to_use dict提供一个现有Entity,而不是创建一个新的。需要注意的是必须先移除父实体Entity。这个操作需要自己处理。如果是这种情况的话,你需要自己跟踪多个实体之间关系。
- Args:
-
init_gameworld(self, list_of_systems, callback=None)
- Args:
list_of_system(list):列表类型,包含了我们想要检查和添加的GameSystems - Kwargs:
callback(object):如果不是为None的话,它将会在内存分配和计划更新以后调用。默认是None
- Args:
该函数应该在你的应用程序中初始化阶段只调用一次。它将在KV语言中确保所有的GameSystem得到添加,接着进行内存分配操作。一旦内存分配操作已经完成,GameWorld的update操作会随着Clock.schedule_interval而进行,函数是update_time。如果kwarg 中的回调函数并不是None的话,这时候回调函数也会被调用(没有额外的参数)
-
on_state(self, instance, value)
- Args:
instance(object):应该指向self
value(string):新state的名字
如果state不存在的话,state就会重置为初始的那一个
- Args:
State切换在这里进行处理。GameSystem在列出顺序中会被添加和删除。这样可以允许控制渲染层的排列,以至于顺序靠后System可以在更前面的System中渲染。
-
register_manager(self, instance, value)
- Args:
manager_name(str): 注册manager的名字
manager_object(GameManager):GameManger注册对象
注册一个新的GameManager。如果manager_name已经被注册了,那么异常GameManagerAlreadyRegistered 将会被抛出
- Args:
-
remove_entities(self)
在 update tick中会内部处理实体Entity的移除
-
remove_entity(self, unsigned int entity_id)
- Args :
entity_id(int):想要从GameWorld移除的Entity的ID
- Args :
函数会立即处理entity的移除,同时Component会以加载的逆序进行移除
-
remove_widget(self, widget)
- Args :
widget (Widget or CWidget):想要被移除的子对象
和Widget.remove_widget一样,如果被删除的Widget是一个GameSystem的话,GameSystem对应的on_remove_system 会被进行调用
- Args :
-
timed_remove_entity(self, unsigned int entity_id, dt)
- Args :
entity_id (unsigned int):想要被移除Entity的ID
dt (float): Kivy’s Clock.schedule.通过传递的时间参数
此功能可用于使用Kivy的Clock.schedule_once为将来的某个时间安排实体Entity的销毁。
例如:
- Args :
Clock.schedule_once(partial(gameworld.timed_remove_entity, entity_id))
-
unregister_manager(self, str manager_name)
- Args:
manager_name(str):已经注册GameManager的名字
注销以前注册的GameManager。如果没有使用此名称注册管理器,将引发GameManagerNotRegistered 异常
- Args:
-
update(self, dt)
- Args:
dt(float):自动通过Kivy的Clock传递
调用更新函数以推进游戏中的时间。任何可更新且未暂停的GameSystem都将被更新。通常,您将使用clock.schedule_once或clock.schedule_interval调用此函数
- Args: