【问题标题】:How to detect if there is a drawing/graphic drawn on a movie clip in AS3?如何检测 AS3 中的影片剪辑上是否有绘图/图形?
【发布时间】:2014-05-22 13:16:55
【问题描述】:

我是 AS3 的新手。我有一个影片剪辑。我想知道影片剪辑上是否有绘图/图形?

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    简单,检查MovieClip的宽度和高度。假设您的意思是 MovieClip 本身包含绘图/图形。

    看到Fygo的评论后

    我做了一些测试,发现MovieClip的scale属性会根据它是否有任何图形而改变。

    意思是如果将宽度和高度设置为零,则对应的scaleXscaleY 也将设置为零。所以你可以做的是检查电影剪辑的比例和尺寸。如果两个比例都是 1:1 并且两个维度都是 0:0,这意味着你没有弄乱尺寸并且它确实是无图形的。

    trace (awd.scaleX, awd.scaleY, awd.width, awd.height);
    //If you get 1 1 0 0 as the output, the MovieClip is empty
    

    【讨论】:

    • 比这复杂得多。您可以将高度/宽度设置为 0,即使这样 MC 也可以有内容。您可以使用 mc.numChildren > 0 轻松检查。但是 mc.graphics ......这更难。我假设您可以将其绘制成位图,并手动检查每个像素是否透明。
    • scaleX 和 scaleY 属性与图形无关,它们在绘图时被读取,而不是由图形写入。所以它们总是相同的,除非程序员决定改变缩放比例。 :)
    • scaleX 和 scaleY 与宽度和高度有关。如果将宽度更改为一半,scaleX 将自动更改为 0.5。如果您将两个比例都设置为 1,那么您实际上将 MovieClip 设置为其“初始”状态,即程序员没有故意将其宽度和高度设置为 0。如果您随后检查宽度和高度,您就会知道是否存在是其中的任何图形。
    【解决方案2】:

    使用readGraphicsData()。我假设如果它是空的,则意味着那里没有绘制任何东西:)

    虽然并不完美,请阅读reference

    【讨论】:

    • 是的,我已经看到了,但是这个 API 的一个问题是它是在 FP 11.6 中引入的。我认为它不会在基于 Linux 的操作系统上运行的 FF 中运行,因为 FP 的最后一次更新是 11.2。
    • 2013 年 3 月 12 日。欢迎使用 Flash Player 11.6。我认为你错了:)
    • 来自 Adob​​e 网站 --- Mozilla、Firefox、SeaMonkey(Flash Player 11.2 是最后一个支持 Linux 的 Flash Player 版本。Adobe 将继续提供安全更新。)
    • 抱歉,我错过了“Linux”。嗯,我想最好的做法就是通过简单的 bool 知道你是否画了一些东西:D
    • 其实我也有一个橡皮擦。如果我画画,我可以将 bool 设置为 true。但是如果我擦除并部分执行,要设置什么?我永远不知道它什么时候被完全擦除。所以在某种程度上我必须知道是否绘制了特定颜色的图形?
    【解决方案3】:

    也许您只是指碰撞检测?检测两个movieClips是否正在接触......? 为此,您需要:

    HitTestObject - (检查两个对象是否通过它们的框边界接触) - Link:

    或 HitTestPoint -(仔细阅读描述)-Link:

    解释这两种方法的好教程在这里:-Link:

    示例代码:

    if ( MC_one.hitTestObject(MC_two) )
    {
      trace("MovieClip One is touching/over MovieClip Two"); 
      //add code needed to happen when touching/over. example below
      //MC_two.gotoAndStop(2); //example tells touched MC_two to change frame to 2
    }
    

    【讨论】:

    • 不,我不是那个意思。
    • 是的,我在发布后意识到我将“on a movieclip”误读为“on”而不是“within”(即:触摸)。无论如何,从 cmets 看来,您实际上是在使用位图数据?您的问题应该是“如何检测是否在 AS3 中的 bitmapData 上绘制了像素?”电影剪辑是无关紧要的,因为它只是一个容器,询问这会导致答案对您的 bmpData 情况没有帮助..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    相关资源
    最近更新 更多