PDA

Просмотр полной версии : Баг или фича? Четыре загадки.


sergwizard
20.04.2003, 00:31
Привет, всем.
В аттаче - четыре простейших мувика (с исходниками). Каждый мувик - загадка. Вот только интересно, - это фичи или баги? Естественно, сам я знаю, как бороться с этими багами (кроме первой загадки). Но будет интересно услышать Ваши мнения и предложения.
Я уверен, что ответы таких уважаемых мною флэшеров, как Nox Noctis, У.Брэдберри, TTS, DeliMiter, Забор или Шрих-код (|||||||||) и других, не упомянутых, но помнимых будут хорошим уроком начинающим флэшерам.

Табуреткин
20.04.2003, 02:13
Ты в скрипте два раза описываешь функцию для mc на вход в кадр... причем второе описание (движение mc1) соответственно перекрывает первое (движение mc). Попробуй в нижнем в листинге описании поменять mc на mc1? и сразу забегают два мува....

Удачи

Табуреткин
20.04.2003, 02:18
Стоит только убрать обработчики на загрузку и мувы начинают ездить синхронно...

Удачи!

Табуреткин
20.04.2003, 02:34
Думаю смещение происходит из-за накопления погрешности в математических операциях... (sin,cos)

Удачи!

llllllllll
20.04.2003, 22:59
Оригинал написал(а) sergwizard
Забор или Шрих-код (|||||||||)

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

1. Тут видимо дело в фреймовой структуре SWF-ки и в положительных и отрицаетльных значениях глубины, то, что в минусе - создано в редакторе и не подлежит удалению, если конечно не переместить на положительный уровень глубины ...
я думаю это все можно углядеть из аттаченного файла ...

2. Да, естественно - это погрешности ...

3. Тоже правильно ...
mc1.onLoad = function(){ // это не будет работать ...
this._x = 80;
trace(this + "._x set value 80");
}
mc2.onLoad = function(){ // а это будет ...
this._x = 80;
trace(this + "._x set value 80");
}

... почему так - отдельно ....

4. ну тут тоже уже есть ответ, это видать просто опечатка.

TTS
21.04.2003, 07:09
Стопудовый баг.
При переходе gotoAndPlay мув на положительной глубине видимо воспринимается как созданный динамически и, т.к. переход происходит внутри области жизни мува, он остаётся там, где был.
Не найдя исходного мува на своём месте флэш воспринимает следующий фрейм как ключевой (что, вобщем-то, не лишено смысла) и втыкает мув на положенную ему минус какую-то глубину по исходным координатам. Вот и получается их двое. :rolleyes:

Табуреткин
21.04.2003, 11:35
А можно всёж попросить отдельно объяснить, почему так :) Это касаемо третьего пазла.

Удачи :)

llllllllll
21.04.2003, 13:30
Оригинал написал(а) TTS
Стопудовый баг.


Ну не такой уж это и баг =), я наверное плохо объясняю =)

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

Вот если это повесить на наш MC:
onClipEvent(load){
trace(_parent._currentframe);
}
мы увидим что где и как, и в каком месте он старается исправить "ошибку" глупого юзера=)))))
... тут вообщето помоему все ясно, более чем исчерпывющее описание структуры SWF есть в инете, вполне сойдет для 4-ой версии, а в 5-ой и 6-ой в нее и ничего не добавили (точнее ничего, что касалось бы фреймов, таймлайнов, спрайтов и т д)

llllllllll
21.04.2003, 13:31
Оригинал написал(а) Табуреткин
А можно всёж попросить отдельно объяснить, почему так :) Это касаемо третьего пазла.

Удачи :)

Можно, но чуть позже =), на трактаты нада немного времени иметь =)

llllllllll
21.04.2003, 13:35
Оригинал написал(а) TTS
Стопудовый баг.

Да и еще =) наверно глупо ругаться, ведь все кричат, что сцены отстой, что теллтрагеты в помойку, даже клипэвенты уже не катят, но почему тогда не сказать тоже самое про двухкадровый цикл?

Табуреткин
21.04.2003, 13:37
Оригинал написал(а) llllllllll


Можно, но чуть позже =), на трактаты нада немного времени иметь =)

Терпеливо жду :)))

Пасибы!

Удачи! :))

