Почему мой ActionScript зацикливается? - PullRequest
1 голос
/ 12 июля 2010

Я новичок во всем мире Action Script / 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 вызывается (да! К сожалению, после отклонения оповещения оно вызывается снова ... и снова ....... и снова. Я понятия не имею, почему (я убедился, что мой флэш-фильм не установлен на цикл, но это все, что у меня есть). Любая помощь будет принята с благодарностью!

<!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 ]

5 голосов
/ 12 июля 2010

В HTML-коде, который вы разместили, написано:

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

Возможно, причина в этом.

РЕДАКТИРОВАТЬ: Возможно, вы отметили в IDE только если .swfЭкспортируемый файл должен был зацикливаться, но HTML, созданный CS5, помещал в тег независимо от этого.

EDIT2: Я согласен с gmale, что вы должны поместить stop(); в свой код.Если вы поместите свой код где-либо еще (или если вы хотите, чтобы кто-то другой использовал его), им может быть присвоено значение loop, равное true, и в этом случае кодирование его как надежного - ваш единственный способ убедиться, что он не зацикливается.Этот принцип применим ко всему коду AS3.

4 голосов
/ 12 июля 2010

Также попробуйте добавить следующий код в свой первый кадр:

stop();

, если у вас есть анимация, поместите его в свой последний кадр.По умолчанию Flash Player зацикливает ваши SWF-файлы.Вы можете изменить это поведение, установив свойства в настройках публикации (как упомянуто в 31eee384, которые установят зацикливание в false).Вы можете установить это свойство, щелкнув Файл> Параметры публикации ..., затем перейдя на вкладку HTML и сняв флажок с надписью «Цикл» (он может немного отличаться в Windows, но вы поймете, что идея):1005 *Uncheck this box to disable looping

Или вы можете написать свой код так, чтобы он управлял фильмом (поместив stop () там, где вам это нужно).Я предпочитаю эту опцию, чтобы независимо от того, установлена ​​ли зацикленность в HTML, мое приложение / анимация по-прежнему работает так, как я намереваюсь.

...