【问题标题】:visual change notification event?视觉变化通知事件?
【发布时间】:2009-10-15 22:10:10
【问题描述】:

任何碰巧知道如何做到这一点的人都会真正帮助我。

也许它很简单,我不知道,但它涉及嵌入式 SWF,所以我想它可能需要与嵌入式 SWF 中的事件处理程序或方法进行交互。

但无论如何,这里是:

我在画布上嵌入了几个 SWF(在 SWFLoaders 中),当其中一个在视觉上发生变化时,我需要知道哪一个发生了变化。

“渲染”事件仅提供部分解决方案:

如果 SWFLoader 包含视频显示,则在该视频显示运行时,父应用程序中会持续生成渲染事件。如果 SWFLoader 仅包含一些静态输入控件 otoh,则父应用程序中没有渲染消息,直到有人与该控件交互并在视觉上更改它,然后在父应用程序中广播渲染事件。所以,这显然是我的要求的一部分。

然而,渲染事件的问题在于它告诉你哪个嵌入的 SWF 实际改变了(在目标或 currentTarget 中。)

但我需要知道哪一个发生了变化。

(例如,是否有单独的渲染消息在嵌入式应用程序中生成(与父应用程序中的那些分开),这可以被检测到。)

【问题讨论】:

  • 是渲染状态的变化唯一能告诉你哪个是活动的吗?还是渲染的变化总是由用户交互激活?
  • 渲染事件是我所知道的唯一事情,它甚至大致近似于我所需要的。但正如我所说,它不会告诉我需要哪个嵌入项目发生了变化,它只检测到它发生了变化。但它不是由用户交互本身触发的,而是由控件的视觉更改触发的。我认为实际上它是由调用 stage.invalidate() 的控件引起的。但无论如何,我想出了一个对我有用的解决方案,所以我将它作为答案发布在下面并关闭它,因为没有人知道我在说什么。

标签: apache-flex actionscript-3


【解决方案1】:

我的解决方法如下:

当渲染事件发生时,我会检查浏览器窗口中是否存在可见的 swfloader,然后将其内容执行 BitmapData.draw 到保存的位图数据中。对于每个新的渲染事件,我会将已保存位图的 10% 像素与新位图进行比较,这将告诉我嵌入的 .swf 视觉内容是否实际发生了变化。 10% 的样本已被证明绰绰有余(只需遍历各个位图的向量,向量索引递增 10,而不是 1。)


BitmapData.draw 非常快,迭代 10000 个矢量元素就像一毫秒。

【讨论】:

  • 这可能是最好的答案。
  • 嗯,有趣的是你会说它是“最好的”。我在想它是“足够好”的说法,“最好的就是足够好的敌人”。不幸的是,我对如何做到这一点有几天的狭隘视野,因此无法看到其他解决方案。
  • 使用不同的混合模式在第一个位图数据上绘制第二个位图数据可能会更快,然后执行 getColorBounds 以查看是否有任何像素不是黑色的。
  • 听起来会更快。我会检查并回复你。顺便说一句,我发现对于某些控件,BitmapData.draw 方法比标准慢很多,例如 flex-sdk 中的 RichTextEditor 示例比任何其他示例控件慢得多。我的意思是 - 回到我原来的帖子 - 我确实需要 Flash 播放器中的一些东西来告诉我嵌入式 SWF 是否在视觉上发生了变化。
  • 听起来会更快。我会检查并回复你。顺便说一句,我发现对于某些控件,BitmapData.draw 方法比标准慢很多,例如 flex-sdk 中的 RichTextEditor 示例比任何其他示例控件慢得多。我的意思是 - 回到我原来的帖子 - 我确实需要 Flash 播放器中的一些东西来告诉我嵌入式 SWF 是否在视觉上发生了变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多