TTS
21.04.2003, 15:33
С учетом вышесказанного (http://www.flasher.ru/forum/showthread.php?threadid=41521#post265683) можно предположить, что выполнение _рутового скрипта начинается сразу после полной загрузки всех используемых в кадре символов, но до окончания загрузки клиповых скриптов. Если у клипа скрипта нет - он считается полностью загруженным. И в этом случае onload пролетает мимо кассы.

ЗЫ это по поводу третьего номера

Табуреткин
21.04.2003, 15:54
Оригинал написал(а) TTS
С учетом вышесказанного (http://www.flasher.ru/forum/showthread.php?threadid=41521#post265683) можно предположить, что выполнение _рутового скрипта начинается сразу после полной загрузки всех используемых в кадре символов, но до окончания загрузки клиповых скриптов. Если у клипа скрипта нет - он считается полностью загруженным. И в этом случае onload пролетает мимо кассы.

ЗЫ это по поводу третьего номера

Может оно и так, но сриптов нет у обоих клипов, однако обработчик onLoad не вызывается для mc1 и вызывается для mc2.

Почему??? :)

Удачи!

llllllllll
21.04.2003, 16:09
2Табуреткин: там есть скрипты =)))) убери пробелы в клип экшенах ... или добавь на другой клип =)
2TTS: ты совершенно прав, вот и трактаты не нада писать =))) оказывается все уже понаписали =)))) ... хотя я думаю можно кое-что еще добавить ... =)))

TTS
21.04.2003, 16:12
2 Табуреткин: читал невнимательно. Пробел или пустая строка в экшнах - уже скрипт. Посмотри экшны второго клипа - там стоит пустая строка.

2 llllllllll
старается исправить "ошибку" глупого юзераА вот тут я с тобой не согласен. Если бы он пытался исправить "ошибку", он бы вернул клип на исходную глубину без изменения координат, ведь нарушение структуры здесь только в изменении глубины. Нет, похоже, он его просто "теряет".

См. сюда

TTS
21.04.2003, 16:15
Оригинал написал(а) llllllllll
оказывается все уже понаписали =))))Поиск рулит!!! :D :D :D :D

Табуреткин
21.04.2003, 16:27
Оригинал написал(а) llllllllll
2Табуреткин: там есть скрипты =)))) убери пробелы в клип экшенах ... или добавь на другой клип =)
2TTS: ты совершенно прав, вот и трактаты не нада писать =))) оказывается все уже понаписали =)))) ... хотя я думаю можно кое-что еще добавить ... =)))

дамс.... век живи, век учись :) не знал, что пробелы тож скриптами считаются :))

Удачи!

llllllllll
21.04.2003, 16:56
Оригинал написал(а) TTS
А вот тут я с тобой не согласен. Если бы он пытался исправить "ошибку", он бы вернул клип на исходную глубину без изменения координат, ведь нарушение структуры здесь только в изменении глубины. Нет, похоже, он его просто "теряет".


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

TTS
21.04.2003, 18:00
это все можно разобрать по винтикам, но вот только зачем??? =))))) Да тут, вообще-то просили мнений и предложений. Ну, собсно, предложения прямо вытекают из мнений =) Придётся не свопить, а дуплицировать и скрывать исходный.

llllllllll
21.04.2003, 18:18
Не если на счет предложений, то свопить и даблить мы не будем, мы на крайняк его зааттачем для пятерки или скрейтим для эмыкса =))))))))) , и фреймовых циклов тоже делать не будем =))


... не плохая фраза получилась %)

sergwizard
22.04.2003, 03:50
Ну что за едрена калабаха! Что с flasher.ru творится? Сам же замутил топик, и сам же не могу на него пробиться. Поэтому и не мог вовремя реагировать на реплики. Сейчас уже немного поздно, но все же....
В четвертой загадке явная очепятка. Прошу прощения. Раньше у меня этот мувик был разбит на два отдельных. Мог бы прислать их и сейчас, но уже нет смысла. Истину выяснили: фреймовый скрипт mc.onLoad не работает, если в самом клипе "mc" нет внутреннего скрипта. Поэтому я и делал пустой срипт (пустую строку) в клипе. Баг уже широко известен и его принимают, как фичу.
С дупляжом тоже вроде разобрались.
Но вот с
Думаю смещение происходит из-за накопления погрешности в математических операциях... (sin,cos) и Да, естественно - это погрешности ...
Позвольте не согласиться. Давайте рассмотрим другой пример, из которого выбросим все эти анусы и пенисы, то есть синусы и косинусы. И упростим его до неприличия. А он, гад, все равно смещается. О, как.
Ах, да. Забыл сказать, что рад опять повстречаться на этих страницах с TTS и –блин - ну как тебя называть? Гребешок? Зебра? Полосатый? О, знаю как: Клетчатый!
Я так чувствую, что из-за постоянных трудностей с доступом на этот форум, народ постепенно разбежится. А жаль. И люди хорошие, и я многому здесь научился. Теперь околачиваюсь на flashkit.com

