堕天使の煉獄

Gallery
Comic
Story
Production
Work
Link
古い形式のswfがActionScript3.0ではいろいろ問題ありの件。
あれからもちょっと調べてたらば。

どうも元のswfの中身の問題も影響大きいみたい。
基本的には古い形式のスクリプトは使えない、古い形式のswfの中でファイルを外部から開くのはoutっぽい? などなど。
単純な動画の再生とフレーム指定ジャンプだけなら割と動く。
ただし、「現在何フレーム目か」、「○フレーム目に移動」といった操作や情報のアクセスはActionScript3.0からは出来ない。
これはもう仕様らしい。
なのでたとえばswfの中で箱があって、開いたアニメ表示したら「○○を手に入れた」みたいな事したくても、そのswf内で現在どのフレームを再生中なのか。再生が終わったのかも知る手段がないので、このままだとせいぜい、ずっと自動でアニメーションしてる背景オブジェ(置物)ぐらいにしか使えないぽ。

で、古い形式=ver8以前=avm1形式から、ver9以降=avm2形式に変換すればフレームカウントとActionScript3.0からのフレーム指定移動は出来る用になるっぽい。
ただし元のタイムラインで作った再生制御が一切無効になって、フレーム0からラストまでだらーっと再生する感じになる。
なのでENTER_FRAMEイベントで自前でフレームの進行をスクリプトで記述する感じになるぽ。
詰まるところ素材とアニメーションセットをparaflaで埋め込んで、何フレーム目から再生して何フレーム目で止めて待機、とか○フレーム目から○フレーム目までをループ再生。的なのをENTER_FRAMEイベントでしこしこ書いていけば良い感じにadobeの有料ソフトなしでもいろいろ出来る様になるっぽい。
んでもまあ素材のパッケージ的な使い方になるのかな。

箱の例で言えば、swfファイル内の箱開いて「○○を手に入れた」でアイテムidを発行して受け取る。みたいな事は結局の所無理っぽいけど、スクリプト側から箱を閉じてる絵のフレームでループさせといて、moveclip(または表示位置のうえに透明ボタンとか?)をクリックしたら箱が空いてる絵のフレームに移動。
みたいな事は出来るようになる。

まあコレはコレで便利かなと。
キャラクタのアニメーションセット(歩いてるのとか飛んでるのとか)つくって、開始フレームだけメモっといて、ENTER_FRAMEイベント内で自前で現在再生すべきフレームを監視設定的な使い方できるし。
やっぱアニメーションの設定はタイムラインでやった方が楽ですしね。キーフレームだけメモしておいて使うってのはなんかローテクだけどw


でまあ次の問題は……avm1→avm2変換の方法がloaderスクリプトがいくつかでてきて、ローカルでswfファイル自体を書き換えるのがなんか上手く動かないのばかり。

loaderスクリプトだとロード完了確認とか、最初の画面で一括ロードとかするときになんか面倒そうだなーてのがあって。
swfファイル自体先にコンバートしておいてEmbedタグで自動読み込み(大元のswfに埋め込み)にしてしまいたい。

で、結局自前でコンバータ書くことにしたんだけども。
参考にしたActionScript3.0で記述されてるloaderスクリプトの中身のコンバート部分で、どうもよくわからないところが。

var rectNBits:uint = bytes[result] >>> 3;
result += (5 + rectNBits * 4) / 8; // stage(rect)

なんかのデータ分スキップするためにサイズを調べてるところっぽいのですが。
swfをバイナリエディタで値見ながらこの計算式当てはめてみると、なんか小数部が出てくるですよ。バイト数計算してるのになんで小数?? なんか間違えてる??

bytes[result] >>> 3
で1バイト分のデータの上位5ビットを取得。たとえば「12」と言う値が入っているとして。
result += (5 + 12 * 4) / 8; // stage(rect)

result=6.625ですよ。

あるぇー?
端数はどうするの? てかなんでこんな中途半端な数値出てくんの
そもそもこのstage(rect)てなに? (rectなので座標位置とサイズが入ってるんだろうけど、何のrectなのかさぱーり)

……結局、本家adobeのamv1フォーマットのpdf資料があるので見てみることに……pdf見づらくて嫌いなんで避けてたけど結局見る事になるのか……。

で見てみると、上位5バイトにデータサイズが入っていて、その次にx,y,width.heightの4つのデータが各データサイズ分並んでいるんだとか。

上の例だと5bitの中身が12だったら、残りの下位3bitの頭から、12bit*4個データが並んでるぽ。 そんでそれを8(bit)で割って、半端は切り上げでstage(rect)全体のバイト数が出る……と。

