Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   почему циклится этот код? (http://www.flasher.ru/forum/showthread.php?t=154637)

Atarion 20.04.2011 14:30

почему циклится этот код?
 
Код AS3:

trace("НАЧАЛО");
stop();
import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;
import flash.events.ProgressEvent;
 
 
var mLoader:Loader = new Loader();
var mRequest:URLRequest = new URLRequest("br.swf");
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
mLoader.load(mRequest);
 
 
function onCompleteHandler(loadEvent:Event)
{
        trace("ЗАВЕРШЕНО");
        addChild(loadEvent.currentTarget.content);
                loadEvent.currentTarget.content.stop();
                mLoader.removeEventListener(Event.COMPLETE,onCompleteHandler);
                mLoader.removeEventListener(ProgressEvent.PROGRESS,onProgressHandler);
                stop();
}
function onProgressHandler(mProgress:ProgressEvent)
{
var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;
trace(percent);
}

это лодаер. внешний ролик br
циклится- все показывает заново - и начало и завершение в трассировке и та к бесконечно. а внешний ролик становится виден - но не выполяется. код в нем не начинает работать. виден только фон.

GBee 20.04.2011 14:34

Потому что он в кадре?

Atarion 20.04.2011 14:35

ну как это. все коды - в кадре. я же стоп поставил!!! stop()

cleptoman 20.04.2011 14:40

Код AS3:

(loadEvent.currentTarget.content as MovieClip).stop();

не?

Atarion 20.04.2011 15:01

не помогло это. да и не могло помочь. все равно циклится. циклится сам лоадер! а не внешний ролик!

cleptoman 20.04.2011 15:05

значит ваш фрейм проигрывается циклично..
смотрите трейсы и ищите ошибки (в загружаемом ролике в том числе)
и да,
Код AS3:

mLoader.removeEventListener(Event.COMPLETE,onCompleteHandler);
mLoader.removeEventListener(ProgressEvent.PROGRESS,onProgressHandler);

вы не лоадер подписывали, а лоадер инфо

Atarion 20.04.2011 15:16

вы не лоадер подписывали, а лоадер инфо
в смысле?
------------
значит ваш фрейм проигрывается циклично..
да? ха! так в этом то и проблема)
смотрите трейсы и ищите ошибки (в загружаемом ролике в том числе)
компилятор ошибок не выдает. почему это ошибки должны порождать цикличность?

Добавлено через 15 минут
действительно убрал внешний ролик некоторые моменты - перестало циклится. но! компилятор не выдает никакой ошибки! ни одного замечания. как же найти из за чего циклится- наугад что ли. да и вообще почему он циклится то? почему именно такая реакция