TTS
22.04.2003, 04:29
onClipEvent (enterFrame){
dy=0.001;
_y-=dy;
trace(_y);
}
Дискрет для смещения клипа = 0,05.
Округление - по принципу метода "floor" ("-=" замени на "+=").
А в окне пропертей округление идёт вообще до первого знака после запятой.
Гребешок? Зебра? Полосатый? О, знаю как: Клетчатый! Я его про себя называю "Десять палочек". Комплимент, если он мужеского полу ;)

Вроде ничего обидного не сказал...

sergwizard
22.04.2003, 06:36
Все верно! Только ты бы подроднее все написал. Это же не для меня. Я и так это знаю. Это же полезно будет для тех, кто еще не знает. А этот топик многие читают.
А я этот пример выдрал с хорошего сайта.
http://ericlin2.tripod.com
Я его про себя называю "Десять палочек". Комплимент, если он мужеского полу
А вдруг ты его оскорбляешь недооценкой его возможностей?:)

TTS
22.04.2003, 13:26
Клёво! Блин, когда-то я тоже умел рубика собирать. А исходник бильярда тут кто-то очень хотел. Щас пошукаю.

УильямБрэдберри
22.04.2003, 13:31
Оригинал написал(а) llllllllll


Да и еще =) наверно глупо ругаться, ведь все кричат, что сцены отстой, что теллтрагеты в помойку, даже клипэвенты уже не катят, но почему тогда не сказать тоже самое про двухкадровый цикл?

WOW! =)
слова не мальчика, но мужа!!! =))

а что, кто-то еще ЭТИМ пользуется?
Это ж еще с пятерки нужно было выкинуть ;) ;) ;)

llllllllll
22.04.2003, 14:01
Что касается погрешностей это ведь так в ECMA-262, на сколько я понимаю =)
тут был пост ish-a =)
http://flasher.ru/forum/showthread.php?threadid=44366

там Boolean(d == 1) где d - после вычислений с дробными числами по идее должно было быть равно 1 и в итоге мы должны были получить TRUE, но не так все просто =)

... в JS-ке это хорошо видно writeln("d=1 >>"+(d)) выводит 1.00000000002 - т.е. не равно 1, а причина - все данные в JS вычисляются как float + ограниченность разрядов ...

llllllllll
22.04.2003, 14:02
Оригинал написал(а) УильямБрэдберри


WOW! =)
слова не мальчика, но мужа!!! =))

а что, кто-то еще ЭТИМ пользуется?
Это ж еще с пятерки нужно было выкинуть ;) ;) ;)

это не ко мне =))))

llllllllll
22.04.2003, 14:30
Что касается "onLoad"-а и "onData" - это не баг который стал фичей =)))))

... это совершенно обычная весчь - ничему не противоречащая =)

MovieClip.prototype.addProperty("onData",function(){trace(this + ".onData called");},null);
MovieClip.prototype.addProperty("onLoad",function(){trace(this + ".onLoad called");},null);

на _level0 - "контейнер" - не совсем обычный "mc", естественно срабатывает, так как в нем есть код, данные ... которые так же обрабатываются, словно они были бы загружены с помощью "loadVariables" - эти данные не есть сам сорс "mc", и так же "onLoad" - должен срабатывать если к примеру мы компоненту или смарт клипу добавим код, он вешается onClipEvent(initialize), так, что мне кажется нет ничего не обычного в том, что реакция есть даже на пробел ... =)))

DeliMIter
23.04.2003, 11:30
Уилл ;)))))))
sergwizard молодец, задал правильную тему.

