自分用のただのメモです。
まずはflex3sdkをインストール。
http://blogs.adobe.com/akamijo/archives/2009/03/flex_sdk_33.html
こちらを参考にしました。
そして適当なディレクトリ(Macなら/Applications/flex_sdk_3.4とか)にzipファイルを展開。
パスを通す。
export PATH=/Applications/flex_sdk_3.4/bin:$PATH
終わり。
次にログ出力のための設定。
これについては後で少し解説します。
frameworks/flex-config.xml
32
33
34
| <source-path>
<path-element>/Applications/flex_sdk_3.4/log</path-element>
</source-path |
souce-pathに指定したファイルパス以下のファイルはコンパイル時に自動でロードされます。
log以下には以下の2つのファイルを配置。
こちらからダウンロードできます。(ちなみに僕は作者ではありません。。)
http://github.com/hotchpotch/as3rails2u/blob/113c00677c1c1807e1f40060a4a49e8681a2831d/src/log.as
log/ObjectUtil.as
package
{
import flash.utils.getQualifiedClassName;
import flash.utils.ByteArray;
public class ObjectUtil {
public static function clone(arg:*):* {
var b:ByteArray = new ByteArray();
b.writeObject(arg);
b.position = 0;
return b.readObject();
}
public static function inspect(... args):String {
return inspectImpl(args, false);
}
internal static function inspectImpl(arg:*, bracket:Boolean = true):String {
var className:String = getQualifiedClassName(arg);
var str:String; var results:Array;
switch(getQualifiedClassName(arg)) {
case 'Object':
case 'Dictionary':
results = [];
for (var key:* in arg) {
results.push(inspectImpl(key) + ':' + inspectImpl(arg[key], false));
}
str = classFormat(className, '{' + results.join(', ') + '}');
// str = classFormat(className, arg);
break;
case 'Array':
results = [];
for (var i:uint = 0; i < arg.length; i++) {
results.push(inspectImpl(arg[i]));
}
if (bracket) {
str = '[' + results.join(', ') + ']';
} else {
str = results.join(', ');
}
break;
case 'int':
case 'uint':
case 'Number':
str = arg.toString();
break;
case 'String':
str = arg;
break;
default:
str = classFormat(className, arg);
}
return str;
}
internal static function classFormat(className:String, arg:*):String {
return '#<' + className + ':' + String(arg) + '>';
}
}
}
log/log.as
package {
import flash.external.ExternalInterface;
import flash.utils.getQualifiedClassName;
import ObjectUtil;
/**
* log() is Object inspect dump output to trace() and use
* Browser(FireFox, Safari and more) External API console.log.
*
* example
* <listing version="3.0">
* var a:Array = [[1,2,3], [4,[5,6]]];
* var sprite:Sprite = new Sprite;
* log(a, sprite);
* # output
* [[1, 2, 3], [4, [5, 6]]], #<flash.display::Sprite:[object Sprite]>
* </listing>
*/
public function log(... args):String {
var r:String = ObjectUtil.inspect.apply(null, args);
trace(r)
if (ExternalInterface.available) {
var arg:* = args.length == 1 ? args[0] : args;
try {
ExternalInterface.call(<><![CDATA[
(function(obj, klassName) {
obj.toString = function() { return klassName };
console.log(obj);
;})
]]></>.toString(),
ObjectUtil.clone(arg),
getQualifiedClassName(arg)
);
} catch(e:Error) {
ExternalInterface.call('console.log', r);
}
}
return r;
}
}
コンパイルしてみる。
/samples/explorerに移動して
% mxmlc explorer.mxml
設定ファイル "/Applications/flex_sdk_3.4/frameworks/flex-config.xml" をロードしています
/Applications/flex_sdk_3.4/samples/explorer/explorer.swf (382598 bytes)
ちゃんとswfが出力されました。
Rascutをいれる。
http://d.hatena.ne.jp/nitoyon/20070914/how_to_install_rascut
とすると、localhost:3001でプレビュー、ファイル更新を監視して自動的にコンパイル、そしてデプロイまでやってくれちゃいます。すてきです。
log.as
最後に上で設定したログ出力の関数について少しだけ触れておくと、
こんな風にプログラム中でおもむろにlog(object)と書くと、firebugのコンソールにログ出力されるという代物です。
package {
import flash.display.*;
import flash.text.*;
public class Hello extends Sprite {
public function Hello(){
var textField:TextField=new TextField();
textField.text="Hello World!";
addChild(textField);
log([1,2,3]);
log(textField);
}
}
}
