我是整个动作脚本/ 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>
答案 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上有点不同但你明白了):
或者您可以用控制电影的方式编写代码(通过将 stop()放在您需要的位置)。我更喜欢这个选项,这样无论是否在HTML中设置了循环,我的应用程序/动画仍然按照我的意图运行。