これってあれですよね……普通にバイナリ解析してフォーマット調べるなんてことする人向けの、フォーマットの資料無しじゃ普通に読めない用にするための迷彩部分っぽい?
いちいちビット演算しないと値が取れないし、そこまでしても得するのはせいぜい数bit~数バイト。しかも端数の残りのbitは無駄。
使い勝手優先ならデータ長フィールドなしにx,y,width.heightそれぞれ4バイト(uint32)も取っておけば問題無いわけですし。
と思ったけど、smf(スタンダードmidi)フォーマットと同じで、これまたswfの初期の古いverがあった頃ってまだ、モデムとかでインターネットやってた時代だから、やっぱその数バイトとかケチるためにこんなフォーマットになってるのだろうか……。

あとなにげにこのrectの後にフレームレートと総フレーム数のデータが続くんですけど、loaderスクリプトでもswfバイナリみた感じでも、フレームレートは1バイト(=unsignedで255まで)のようなのですが。まあ十分なデータサイズですよね。
でもadobeの資料だとフレームレートは2byteになってるぽ……記載ミス?? またも迷彩?(疑り深すぎw)

そんなかんじでヘッダ部のなかのver番号を書き換え、FileAttributesなるデータフィールドが存在しなければ追加、あればそのなかのあるビットフラグを立てておけばこのファイルはavm2でっせと偽装? 出来る様になるぽ。


そんな感じでQTでぺぺいとコンバータ書いて実際に試してみる。

うーん。
やっぱただの画像のアニメーションしてるだけのものは普通に使えるようになったけど、音声とか入ってるとなんか読み込み自体失敗するな。

どうせ再生フレームの位置変更以外最初からしないつもりであれば、それようのswf作れば良いだけの話なのでまあいいか。


でも次にはまったのが、loader経由で読み込むと普通につかえたのに、Embedで読み込むと現在のフレームとか取得できなく……。なんでー?

まだ昨日今日触り始めたばかりなのでこの辺あんまよくわかってないんですが、loader経由とEmbedで読み込むときの内部のプロセスがかなり違うっぽい。

結論としては

[Embed(source = '/sample04_new.swf')]private const EmbedClass: Class;
private var move1:MovieClip = new MovieClip();

var mcla: MovieClipLoaderAsset = new EmbedClass();
Loader(mcla.getChildAt(0)).contentLoaderInfo.addEventListener(Event.INIT, function callee(e:Event) :void{
   var info: LoaderInfo = LoaderInfo(e.target);
   info.removeEventListener(Event.INIT, callee);
   move1 = info.content as MovieClip;
   addChild(move1);
});

これでEmbed使ってのavm1→avm2形式変換後のswfをMovieClipとして使える用に。
Embedで読み込んだものの中からloaderオブジェクトを呼び出してそこから読み込んだデータを複製してるってな流れらしい。
なんでそうしないで

[Embed(source = '/sample04_new.swf')]private const moveClip: Class;
var move1:MovieClip = new moveClip() as MovieClip;

だとダメなのか良くわからんです。(これだと表示は出来るけどフレーム制御関係まったくさわれない状態になる。totalFrames=0とか返ってくるし)

でもまあ、MovieClipLoaderAsset使った方法だとEmbedで一旦ロードしたものを複製してる感じとのとこなので、普通にswf全体をロードするときの読み込みバイト数計算で一括してローディング画面実装はそのままこれでいけるのかな。
やっぱ鯖にうpするのも単体のswf一本のがいいので。(swcでパッケージングとかいう手法もあるらしいけどまだ未検証)

んでもこのへん不便だなとおもうのが……ローディング画面の検証がやりづらい。
まあローカルはしょうがないにしても、鯖に上げた場合でも今日日、回線は光とか普通の現在では数百kbぐらいじゃロード一瞬で終わるのでほんとにちゃんとローディング画面意図したとおりに動いてるのかいまいちよくわかんねー。
便利になった(高速回線が一般化した)反面、逆に不便が生まれるのもなんだかなという気分に。


そんでもってちょこちょこと組んでみて思ったのは、C#風なオブジェクト指向っぽい感じになってるのだけども、データ構造と切り分けて組む感じではなくわりとスクリプトファイル(.as)単位で画像やらなにやら詰め込んだイベントを作りこんでいく感じのほうがいいかんじっぽいのですね。

どしてもリソース部分とコード部分切り分けてやる方法論がしみついてるので。

まあこのへんはなんか一本とりあえず作ってみないと実感的にどうなのかわからないところですが。

いまところ、弱そうなレイアウト回りの機能をライブラリ的な感じでちまちま作ってたりしてるだけで、実際のゲームっぽいのはどん何作ろう的なのもあんま固まってないぽ。

しかし、ActionScript、rect(Rectangle)はあってsize(width,height)はないのがちょっとめんどくさい。(point(x,y)はある)
しかもRectangleは組み込み型じゃないので毎度import必要だったりするのでちょっとうっとうしい。
それからお作法的にイベント登録したらremoveEventListenerでイベント登録を自前で削除しなきゃいけないところもちとめんどい。実際の所GCでオブジェクト自体が開放されれば登録したイベントも消えるらしいのですが、しばらく残り続ける状態になるので、場合によってはパフォーマンスに影響が出るとかで。
とはいえ、段幕シューティングとかやって全部のタマにイベントとか付けたりしたりとか、極端な事をしなければremoveEventListenerし忘れてもそれほど大変なことにはならないっぽいですけど。

