GameWorld

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

这个函数为你的GameWorld增加了一个新的state,这样有助于组织在Canvas中哪些GameSystem会激活,停止或者恢复运行。并帮助将其链接到GameScreenManager的Screen,以便可以同步用户界面和游戏逻辑。

  • add_system(self, widget)
    • Args:
      widget(GameSystem):要添加到GameWorld中system_manager中的GameSystem。
  • 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

重载实现了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
  • ensure_startup(self, list_of_systems)
    • Args:
      list_of_systems(list):systems_ids列表,期待初始化的内容
    • Rreturn:
      bool:如果所有的system都已经添加了,那么返回True,否则返回False

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。这个操作需要自己处理。如果是这种情况的话,你需要自己跟踪多个实体之间关系。
  • init_gameworld(self, list_of_systems, callback=None)
    • Args:
      list_of_system(list):列表类型,包含了我们想要检查和添加的GameSystems
    • Kwargs:
      callback(object):如果不是为None的话,它将会在内存分配和计划更新以后调用。默认是None

该函数应该在你的应用程序中初始化阶段只调用一次。它将在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就会重置为初始的那一个

State切换在这里进行处理。GameSystem在列出顺序中会被添加和删除。这样可以允许控制渲染层的排列,以至于顺序靠后System可以在更前面的System中渲染。

  • register_manager(self, instance, value)
    • Args:
      manager_name(str): 注册manager的名字
      manager_object(GameManager):GameManger注册对象
      注册一个新的GameManager。如果manager_name已经被注册了,那么异常GameManagerAlreadyRegistered 将会被抛出
  • remove_entities(self)

在 update tick中会内部处理实体Entity的移除

  • remove_entity(self, unsigned int entity_id)
    • Args :
      entity_id(int):想要从GameWorld移除的Entity的ID

函数会立即处理entity的移除,同时Component会以加载的逆序进行移除

  • remove_widget(self, widget)
    • Args :
      widget (Widget or CWidget):想要被移除的子对象
      和Widget.remove_widget一样,如果被删除的Widget是一个GameSystem的话,GameSystem对应的on_remove_system 会被进行调用
  • 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的销毁。
      例如:
Clock.schedule_once(partial(gameworld.timed_remove_entity, entity_id))
  • unregister_manager(self, str manager_name)
    • Args:
      manager_name(str):已经注册GameManager的名字
      注销以前注册的GameManager。如果没有使用此名称注册管理器,将引发GameManagerNotRegistered 异常
  • update(self, dt)
    • Args:
      dt(float):自动通过Kivy的Clock传递
      调用更新函数以推进游戏中的时间。任何可更新且未暂停的GameSystem都将被更新。通常,您将使用clock.schedule_once或clock.schedule_interval调用此函数

你可能感兴趣的:(GameWorld)