Я исходники не сомтрел, но глюк со свапом знаю, безглючный свап бывает только... в однокадровом клипе. Скорее всего флэш в понятие "инстанс" вкладывает не только какие-то параметры клипа, но и его глубину. Причем по моему (недавно проверял) переход по таймлайну в ПОЛОЖИТЕЛЬНУЮ сторону не дает нужного эффекта, а вот переход назад заставляет флэш создавать новый инстанс. Который из них при этом валидно адресуется извне - не помню, но факт, что при отображении всех переменных трейсятся ДВА таргета с одинаковыми параметрами, и до одного из мувиков не достучаться. Фича :)))

sergwizard
25.04.2003, 02:14
А вот еще один забавный эффект. Простой, но неожиданный.

И вопрос к DeliMiter(у):
Честно говоря, мои поздравления, как впрочем и поздравления всех кого я знаю, в номинации "КОД" предназначаются товарищу DeliMIter-у =))) (цитата Клетчатого).
И еще одна цитата. Это уже WB:
я ПОБЕДИТЕЛЬ !
а их не судят
Так кто же победитель?
Признавайся, DeliMiter, "Черно-белый танец" – твой?
Если это правда, - снимаю шляпу. Искренние поздравления и выражение восторга!
Такого я еще не видел. Даже не представлял, что Flash способен на такое. Спасибо, что показал. Возможности Flash(а) приятно удивили, твои способности - нет. В них и раньше сомнений не было.
Жалко, что я вчера не смотрел Диброва. Я его не люблю и никогда не смотрю. Так чей же "Танец"?????????

Fapser
25.04.2003, 10:31
mc.onEnterFrame = function(){
if(mc1._x<=100){
back = 0;
}

должно быть не mc а mc, тогда все работает

llllllllll
25.04.2003, 14:34
Оригинал написал(а) sergwizard

И вопрос к DeliMiter(у):
Честно говоря, мои поздравления, как впрочем и поздравления всех кого я знаю, в номинации "КОД" предназначаются товарищу DeliMIter-у =))) (цитата Клетчатого).
И еще одна цитата. Это уже WB:
я ПОБЕДИТЕЛЬ !
а их не судят
Так кто же победитель?
Признавайся, DeliMiter, "Черно-белый танец" – твой?
Если это правда, - снимаю шляпу. Искренние поздравления и выражение восторга!
Такого я еще не видел. Даже не представлял, что Flash способен на такое. Спасибо, что показал. Возможности Flash(а) приятно удивили, твои способности - нет. В них и раньше сомнений не было.
Жалко, что я вчера не смотрел Диброва. Я его не люблю и никогда не смотрю. Так чей же "Танец"?????????

Ээээ, язык мой - врга мой =), победил WB!!! =) с чем его еще раз могу поздравить, но на мой взгляд, что я и высказал, и видимо ввел кого-то в заблуждение, работа DeliMiter'а была лучше =)

sergwizard
25.04.2003, 16:15
Клетчатый, хотя ты и враждуешь со своим языком, скажи, пожалуйста, как называется работа DeliMiter(a), и как ее найти? Линок кинь. У меня связь хреновейшая и искать тяжело.

llllllllll
25.04.2003, 16:25
http://artflash.guelman.ru/nominants.php?l=ru&n=3

http://artflash.guelman.ru/popup.php?l=ru&id=751 - это WB
http://www.rwwws.ru/dload/dmi/index.html - это DeliMIter


да и впринципе не плохие "Бабочки" - Fisher'a =))
http://artflash.guelman.ru/popup.php?l=ru&id=734

sergwizard
25.04.2003, 19:51
Клетчатый, спасибо за линки. Посмотрел.
И, пусть простит меня DeliMiter, но – все-таки – "Танец" лично мне понравился больше. Может быть, потому что эта вещь сделана только кодом, без единой хренотени в библиотеке. Может быть потому, что - как я уже говорил - эта работа ошеломила меня и раздвинула для меня возможности Flash. К тому же WB предоставил возможность поковыряться в коде и многому поучиться. В общем, здесь я на стороне жюри. Всю прелесть "Молекул" я пойму – наверное – позже, когда появится возможность посмотреть и изучить код, когда пойму ВСЕ прелести этой работы и те возможности, которые предлагает в ней DeliMiter. Не было бы "Танца", и "Молекулы" – без сомнения – стали бы первыми. Так что свои поздравления DeliMiter(у) я назад не забираю.
Это мое личное мнение и - при желании - на него можно не обращать внимания.
"Бабочки" – классная вещь. Но она мне - почему-то - напомнила известную "PageFlip". Наверно грамотным использованием масок.