Причини MovieClip да игнорира кода на Timeline AS3

Имам персонализиран клас, който е разширен от MovieClip. Класът основно създава бутон, който използва етикети на рамка във MovieClip, за да се движи между състоянията на бутоните, докато се изпращат събития с мишката. Всяко състояние (всеки с дължина около 20 кадъра) се прекратява с времева линия stop().

Този клас е бил използван в много други проекти, но след определен момент в моето текущо приложение всички бутони, създадени като разширение на моя клас бутони, спират да изпълняват кода на времевата линия и просто се възпроизвеждат в цикъл. Това включва всички следи, поставени във времевата линия, но целият код в класа все още се изпълнява правилно, дори извикванията gotoAndPlay, когато състоянието на бутона се промени.

Най-странната част е, че не се хвърля грешка от нито един от неправилно работещите бутони на сцената.

Това, от което се нуждая, са предложения за това какво може да попречи на всеки обект, който разширява определен клас, да изпълни код на времевата линия, без да изведе грешка.

Благодаря!

АКТУАЛИЗАЦИЯ: Това все още ме стъписва. Нашите проекти обикновено се състоят от три части: лек предварително зареждане, езикова и възрастова врата, след което основното приложение. Всеки се зарежда в предишния, като всеки път се използва текущият домейн на приложението. След като основното приложение бъде заредено, всеки персонализиран обект на показване, който разширява MovieClip (директно или косвено), ще игнорира всеки скрипт за действие директно на своята времева линия. Възпроизвеждащата глава обаче все още може да се контролира от класа.

АКТУАЛИЗАЦИЯ 2: Това е кодът в класа на тестов бутон, който направих. Забележете как в него няма нищо.

package com.test
{
    import flash.display.MovieClip;

    public class TestLabelButton extends MovieClip
    {
        public function TestLabelButton():void
        {

        }
    }
}

Актуализация 3: Така че го стесних, но е странно. Изглежда, че мога да заредя своя езиков порт в програмата за предварително зареждане съвсем добре, като езиковият портал е swf с персонализиран клас на документа, който разширява MovieClip. След това обаче, ако заредя още SWF файлове, които съдържат персонализиран doc клас, разширяващ MovieClip, все едно всички впоследствие създадени MovieClips на техните разширения губят целия код на техните времеви линии.


person shanethehat    schedule 08.04.2011    source източник
comment
Виждал съм това да се случва, когато местя обект на сцената и също така променям свойства като x и y в кода.   -  person Mims H. Wright    schedule 09.04.2011
comment
По време на инстанцирането на неправилно работещите обекти не се извършват други действия.   -  person shanethehat    schedule 12.04.2011
comment
Трябва да видя настройките ви, за да диагностицирам точно това. Всякакви проблеми могат да възникнат от рамкови скриптове в конфликт с код на клас, който също се опитва да контролира главата за възпроизвеждане. Като цяло е най-добре да избягвате КАКВОТО и да е времева линия в клип, който възнамерявате да управлявате външно. Особено проблематични и трудни за възпроизвеждане са бъговете, които се случват само когато вашият клас play() или gotoAndPlay() е в конфликт с директива на времевата линия, така че по принцип имате шанс 1-in-numberOfFrames да възпроизведете грешката.   -  person Adam Smith    schedule 12.04.2011
comment
За съжаление не мога да споделя кода в текущия му вид. Осъзнавам колко полезно е това! Мога да потвърдя, че персонализираните обекти, които създавам, не отменят нито един от методите на MovieClip или неговите предци и единственият код на времевата линия е няколко срещания на stop().   -  person shanethehat    schedule 12.04.2011


Отговори (4)


От това, което описвате, звучи като, когато стартирате SWF във FlashIDE с грешки при компилиране.
Той просто ще зацикли през всички кадри.
Сигурен съм, че сте го виждали преди нормалните флаш бутони просто да мигат.

Опитахте ли да вземете обидния MovieClip и да го поставите в нов проект сам и да видите какво ще се случи?

