Comments
Description
Transcript
swfassistで学ぶFlashの仕組み - be
swfassistで学ぶFlashの仕組み 2008.01.26 新藤 さかとく 愛大 @ 酒徳カンファレンス 自己紹介 •新藤 愛大といいます •新藤 愛大といいます •何故酒徳カンファレンスで喋っているのか よくわかりません •新藤 愛大といいます •何故酒徳カンファレンスで喋っているのか よくわかりません •19歳です •新藤 愛大といいます •何故酒徳カンファレンスで喋っているのか よくわかりません •19歳です •フリーランスのFLASHerです •新藤 愛大といいます •何故酒徳カンファレンスで喋っているのか よくわかりません •19歳です •フリーランスのFLASHerです •3度の飯よりActionScriptが好きです www.be-interactive.org 変態 ActionScripter でぐぐる www.libspark.org BeInteractive!の人 = バイトコードの人 違うよ。全然違うよ。 ふつうのFLASHerです plash.jp 今日のお題 swfassist ActionScriptでswfバイナリを 生成するためのライブラリ MingのAS版のようなもの BeInteractive!の人 != バイトコードの人 swfassistでswfを生成することで Flashの仕組みを知ろう デモ 千里の道もバイナリから “CWS” CWS = 圧縮されたswf FWS = 圧縮されていないswf ■ ヘッダー ■ タグ ■ シグネチャ ■ バージョン ■ ファイル長 ■ 画面サイズ ■ フレームレート ■ フレーム数 ■ FileAttributes ■ SetBackgroundColor ■ DefineShape4 ■ PlaceObject2 ■ ShowFrame ■ End タグ swfを構成する命令群 定義タグ + コントロールタグ 定義タグ 内部的な情報を定義するためのタグ DefineShape - 図形情報の定義 DefineFont - 文字情報の定義 DefineSound - 音情報の定義 DefineBits - 画像情報の定義 キャラクターID という識別子を持つ コントロールタグ ムービーをコントロールするためのタグ SetBackgroundColor - 背景色の変更 PlaceObject - 画面への配置 RemoveObject - 画面からの削除 ShowFrame - 画面の更新 キャラクターID を通じて定義タグで 定義した図形や文字をコントロールする タグは上から順番に実行 ■ FileAttributes ■ SetBackgroundColor ■ DefineShape4 ■ PlaceObject2 ■ ShowFrame ■ End ■ SetBackgroundColor(color=0xffffff) 背景色を白(0xffffff)に変更 ■ DefineShape4(id=1) 図形(4つの四角)をid=1で定義 ■ PlaceObject2(id=1) 定義したid=1の図形を画面に配置 ■ ShowFrame 画面の更新 ■ End 終了 Playerのバージョンが上がると 使えるタグの数が増える Version1 Version2 Version3 Version4 Version5 Version6 Version7 Version8 Version9 - 18 25 37 38 41 46 48 56 62 (+7) (+12) (+1) (+3) (+5) (+2) (+8) (+6) swfを生成するということは これらのタグを生成するということ 43 02 FF FF FF 0100 0011 0000 0010 1111 1111 1111 1111 1111 1111 02 43 FF FF FF 0000 0010 0100 0011 1111 1111 1111 1111 1111 1111 02 43 FF FF FF 0000 0010 0100 0011 1111 1111 1111 1111 1111 1111 10bits 6bits 3bytes ■ タグID(9番) ■ タグ長(3byte) ■ タグ引数(ボディ) やってらんない swfassist 登場 実際のコードを交えつつ説明 アニメの基本 短い間隔で少しずつ絵を動かす フレーム パラパラ漫画の紙1枚に相当 フレームレート 24fps = 1秒間に24フレーム表示 ShowFrame 画面を更新して 次のフレームになるまで待つ 1フレーム目 2フレーム目 次フレームまで待つ ShowFrame PlaceObject & RemoveObject 次フレームまで待つ ShowFrame PlaceObject & RemoveObject ■ DefineShape(id=1) ■ PlaceObject(id=1, depth=1, x=..., y=...) ■ ShowFrame ■ PlaceObject(depth=1, x=..., y=...) ■ ShowFrame ■ PlaceObject(depth=1, x=..., y=...) ■ ShowFrame ■ PlaceObject(depth=1, x=..., y=...) ■ ShowFrame ■ RemoveObject(depth=1) Depth(深度) オブジェクトを配置する場所の識別子 ひとつの深度にはひとつの物しか置けない 深度1 深度2 再び実際のコードを交えつつ説明 DefineShape x: -20 y: +20 y: -20 x: +20 再び実際のコードを交えつつ説明 swfassist.libspark.org “SWF and FLV File Format Specification” http://www.adobe.com/licensing/developer/ まとめ 誰かswfassistの使い道を教えて下さい ご清聴ありがとうございました