そんな感じでまだまだいろいろと手探り状態ぽ。
Sun
Mon
Tue
Wed
Thu
Fri
Sat
01
02
03
04
おあずけ三昧
05
これってやっぱ嫌がらせ的なものなのかな
06
07
08
09
やっぱついてないわ
10
11
12
かふーん
13
14
15
16
17
18
19
20
[春分の日]
21
22
23
24
25
26
27
28
29
30
31
ベーコンのアスパラ巻
total:2080592 t:54 y:2908
■記事タイトル■

■年度別リスト■
2024年 2024年12月(0)
2024年11月(0)
2024年10月(1)
2024年09月(2)
2024年08月(1)
2024年07月(1)
2024年06月(5)
2024年05月(2)
2024年04月(1)
2024年03月(6)
2024年02月(4)
2024年01月(3)
2023年 2023年12月(3)
2023年11月(1)
2023年10月(2)
2023年09月(3)
2023年08月(3)
2023年07月(3)
2023年06月(7)
2023年05月(8)
2023年04月(2)
2023年03月(1)
2023年02月(2)
2023年01月(3)
2022年 2022年12月(4)
2022年11月(3)
2022年10月(1)
2022年09月(3)
2022年08月(3)
2022年07月(2)
2022年06月(1)
2022年05月(3)
2022年04月(2)
2022年03月(2)
2022年02月(1)
2022年01月(6)
2021年 2021年12月(8)
2021年11月(3)
2021年10月(4)
2021年09月(6)
2021年08月(2)
2021年07月(1)
2021年06月(3)
2021年05月(2)
2021年04月(2)
2021年03月(3)
2021年02月(1)
2021年01月(4)
2020年 2020年12月(3)
2020年11月(7)
2020年10月(2)
2020年09月(3)
2020年08月(1)
2020年07月(3)
2020年06月(7)
2020年05月(5)
2020年04月(8)
2020年03月(4)
2020年02月(2)
2020年01月(4)
2019年 2019年12月(1)
2019年11月(1)
2019年10月(2)
2019年09月(1)
2019年08月(3)
2019年07月(2)
2019年06月(2)
2019年05月(2)
2019年04月(4)
2019年03月(1)
2019年02月(7)
2019年01月(1)
2018年 2018年12月(1)
2018年11月(1)
2018年10月(5)
2018年09月(1)
2018年08月(5)
2018年07月(1)
2018年06月(1)
2018年05月(1)
2018年04月(2)
2018年03月(2)
2018年02月(1)
2018年01月(1)
2017年 2017年12月(2)
2017年11月(1)
2017年10月(2)
2017年09月(5)
2017年08月(8)
2017年07月(2)
2017年06月(1)
2017年05月(1)
2017年04月(3)
2017年03月(5)
2017年02月(7)
2017年01月(8)
2016年 2016年12月(7)
2016年11月(2)
2016年10月(3)
2016年09月(7)
2016年08月(8)
2016年07月(10)
2016年06月(17)
2016年05月(6)
2016年04月(8)
2016年03月(10)
2016年02月(5)
2016年01月(10)
2015年 2015年12月(7)
2015年11月(7)
2015年10月(13)
2015年09月(7)
2015年08月(7)
2015年07月(5)
2015年06月(4)
2015年05月(5)
2015年04月(2)
2015年03月(4)
2015年02月(1)
2015年01月(7)
2014年 2014年12月(12)
2014年11月(8)
2014年10月(4)
2014年09月(6)
2014年08月(7)
2014年07月(4)
2014年06月(2)
2014年05月(5)
2014年04月(4)
2014年03月(8)
2014年02月(4)
2014年01月(8)
2013年 2013年12月(15)
2013年11月(8)
2013年10月(3)
2013年09月(3)
2013年08月(8)
2013年07月(0)
2013年06月(0)
2013年05月(0)
2013年04月(0)
2013年03月(0)
2013年02月(0)
2013年01月(0)

■レス履歴■

2023-09-26 14:59:38 - 久慈光樹

2023-09-26 14:29:10 - 織田霧さくら

2023-09-26 13:10:45 - 久慈光樹

2023-03-20 05:30:16 - 織田霧さくら

2023-03-15 20:42:58 - まうる

2022-12-26 19:14:57 - 織田霧さくら

2022-12-25 02:28:36 - まうる@まるるん

2022-09-30 04:29:01 - 織田霧さくら

2022-09-23 19:01:29 - まるるん

2022-06-16 21:06:34 - 山本


■ファイル抽出■

■ワード検索■

堕天使の煉獄

https://rengoku.sakura.ne.jp
管理人

織田霧さくら(oda-x)

E-mail (■を@に)

oda-x■rengoku.sakura.ne.jp

堕天使の煉獄バナー 堕天使の煉獄バナー