person The_asMan    schedule 14.04.2011
comment
Вярвам, че от всички отговори ти си най-добрият тук. - person ; 15.04.2011
comment
Това е точно поведението, да, въпреки че все още е възможно да се получи контрол върху времевата линия след това и не се изпращат грешки. - person shanethehat; 15.04.2011
comment
Какво имате предвид под възстановяване на контрола върху времевата линия след това? и пробвал ли си вече да поставиш обиден филмов клип в нов проект? - person The_asMan; 15.04.2011
comment
Тук ще присъдя точките. В крайна сметка създадох нов проект и започнах да добавям всички елементи на стария проект един по един. В крайна сметка всичко беше добавено и работеше без грешка, така че предполагам, че е възникнала някаква повреда в моите FLA. - person shanethehat; 02.05.2011

Не съм сигурен, че разбирам напълно проблема ви, но това звучи невероятно познато за проблем, който имах в миналото. Аз правя същото. Никога не използвам символи на бутони и винаги избирам вместо това да използвам MovieClip, тъй като те са по-гъвкави и след като всичките ви анимации на състоянието на бутоните са изложени веднага, намирам много по-интуитивен начин на работа.

Както и да е, уверете се, че какъвто и кадър да извиквате чрез етикет/име на кадър, няма stop() на този кадър. Правил съм тази грешка няколко пъти, когато имам етикет на рамка fRollOver в началото на анимация за преобръщане и когато gotoAndPlay("fRollOver"), той просто не прави нищо.

Друго нещо, което открих е, и съм изпитвал това много пъти, че ако имате stop() веднага на първия кадър, понякога нещата спират. Flash просто не го харесва понякога и не мога да го обясня. Със сигурност работи на почти всички мои проекти. Може да е проблем с версията на Flash.

person Daniel Carvalho    schedule 12.04.2011
comment
Разделих тестовете си на прост символ MovieClip, съдържащ анимация от 30 кадъра с stop() на кадър 5. Това е свързано с клас, който разширява MovieClip, но иначе е празен. Анимацията се възпроизвежда в цикъл и не зачита stop() на кадър 5. - person shanethehat; 12.04.2011
comment
Вероятно ще трябва да видя кода във вашия клас, който разширява MovieClip, за да помогна допълнително. На този етап можете да споделите кода, така че хората да могат да ви помогнат възможно най-добре. - person Daniel Carvalho; 13.04.2011

Моята препоръка е да проектирате вашия бутон за филмов клип по такъв начин, че всички анимации, необходими за състоянията, да се случват в техните собствени клипове, със собствени циклични времеви линии. С други думи, всяко "състояние" на вашия бутон има един кадър на времевата линия на вашия клип на бутон - без обикновено възпроизвеждане или зацикляне на основната времева линия. Цялото управление на главата за възпроизвеждане е във вашия външен клас и се състои само от *gotoAndStop*s за управление на основната времева линия и евентуално команди stop() и play() за стартиране и спиране на времевата линия на анимационните клипове на всяка рамка на състоянието на бутона.

В крайна сметка, не се опитвайте да контролирате главата на възпроизвеждане на който и да е клип от повече от едно място, защото това означава да предизвикате странни, често трудни за възпроизвеждане контролни конфликтни грешки.

Освен това грешка във вашия скрипт за рамка ще спре Flash Player да изпълнява скриптове за рамка на този клип. Получавате ли грешки или предупреждения по време на компилиране?

person Adam Smith    schedule 12.04.2011
comment
Докато коментирах отговора на Daniel Carvalho по-долу, осъзнах, че това не засяга само персонализираните ми бутони, но всеки обект, който разширява MovieClip. Дизайнът на бутоните беше добър за множество приложения досега и тъй като структурата на приложението ни не се е променила, дори не знам къде да търся. - person shanethehat; 12.04.2011