Добавлено через 32 минуты
офигеть(((( пока пустой ролик - все нормально. стоит написать одну единственную строчку кода в любом кадре - циклиется. как исправить???? кто знает?*????

КорДум 20.04.2011 16:00

Цитата:

как исправить???? кто знает?*????
Перестать писать в кадрах.

Deimos747 20.04.2011 16:23

У меня была такая проблема, когда совпадали методы флешки родителя и ребёнка (Main)

NikolyA 20.04.2011 16:28

Atarion тебе ответ дали уже, читай внимательно что сказали: не писать в кадрах

Ariel 21.04.2011 00:23

компилятор все ваши коды все равно пихает в кадры. И внутренние и внешние. И в кадрах и за кадром.

gloomyBrain 21.04.2011 00:44

Цитата:

компилятор все ваши коды все равно пихает в кадры. И внутренние и внешние. И в кадрах и за кадром.
И пруф-линк пожалуйста, дабы мы все поверили.

Ariel 21.04.2011 00:56

какой может быть пруф-линк? Вас даже в ИДЕ в паблиш-сеттингсах прямо спрашивают, в который фрейм по счету хотите впихивать ваши коды?

alatar 21.04.2011 01:13

Найдите-ка, сначала, фреймы у спрайта, прежде чем такое утверждать. Другой вопрос, что я могу прямо указать в какой фрейм вкомпилить класс, но это не значит, что компилятор сам не спросясь все распихивает по фреймам.

Psycho Tiger 21.04.2011 01:40

Спрайт если очень захотеть можно считать за однокадровый мувиклип. Мне больше интересно как тогда существуют НЕ наследники DisplayList.

Ariel 21.04.2011 01:52

2 алатар :: :) Стало быть, Вы думаете, что Ваша IDE единственная. Но она все равно не при делах ибо такова идеология Флаш-плеера. Код на кадрах. Ибо кадры еще никто не отменял. Даже если Ваша ИДЕ об этом не спрашивает. :)
По умолчанию Ваши классики пихаются в первый кадр. Но процессом можно управлять. :)
И кто сказал
Цитата:

что компилятор сам не спросясь все распихивает по фреймам.
?


2 Psycho Tiger ::
Цитата:

Мне больше интересно как тогда существуют НЕ наследники DisplayList.
Вопрос\мысль не совсем ясен...
Можно с уверенностью утвержать, что корпорация Адобе на текущий момент не предоставила нам возможность класс Документа унаследовать НЕ от DisplayObject-a. Подразумевается, наверное, что если вы, ребята, решились использовать нашу технологию Flash, то вы по-любасу будете что-то ПОКАЗЫВАТЬ. НА ЭКРАНЕ. А не просто проигрывать звук, например.

alatar 21.04.2011 02:40

SWF не хранит код в кадрах. Более того, само понятие кадра довольно виртуальное.

Ariel 21.04.2011 03:25

2 алатар :: Что-то я в этой спецификации не вижу нигде ничего про "SWF не хранит код в кадрах.". Может Вы конкретные места-абзацы приведете?
Далее, мега-фраза:
Цитата:

Более того, само понятие кадра довольно виртуальное.
ИМХО шедевр! Это можно трактовать как угодно. От "не смейте делать" до "решайте сами" (с). :)
Я даже могу добавить! Само понятие Флаш - виртуальное. Есть только АктивЫкс (На Винде), частный случай COM. А ФРЕЙМ - суммарное кол-во транзакций за одну итерацию таймера. А заливаем по сети IP-пакетами последовательность байтов.
Но сути это не меняет. Если договариваемся поддерживать идеологию FP и, соответственно, юзаем терминологию FP, то ГДЕ мы тогда храним наши ресурсы (звуки, к0ртинки, скрипты, шрифты)?. Флешка заливается и проигрывается покадрово (это намек!). Залив первый кадр, мы можем порешать (в частности, кодом), что нам делать с остальными кадрами. Можно начать проигрывать себя дальше, а можно, к примеру, подождать до конца закачки ... Кто возьмет билетов пачку...
Что еще? Посмотрите команду addFrameScript.
Или вот еще тов. Етс. как всегда расставляет все точки над Ы. Четыре (4!) года уже этому посту. И у него же была где-то аццкая приблуда для запихивания кода по фреймам МувиКлипа...

С уважением.
P.S. За переводную блиттинговую сцылку СПАСИБО! Реально помогает! :)

fish_r 21.04.2011 04:44

Тут совсем недавно, кто то, аналогичную тему открывал... Сам потом разобрался, говорит, что в загружаемом ролике был класс Майн, как и в загружающем. От этого и траблы были.

alatar 21.04.2011 14:57

Цитата:

Я даже могу добавить! Само понятие Флаш - виртуальное. Есть только АктивЫкс (На Винде), частный случай COM.
Даже под виндой, есть не только "АктивЫкс" (который только для эксплорера).
Цитата:

ГДЕ мы тогда храним наши ресурсы (звуки, к0ртинки, скрипты, шрифты)?
В тегах. См. спецификацию.
Цитата:

Флешка заливается и проигрывается покадрово (это намек!).
По-факту — потегово.
Цитата:

Залив первый кадр, мы можем порешать (в частности, кодом), что нам делать с остальными кадрами.
Они все равно будут загружены, если не оборвется соединение.
Цитата:

Что еще? Посмотрите команду addFrameScript.
Это функция, а не команда компилятору. Разницу объяснять надо?

Дальше по-порядку. Вот дамп флешки
Код:

[HEADER]        File version: 10
[HEADER]        File is zlib compressed. Ratio: 49%
[HEADER]        File size: 2513
[HEADER]        Frame rate: 24.000000
[HEADER]        Frame count: 5
[HEADER]        Movie width: 550.00
[HEADER]        Movie height: 400.00
[045]        4 FILEATTRIBUTES as3 symbolclass
[04d]      1284 METADATA
[009]        3 SETBACKGROUNDCOLOR (ff/ff/ff)
[056]        11 SCENEDESCRIPTION
[053]        51 DEFINESHAPE4 defines id 0001
[027]        4 DEFINESPRITE defines id 0002
[01a]        6          PLACEOBJECT2 places id 0001 at depth 0001
                        uses IDs: 1
[001]        0          SHOWFRAME 1 (00:00:00,000)
[000]        0          END
[027]        4 DEFINESPRITE defines id 0003
[01a]        12          PLACEOBJECT2 places id 0002 at depth 0001 name "clip2"
                        uses IDs: 2
[001]        0          SHOWFRAME 1-2 (00:00:00,000-00:00:00,042)
[01a]        14          PLACEOBJECT2 moves object at depth 0001
[001]        0          SHOWFRAME 3 (00:00:00,083)
[000]        0          END
[01a]        14 PLACEOBJECT2 places id 0003 at depth 0001 name "clip"
                uses IDs: 3
[052]      943 DOABC, lazy load
[04c]        46 SYMBOLCLASS
                exports 0003 as "movie_fla.clip_1"
                exports 0000 as "movie_fla.MainTimeline"
                uses IDs: 3, 0==== Error: Id 0000 is not yet defined.
 ====

[001]        0 SHOWFRAME 1-4 (00:00:00,000-00:00:00,125)
[01a]        8 PLACEOBJECT2 moves object at depth 0001
[001]        0 SHOWFRAME 5 (00:00:00,167)
[000]        0 END

В корне «clip»:
1 кадр
Код AS3:

import flash.events.MouseEvent;
stop();
clip.addEventListener(MouseEvent.CLICK, onClick);
function onClick(e:MouseEvent):void {
  clip.removeEventListener(MouseEvent.CLICK, onClick);
  play();
}

5 кадр
Код AS3:

import flash.events.MouseEvent;
stop();
clip.addEventListener(MouseEvent.CLICK, onClick2);
function onClick2(event:MouseEvent):void {
    clip.removeEventListener(MouseEvent.CLICK, onClick2);
    clip.play();
    gotoAndStop(1);
}

В него вложен clip2:
1 кадр
Код AS3:

stop();
trace("clip2, frame 1");

3 кадр
Код AS3:

trace("clip2, last frame");

Как видно из дампа весь код оказался в одном теге. (единственная возможность передвинуть его за SHOWFRAME это дать прямое указание компилятору). А если еще присмотреться, то видно что "кадров" 2,3,4 вообще несуществует. И во избежание...
Цитата:

The ShowFrame tag instructs Flash Player to display the contents of the display list. The file is
paused for the duration of a single frame.
Кадр в данном случае, если не вдаваться в подробности, время между ENTER_FRAME и RENDER.

gloomyBrain 21.04.2011 15:35

Цитата:

то ГДЕ мы тогда храним наши ресурсы (звуки, к0ртинки, скрипты, шрифты)?
До кадра. Вернее, до тэга, который покажет кадр, использующий эти ресурсы. Кстати, насчет ресурсов. А как тогда по-вашему, можно загрузить звук? Вы думаете, волшебный FP сам создаст кадр для хранения нового звука?

Уверен, что пост alatar'а заставит Вас переосмыслить предмет разговора

Ariel 25.04.2011 16:53

Ой, заглядываю на форум задать очередной ламерский вопрос, а тут!!... :eek: ужас..

2ГлумиБрэйн :: Вынужден разочаровать Вас. Не заставит. Пост уважаемого Алатар-а хоть и длинный и многабукав, но на предмет обсуждения он ни разу к сожалению не повлиял и ничего не опроверг из все того же:

