为什么我的动作循环?

时间:2010-07-12 00:41:45

标签: actionscript-3 flash-cs5

我是整个动作脚本/ 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>

2 个答案:

答案 0 :(得分:5)

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

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

这可能是原因。

编辑:也许您只在IDE中检查导出的.swf文件是否循环,但CS5生成的html是否放入标记中。

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

答案 1 :(得分:4)

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

stop();

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

Uncheck this box to disable looping

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