Defold核心概念之Addressing

48 阅读2分钟

前面讲到Defold中的元素组成都是有层级结构的,那么为了能快速的定位到某一个元素,Defold也有一套自己的元素定位策略,通过给元素编制URL进行定位。在读下去之前,建议你先读一下《Defold核心概念之Building Blocks》。

URL表达式

首先,我们以下图中的main.collection文件中的层级结构为示例,如下图所示:

图片.png

从上图中可以看到这个main.collection中包含多个game object,每个game object中又包含多个component。就以以上图为示例来说明URL定位的示例。

  1. 在background这个game object中的sprite组件,它相对于game object的URL为 #sprite
  2. 在factory这个game object中的factroy脚本组件中,如果在访问同级的star_factory,可以直接使用 #star_factory这个URL,如果想要访问background这个game object下的sprite组件,那么就要使用 /background#sprite 这个URL。
  3. 如果在另一个Collection中要访问当前Collection中的spaceship这个game object下的sprite组件,因为当前这个Collection的Name属性值为main,所以就应该使用main:/spaceship#sprite 这个URL。
  4. 可以使用 . 这个URL表示当前game object,比如在当前game object的script组件中给自己发消息时,使用的URL就可以是 .
  5. 可以使用 # 这个URL表示当前component,比如在当前script组件中给当前script组件发送消息,使用的URL就可以是 #
  6. 通过URL访问时可以依据层级关系使用相对地址,比如在main这个game object中,script组件脚本中可以直接使用 #gui 这个层级相对地址来访问 gui 组件。
  7. 在任何情况下,都可以使用绝对地址,进行访问。如果在某一个Collection中,就使用/开头的绝对地址进行访问,如果不在同一个Collection中,就使用Collection的name属性值做为协议进行访问,比如 main:/factory#star_factory

最后:理解Defold中的元素定位非常重要,在非常多的场景下都需要能通过URL找到元素,或通过URL向元素发送相关消息以修改其行为。