兼業主夫 ときどき 指揮者 のち ギーク?

2008-11-28

Flash周りの環境を少し変えた - ASファイルの外部化

 かなり大きいのにいろいろあって実作業がひたすら先延ばしになっている案件を1つ持っている。

 先延ばし度合いが半端ではなく、どの程度半端でないかというと「Flashで作っているのにそのflaファイルを半年近く開いていない」というくらい半端でない。

 それでも「いろいろ」な部分が遅いながらそれなりに進展してきたので「そろそろFlashも本腰を入れないと」と思ってflaファイルを開いてみたのだが、どこがどうなっていて何をどうしていたのかを思い出すのにかなりの時間がかかりそうだった。

 久しぶりにその大きなflaファイルを開いたのだが、ActionScriptをごりごり書いている関係でかなり重い。ソースを追いたいのだが、追うことすら苦痛に感じる程の重さだ。

 そこで思い切って、ActionScriptは外部ファイル化することにした。いや、ずいぶん前からそうした方がいいんだろうなぁ、と思いつつなかなか踏み出せなかったのだ。

 まず「ActionScriptの外部ファイル化」については、適当に検索して「フラッシュFlashのActionScriptを外部ファイルから読み込む方法 /SSPlanning」というサイトを参考にした。

 まぁ簡単に言えば、

・ActionScriptをテキストファイルとして保存する。(拡張子は「as」)

・本来そのActionScriptが書かれるはずの場所に「#include "ファイル名.as"」と記述

というだけの話。

 ちなみに「ファイル名.as」は呼び出すflaファイルを基準として

・#include "ファイル名.as"

 → flaファイルと同じ場所にasファイルがある場合

・#include "../ssp.as"

 → flaファイルの1つ上の階層にasファイルがある場合

・#include "as/ssp.as"

 → flaファイルと同じ場所に「as」というフォルダがあり、その中にファイルがある場合

のように書く。

----

 とはいえメモ帳でActionScriptをいじるのは無理があるので、次にエディタで便利に使えるようにする。

 私が主に使用しているのはEmEditorというエディタなので、EmEditorで便利に使えるようにする訳だ。*1

 EmEditorには最初から「様々な言語を見やすく整形(色をつけたりしてくれる)してくれる機能」があるのだが、ActionScriptには対応していない。しかし「構文ファイル」というものを導入することでActionScriptも見やすくできるのだ。

参考サイト

AS3 Syntax File for EmEditor at AS3S.ORG

 やり方は良く分かったが、上記参考サイトではActionScript 3.0対応の構文ファイルを導入しているので、私に必要なActionScript 2.0用の構文ファイルを探してみた。下記からダウンロードできる。

 Actionscript 2.0 (Flash MX 2004) 構文ファイル (EmEditor テキスト エディター - ライブラリ)

 初期値ではタブやインデントがが8文字になっているので、私は4文字に直した。この辺は好みだと思う。


 快適になったところで、思い出し作業を再開。

 うん、かなり思い出してきた。いろいろ具合の悪いまま放置してある部分もあるので、来週からがつがつ直して行こうと思う。

*1:EmEditorはマクロをJavaScriptで記述できるなど、拡張性の高いエディタ。秀丸エディタに勝るとも劣らないと思う。マクロなどをフルに使いたい場合はシェアウェアになるが、4,200円払ってProfessional版にする価値はあると思う

2008-09-10

読み込んだXMLデータの扱い方

 XMLというものの存在は知っていたし知識としては十分扱えると思っていたのだが、恥ずかしながら実際に扱うのは初めて。

 ということで、簡単なスクリプトを書いて挙動を確認してみた。

 XMLの読み込み方はさておき、確認したいのは読み込んだデータの扱い方。ということで、XMLデータそのものはスクリプトに直接書き込んだ。

var xml:XML = 
<data>
  <item id='1' type='sweet pastry'>
    <name price="80">あんぱん</name>
    <name price="100">カレーぱん</name>
    <char age="30">Hiko</char>
    <char age="31">Mayu</char>
  </item>
  <item id='2' type='test'>
    <name price="120">食パン</name>
    <char age="4">Kaz</char>
  </item>
</data>



for (var i:int = 0; i < xml.item.length(); i++) {
	for (var k:int = 0; k < xml.item[i].name.length(); k++)	{
		trace("idの値は、" + xml.item[i].@id);
		trace("typeの値は、" + xml.item[i].@type );
		trace("nameの値は、" + xml.item[i].name[k] );
		trace("priceの値は、" + xml.item[i].name[k].@price );
		trace("\n");
	}
	for (k = 0; k < xml.item[i].char.length(); k++)	{
		trace("idの値は、" + xml.item[i].@id);
		trace("typeの値は、" + xml.item[i].@type );
		trace("charの値は、" + xml.item[i].char[k] );
		trace("ageの値は、" + xml.item[i].char[k].@age );
		trace("\n");
	}
	trace("----------");
}

 出力結果は下記の通り。

idの値は、1

typeの値は、sweet pastry

nameの値は、あんぱん

priceの値は、80


idの値は、1

typeの値は、sweet pastry

nameの値は、カレーぱん

priceの値は、100


idの値は、1

typeの値は、sweet pastry

charの値は、Hiko

ageの値は、30


idの値は、1

typeの値は、sweet pastry

charの値は、Mayu

ageの値は、31


----------

idの値は、2

typeの値は、test

nameの値は、食パン

priceの値は、120


idの値は、2

typeの値は、test

charの値は、Kaz

ageの値は、4


----------

 なるほどなー。

 同名の子要素が複数ある場合はfor文で繰り返し読み出してやればいいらしい。forを使わずにいきなり読み出しに行くと、同名の要素がタグ付きで取得できる。

例:

「xml.item[i].name」と指定して取得できるものは下記の通り

<name price="80">あんぱん</name>

<name price="100">カレーぱん</name>

 そして子要素を読み出している最中も、(当然だが)親要素の値も参照できる、と。