Вярвам, че The_asMan е на прав път. Вярвам, че или получавате грешка по време на изпълнение, която причинява това, или сте успели да изградите своето наследство на обекти, използвайки флаш IDE по такъв начин, че по същество сте прототипирали върху класа MovieClip. Ако някога сте били AS2 или AS1 човек, ще разберете какво имам предвид с това. Тъй като вашият клас е по същество празен, аз клоня към опция 2. Вярвам, че по някакъв начин сте заменили класа MovieClip или сте го прототипирали с помощта на Flash UI.

ИЛИ

Вие сте изградили вашия обект погрешно и сте поставили множество екземпляри на сцената по време на проектиране. Като този:

въведете описание на изображението тук

Проблемът, разбира се, би бил, че вместо да направите този библиотечен обект CLASS OF TYPE ваш персонализиран клас с уникален идентификатор, вие просто сте свързали съдържанието на този филмов клип към един клас. В този случай създаването на множество екземпляри на сцената с помощта на потребителския интерфейс за проектиране технически би довело до грешки, така че по време на изпълнение флашът вероятно компенсира автоматично тази грешка, като декларира тези обекти в техните собствени динамично генерирани класове, което би издухало цялата ви функционалност в аномален начин. Правилният начин да направите това би бил или да оставите експортирането си за конфигурацията на actionscript както е и да създадете екземпляри на този клас в код, или да зададете основния клас на обекта на вашия персонализиран клас и да му дадете уникален идентификатор (ако искате да оформление в изглед за проектиране, пример по-долу).

въведете описание на изображението тук

Така че сега flash знае предварително, че сте създали обекти в изгледа за проектиране със специфичен базов клас и знае, че искате да наследите от него. В горното състояние байт кодът удря виртуалната машина и става WOA, имате ли нужда от 10 копия от абсолютно същия клас на сцената? Е, това няма да работи, така че нека създам някои общи обекти тук за вас с това визуално съдържание в тях. Както и да е, мисля, че се повтарям, така че се надявам това да е полезно. Просто теория. :)

person Community    schedule 15.04.2011
comment
Всъщност си играех с това много и го стесних до използване на класове на документи, които разширяват Movieclip, и както казвате, това е като че презаписва дефиницията на MovieClip в домейна на приложението. Проблемът е, че не мога да обясня защо това се случва, така че нямам представа как да го реша. - person shanethehat; 15.04.2011
comment
Въз основа на вашите коментари относно факта, че не можете да споделяте повече информация за проблема, като предоставяте код/файлове, бих казал, че е време да отмените този въпрос и евентуално дори да го изтриете. - person ; 15.04.2011
comment
Просто защото без повече информация е невъзможно да се направи нещо повече от предположение. - person ; 15.04.2011
comment
Съжаляваме, но не че презаписва MovieClip, свойствата и методите все още са налични, просто унищожава всеки код на времевата линия. - person shanethehat; 15.04.2011
comment
Може да сте прав, трябва да намеря време да създам работещ модел, който мога да покажа публично. Надявах се, че това може да е проблем, който някой вече е имал. - person shanethehat; 15.04.2011
comment
ppFace трябва да разшири poo.pie.Butt - person ansiart; 15.04.2011
comment
@DanielH rofl някой е забелязал! @shane, така че когато казвате код на времевата линия, имате предвид код, който е на времевата линия ВЪТРЕ в обекта(ите) на вашата библиотека? - person ; 16.04.2011
comment
В библиотечни обекти и във времевата линия на заредения swf. - person shanethehat; 18.04.2011
comment
Можете ли да ми изпратите файловете? Вярвам, че е това, което казах, вие сте създали екземпляри на клас, заместващ филмов клип/прототип над него или нещо подобно. Ако можете да ми изпратите файловете лично, вижте моите контактни НФО в моя профил тук, уведомете ме. Ако ги разгледам и открия проблема, ще актуализирам отговора, за да опиша естеството на проблема за всички останали. - person ; 18.04.2011
comment
Оценявам предложението, но не съм собственик на кода и не мога да получа разрешение да го споделя. - person shanethehat; 19.04.2011