1) Компилятор сует код по фреймам. Для программиста ActionScript это так. НЕ НАДО тут же начинать доказывать, что для программиста на C++\ASM нет никаких фреймов, а есть только байты, и понятия байткода вообще не существует. А "виртуальная машина" - поповское слово.

2) На конец можно обратить-таки внимание на ёмкую формулировку фирмы Adobe - создателя Flash (НЕ НАДО меня тут же хватать за язык с криками "Флаш создали в Macromedia, а еще до этого в FutureWave!!!"). Снова (!) открываем Паблиш Сеттингс и во вкладочке ActionScript Settings читаем: "Export classes in frame:". Обращаем внимание – на предлог «in».
Еще раз, у себя внутре оне могут хранить ресурсы в чем угодно: в тэгах, гектолитрах, мегапарсеках, человекочасах, ДО кадра, ПОСЛЕ кадра, НАД кадром. Для программиста среды Flash (НЕ НАДО сразу кричать "и Флекс тоже! А про АИР тебе кто-нть говорил?") это сути не меняет. Доступность в коде ресурсов (классов, звуков etc.) наступает только после заливки соответствующего кадра, согласно общепринятой терминологии.

3) Позвоните\напишите Адобам с вопросами:
-) как мне экспортировать мои классы между первым и вторым фреймами?
-) как мне экспортировать мои классики в ПРАВИЛЬНЫЙ тег?

Как минимум Вас не поймут..

4) Также можно наглядно полистать книги по АкшнСкрипту и погуглить словосочетание «as3 export in first frame»

5) Потом можно погуглить «as3 export in tag» и сравнить результаты.

6) Лично Вы можете считать, что ресурсы хранятся «До кадра». Сути это опять не поменяет. Пока кадр не зальется, Ваши ресурсы доступны ни разу не будут. Хоть из тегов, хоть из другой Галактики.

7)
Цитата:

Кстати, насчет ресурсов. А как тогда по-вашему, можно загрузить звук? Вы думаете, волшебный FP сам создаст кадр для хранения нового звука?
Речь идет об импортированных ресурсах. Это очевидно. По умолчанию Ваш звук будет покладен в первый фрейм, если Вы хотите сделать его доступным для скрипта в среде. Или при ембеде флекс0вым компиллером.

Как это ни странно, но даже в такой простой вещи, оказывается можно остаться каждому со своим мнением... Один будет экспортировать классы во фреймы, а другой - между ними.

2Алатаръ ::
Цитата:

Они все равно будут загружены, если не оборвется соединение.
Этого никто никогда не оспаривал. Речь шла о том, что решение программер принимает. Можно начать играть, а можно подождать заливки след. кадров. Я пересказываю собственный пост!

Цитата:

В тегах. См. спецификацию.
Ну, собственно, уже отвечено выше тов. ГлумиБрэйну.
Можно сойтись на том, что я буду экспортить код во фреймы, согласно принятой терминологии, а Вы - в теги. Надеюсь Вам это поможет работать в команде.


Предчувствую начало тролла.. :)

gloomyBrain 25.04.2011 17:12

Цитата:

Компилятор сует код по фреймам. Для программиста ActionScript это так.
- результатом компиляции является swf-файл.
- у swf-файлов нет фреймов.

Для всех людей на Земле это так. Очевидно, Вы с другой планеты.

Ariel 25.04.2011 17:54

Вот я и говорю, начинаем кормить тролля. :quiet:
Цитата:

результатом компиляции является swf-файл.
Не может быть!
Цитата:

- у swf-файлов нет фреймов.
А у кого есть фреймы? Куда мы экспортируем ресурсы? Чего мы прелоадим?
Полагаю, что Вы сейчас укажете, что SWF это пожатый архив? :)

alatar 25.04.2011 18:02

Ариэлъ, что по-вашему есть фрейм? Дайте нам определение.

Добавлено через 3 минуты
В рамках AS3, конечно. Раз уж раздел располагает.

dimarik 25.04.2011 18:27

Ariel, Вам зачет автоматом!

Добавлено через 30 секунд
Ах, да. Тема закрыта.


Часовой пояс GMT +4, время: 15:56.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.