#php #ruby #actionscript-3 #flash
#php #ruby #actionscript-3 #flash
Вопрос:
У меня есть .swf-файлы, поступающие примерно от 50 графических дизайнеров со всей страны, большинство из которых создали слайд-шоу или видео, а затем преобразовали их в SWF-файл.
Затем я отправляю эти файлы другой компании, которая обслуживает их с помощью проприетарного программного обеспечения, которое ищет FSCommand (ActionScript 3) для обозначения конца видео.
Я хочу создать что-то простое, чтобы я мог импортировать эти swf-файлы, которые они получают от своих дизайнеров, которые добавят команду FSCommand к последнему кадру видео, а затем снова экспортировать файл как .swf, поскольку у меня часто нет исходного файла .fla для работы.
Моя идея состояла в том, чтобы создать простое веб-приложение, которое сделает это за них, моя проблема в том, что я недостаточно знаю о формате .swf (или пока не смог найти нужную информацию в Интернете) о том, как это сделать.
Надеюсь, кто-нибудь здесь знает, как сделать это на PHP или Ruby, если уже есть приложение, которое может это сделать, или если у вас есть лучшая идея о том, как выполнить эту задачу. Я не прошу, чтобы кто-то что-то писал для меня, было бы полезно просто подтолкнуть в правильном направлении.
Ответ №1:
Вероятно, это не тот способ, которым вы хотите это сделать, но я попробую, потому что это аккуратный способ встраивания SWF-файла в другой SWF-файл ByteArray
. Вы получите доступ к временной шкале и функции adframescript, которая позволяет добавлять функцию обратного вызова к фрейму в SWF. Когда вы скомпилируете свой новый SWF, он встроит исходный SWF и добавит скрипт к последнему кадру, вызывающему функцию lastFrameHandler
.
Важная часть заключается в следующем:
_animation.addFrameScript(_animation.totalFrames - 1, lastFrameHandler);
>
package
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;
import mx.core.ByteArrayAsset;
[SWF( frameRate="30", backgroundColor="#FFFFFF", width="500", height="500" )]
public class TestDecorator extends MovieClip
{
[Embed(source = 'bin-debug/animation.swf', mimeType="application/octet-stream")]
public static const EmbeddedAnimation : Class;
private var _loader : Loader;
private var _asset : ByteArrayAsset;
private var _animation : MovieClip;
public function TestDecorator()
{
super();
// create asset
_asset = new EmbeddedAnimation();
// load bytes
_loader = new Loader();
_loader.contentLoaderInfo.addEventListener(Event.INIT, onLoadCompleteHandler);
_loader.loadBytes(_asset);
}
private function onLoadCompleteHandler(event : Event) : void
{
// remove listener
_loader.contentLoaderInfo.removeEventListener(Event.INIT, onLoadCompleteHandler);
// create asset as MovieClip
_animation = MovieClip(_loader.content);
// add a script that executes on the last frame
_animation.addFrameScript(_animation.totalFrames - 1, lastFrameHandler)
// add to displaylist
addChild(_animation);
}
private function lastFrameHandler() : void
{
// add your fscommand here
// fscommand(*)
}
override public function play() : void
{
_animation.play();
}
override public function stop() : void
{
_animation.stop();
}
override public function get totalFrames() : int
{
return _animation.totalFrames;
}
override public function get currentFrame() : int
{
return _animation.currentFrame;
}
}
}
Комментарии:
1. Спасибо за это, похоже, это может решить мою проблему. Однако я не уверен, как это реализовать (Flash и AS далеки от моей сильной стороны). Я хорошо понимаю код, можете ли вы объяснить шаги, чтобы заставить это вывести конечный файл?
2. Вам нужен компилятор, который может создать SWF-файл для вас. Я использую Flash Builder, но есть много других (даже бесплатных) альтернатив.
3. У меня есть Adobe Flash CS5.5, возможно ли это сделать с помощью этого?
4. Конечно. Создайте enoty FLA и задайте класс document в моем примере.
5. Спасибо, я думаю, что я добираюсь туда 🙂 У меня есть компиляция кода, но он не загружает файл для встраивания, просматривая исходный код, я не понимаю, куда он загружает файл. Я вижу, где вы указываете, какой файл загружать, но не там, где он загружает файл. Большое спасибо, что помогли мне с этим!
Ответ №2:
Закрытие старого потока.
Для других я не смог решить эту проблему. В итоге мы связались с дизайнерами и попросили их добавить команду со своей стороны.