我正在开发一个 javascript 框架,用于在 html 画布上使用基本复合模式创建带有嵌套精灵的简单动画。
我一直在对 Clutter 和 Flash(非常相似的结构)的工作进行建模。“舞台”包含屏幕上的所有项目,即“DisplayObjects”。这些可以聚合在“DisplayObjectContainer”中,该“DisplayObjectContainer”继承自“DisplayObject”。“舞台”本身也是一个“DisplayObjectContainer”。所有这些都继承自“EventDispatcher”。
在过去几天的大部分时间里,我都在阅读这些系统的事件流,并在各种开源项目中搜索示例。
据我了解,当一个事件被调度时,它应该遵循一定的传播路径:它从舞台流到显示对象层次结构(“捕获”阶段),直到它到达该事件的“目标”,然后“气泡”支持显示层次结构。如果这还不够清楚,这里的图像应该有助于解释:
http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e4f.html
http://docs.clutter-project.org/docs/clutter/1.4/event-flow.png
我无法理解其中的一个方面,我无法判断是我自己还是我认为的不清楚:
假设我正在处理点击。我单击显示并使用浏览器的本机事件处理来检索单击的 x/y 坐标,然后将其发送到显示层次结构以确定我单击了哪个对象。
到目前为止,这是我代码中的“捕获”阶段。但这与文档说目标在进入事件流时应该已经附加到事件完全不一致。
我真的应该遍历我的显示项目图两次吗?
对此问题的任何建议或专业知识将不胜感激。