1

我是整个动作脚本/Flash 世界的新手……但我试图自学足以完成一些事情。

我确信这个问题的答案很简单......但我有一个 .as 文件,其中包含以下代码:

package
{
    import flash.external.ExternalInterface;

    public class Sender
    {
        public function Sender()
        {
            ExternalInterface.call("func1()");
        }
    }
}

我有一个带有以下代码的 fla(我什么都没碰过):

import Sender;

var mySender:Sender = new Sender();

现在发布后,我对 html 文件(包括在下面)进行了一些调整......并且我的 Javascript 被调用(耶!)。不幸的是,在解除警报后,它再次被调用......一次又一次......一次又一次。我不知道为什么(我已经确认我的 Flash 电影没有设置为循环播放,但这就是我所拥有的)。任何帮助将不胜感激!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <title>sender</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <style type="text/css" media="screen">
        html, body { height:100%; background-color: #ffffff;}
        body { margin:0; padding:0; overflow:hidden; }
        #flashContent { width:100%; height:100%; }
        </style>

        <script>
            function func1()
            {
                alert('hello external stuff');
            }
        </script>
    </head>
    <body>
        <div id="flashContent">
            <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="1" height="1" id="sender" align="middle">
                <param name="movie" value="sender.swf" />
                <param name="quality" value="high" />
                <param name="bgcolor" value="#ffffff" />
                <param name="play" value="true" />
                <param name="loop" value="true" />
                <param name="wmode" value="window" />
                <param name="scale" value="showall" />
                <param name="menu" value="true" />
                <param name="devicefont" value="false" />
                <param name="salign" value="" />
                <param name="allowScriptAccess" value="always" />
                <!--[if !IE]>-->
                <object type="application/x-shockwave-flash" data="sender.swf" width="1" height="1">
                    <param name="movie" value="sender.swf" />
                    <param name="quality" value="high" />
                    <param name="bgcolor" value="#ffffff" />
                    <param name="play" value="true" />

                    <param name="loop" value="true" />
                    <param name="wmode" value="window" />
                    <param name="scale" value="showall" />
                    <param name="menu" value="true" />
                    <param name="devicefont" value="false" />
                    <param name="salign" value="" />
                    <param name="allowScriptAccess" value="always" />
                <!--<![endif]-->
                    <a href="http://www.adobe.com/go/getflash">
                        <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
                    </a>
                <!--[if !IE]>-->
                </object>
                <!--<![endif]-->
            </object>
        </div>
    </body>
</html>
4

2 回答 2

5

在您发布的 html 代码中,它说

<param name="loop" value="true" />

这可能是原因。

编辑:也许你只在 IDE 中检查了.swf导出的文件是否要循环,但 CS5 生成的 html 无论如何都会放在标签中。

EDIT2:我同意 gmale 你应该把stop();你的代码。如果您将代码放在其他任何地方(或者如果您希望其他人使用它),它们可能已loop设置为 true,在这种情况下,将其编码为万无一失是确保它不会循环的唯一方法。此原则适用于所有 AS3 代码。

于 2010-07-12T00:46:13.173 回答
4

另外,尝试将以下代码放在您的第一帧中:

stop();

如果您有动画,请将其放在最后一帧中。默认情况下,Flash 播放器会循环播放您的 SWF 文件。您可以通过在发布设置中设置属性来更改该行为(如 31eee384 所述,这会将循环设置为 false)。您可以通过单击“文件”>“发布设置...”来设置该属性,然后转到“HTML”选项卡并取消选中“循环”框(在 Windows 上可能会有所不同,但您明白了):

取消选中此框以禁用循环

或者您可以以控制电影的方式编写代码(通过将stop()放置在您需要的地方)。我更喜欢这个选项,这样无论是否在 HTML 中设置了循环,我的应用程序/动画仍然可以按我的意愿工作。

于 2010-07-12T01:10:29.183 回答