Форум 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=128437)

gloomyBrain 07.08.2009 22:46

Записать байткод
 
Здравствуйте
Второй день сижу над спецификацией формата swf и глаза, соответственно, немного в кучу =)
Собственно, страшного (вроде) в нем ничего нет... НО
Если кто-нибудь имел с ним дело, подскажите пожалуйста, как правильно записать весь этот ужас в байткод - я имею в виду формат записи чисел:
UI8
UI16
SI8
SI8[n]
...
...
и т.д. и т.п.

ЗЫ
Вдруг захотелось сгенерировать одной флешкой другую флешку =))

ЗЗЫ
я и сам понимаю, что много хочу, и поэтому буду рад любым подсказкам/ наводкам/ ссылкам

wvxvw 08.08.2009 05:40

UI8 - writeByte()
UI16 - writeShort()
SI8 - writeByte()
SI8[n] - не знаю что такое :)
Проблематичнее когда нужно записывать биты, очень длинные числа, или числа с компрессией - я с последними двумя так и не разобрался до конца.

Alex Lexcuk 08.08.2009 09:58

>>Вдруг захотелось сгенерировать одной флешкой другую флешку =))
а, чего должно быть в сгенеренной флешке?
Если сгенереннные флешки однотипны, те. должны меняться только какие-то отдельные данные, не думаю, что ваша цель сделать компилятор флеша на флеше.
То можно поступить так, сделать флешку шаблон, в которой оставить место под эти меняющиеся данные, те. флешка с длинной строкой, строку можно забить хоть так:
Код:

var s:String='11111111111111111111111111111111111111111111111111';
пару килобайт единиц должно хватить, теперь компилим флешку шаблон, так, что-бы у нее в выходном swf файле были несжатые данные, во флеш cs3 для этого достаточно снять галку с []compress movie.
Ембедим флешку-шаблон во флешку генератор флешек, и вот пользователь чето рисует, тягает или пишет, нажимает на кнопку сохранить как swf, ищем во флешке шаблоне единицы, или берем положение единиц из константы и заменяем единицы на данные, которые натворил пользователь. Ну, а дальше save.

gloomyBrain 08.08.2009 15:46

Ну вообще-то я именно хочу сделать компилятор флеша на флеше =)
ШУЧУ
Я хочу добиться примерно вот такого функционала:
1- Выбрали картинку на рабочем столе (FileReference)
2- Выбрали mp3 звук ... все так же точно
3- Выбрали другую swf с анимацией, звуками и т.д.
4- Распарсили swf(из пункта 3) на байткод, вынули оттуда имена и содержимое классов (то есть других картинок, звуков и swf - ... маленькая такая рекурсия =) )
5- зарегистрировали полученные классы, отобразили это графически и выбрали, что в нашей библиотеке должно остаться, а заодно и прописали новые className всем элементам
6- FileReference.save()

Все очень просто и очень сложно одновременно
На выходе - удобный инструмент для быстрого создания и редактирования swf-библиотек (без использования Flash вообще, что, ИМХО, +1)

2 AlexLexcuk
ну в общем-то примерно так... Создать начало, создать конец, а середину генерировать
Цитата:

во флеш cs3 для этого достаточно снять галку с []compress movie
А где такая галка во FlashDevelop ???
UPD:
нашел: Project -> Properties -> вкладка Compiler Options -> Optimize bytecode

2 wvxvw
Цитата:

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

PS
На самом деле для меня сейчас важен вот такой вопрос: как из числа 4 получить число 0x04 (как его так отобразить???)
Потому как читая спецификацию swf заметил, что там все именно так и записывается (с такой записью удобнее выстраивать байты по старшинству там, где это необходимо)

etc 08.08.2009 15:52

Пункт 3 я уже когда-то делал:
http://etcs.ru/pre/ResourceThiefExample/

:D

gloomyBrain 08.08.2009 16:50

etc, спасибо за ссылку
В общем-то идея и родилась, глядя на строчку getDefinitionNames() =)
Вы не будете против, если я использую для экспериментов часть Вашего кода?

etc 08.08.2009 16:58

Да пожалуйста.

toFlash 21.09.2009 18:54

Цитата:

Сообщение от gloomyBrain (Сообщение 841399)
На выходе - удобный инструмент для быстрого создания и редактирования swf-библиотек (без использования Flash вообще, что, ИМХО, +1)

увенчались эксперименты успехом? интересно было бы посмотреть!

etc 21.09.2009 18:57

ResourceThief надо апгрейдить, там косяков выше крыши, на половине флешек валится в хлам. :(

flash33 21.09.2009 21:24

gloomyBrain, это Вам надо подробно изучать спецификацию SWF v9-10, потому что просто так из байткода графический элемент или звук не выкинешь. Весь байткод это цепочка тегов, в каждом описан один элемент, а заголовок тега указывает на его длину, то есть не как в xml - тег открылся - тег закрылся, конец надо вычислять, и если какой то тег выбрасывать, то соответственно все заголовки надо переписывать. etc, я прально говорю?


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

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