Saqoosha

haXe memo

Blog

haXe でサイトを作ろうとしていて。Flash とは勝手が微妙に違うのでメモしていく。

・Mac では eclihx (heXe Eclipse plug-in) は Java 6 で動作する Eclipse Cocoa (64bit) じゃないと動かない。(そしてそんなに便利じゃない)
TextMate Bundle も微妙。
FlashDevelop しかなくね?
FDT 4 がまちどおしい。
・エントリポイントは haxe -main Hoge でコンパイルしたら Hoge クラスの static main() から。このとき Hoge は Sprite クラスである必要はない。
・flash.Lib クラスの current が root の MovieClip。
・trace するとステージにおかれた TextField に出力される。
・flash.Lib.trace がいつものやつ。デフォルトの trace を置き換えることもできるらしい。
・Int, Bool, Void あたま大文字。
・Number なくってかわりに Float。
・getDefinitionByName はない。かわりに Type.resolveClass。
・getDefinitionByName でとってきた Class をそのまま new できない。かわりに Type.createInstance。→ あー、flash.Lib.attach だけでクラス取得してインスタンス化までいけるのかな。引数あたえたい時は createInstance。
グラフィックは Flash IDE でてきとうなクラス名 (Hoge) つけて書きだした swf を、Application.currentDomain に Load して、同名クラスを Hoge.hx で作って上書き。。(まだよくわからん) assets.fla → assets.swf / haxe --gen-hx-classes
assets.swf / hxclasses に assets.swf に含まれるクラスの .hx 版みたいなのん(stub)ができあがるのでそれを使う。 / コンパイルするときに -swf-lib で assets.swf をくっつける。
・-swf-lib で指定できる swf は 1 個だけなので(なんで?)複数の swf ライブラリを使用したい場合は swfmill でくっつける。。→(どうやら複数の swf をいちどにコンパイルできるようになりつつあるっぽい。)
Sam HaXe。swfmill の haXe 用高機能版? hxswfml 類似品?
・SWC も haXe から呼び出すためのインターフェースを用意すれば使える。
・AS3 で SWC (SWF) つくって haXe で全部まとめるか、haXe で SWC 書きだして AS3 側で全部がちゃんこするか? (polygonal のは後者)
・あるクラスのサブクラスを作ったら、コンストラクタでは明示的に super() 呼ばないといけない。
・コンストラクタの名前はクラス名じゃなくって new。public function new() {}
・as は flash.Lib.as に static function として存在してる。キャスト String(hoge) は cast(hoge, String) かな?
・is は Std.is(hoge, SomeClass)。
・クラス名は必ず大文字アルファベットから始める。
・Flash のトップレベルの関数とかは untyped __global__["encodeURIComponent"](str) とかで呼べる。ちなみに encodeURIComponent の代わりに StringTools.urlEncode がある。
as3tohaxe で AS3 のクラス (.as) を haXe のクラス (.hx) にコンバートできる。ちょっと手直し必要だけど 1 からやるよりは楽。
・Object のフィールド削除、delete someObject["keyString"] は Reflect API を使って Reflect.deleteField(someObject, "keyString") する。その他 Object に対する操作は Reflect クラスにいろいろと?
・for (var key:String in obj) { trace(obj[key]); } → for (key Reflect.fields(obj)) { trace(Reflect.field(obj, key); }
列挙型 enum がある。しかもコンストラクタがあったりしてなんか特殊。。
・enum を switch するときは、その enum 型に含まれるすべての項目にたいして case 書かないといけない。
・protected はない。っていうか private が protected。private がない。

・・・

続く。

radiko オリジナルプレーヤーを作る

BlogFlash

正月からずーっと仕事しかしてない気がするけど、たまにはこういうコード書きたい! ということで書いた。これでみんな自分オリジナルの radiko プレーヤーが作れるね!


(※あたりまえだけど公式プレーヤーで聞ける範囲の人しか聞けないよー)

package {
import com.bit101.components.HBox;
import com.bit101.components.Label;
import com.bit101.components.PushButton;
import com.bit101.components.VBox;

import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.NetStatusEvent;
import flash.net.NetConnection;
import flash.net.NetStream;

public class radiko extends Sprite {

private static const STATION_CODE_OSAKA:Array = ['FMO', '802', 'CCL', 'OBC', 'MBS', 'ABC'];
private static const STATION_CODE_TOKYO:Array = ['TBS', 'QRR', 'LFR', 'INT', 'FMT', 'FMJ'];

private var _conn:NetConnection;
private var _stream:NetStream;

public function radiko() {
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

var vbox:VBox = new VBox(this, 10, 10);
var osaka:HBox = new HBox(vbox);
new Label(osaka, 0, 0, 'OSAKA');
for each (var name:String in STATION_CODE_OSAKA) {
new PushButton(osaka, 0, 0, name, _onSelectStation).width = 50;
}
var tokyo:HBox = new HBox(vbox);
new Label(tokyo, 0, 0, 'TOKYO');
for each (name in STATION_CODE_TOKYO) {
new PushButton(tokyo, 0, 0, name, _onSelectStation).width = 50;
}
}

private function _onSelectStation(event:Event):void {
if (_stream) _stream.close();
if (_conn) _conn.close();

_conn = new NetConnection();
_conn.client = {onBWDone: trace};
_conn.addEventListener(NetStatusEvent.NET_STATUS, _onNetStatus);
_conn.connect('rtmpe://radiko.smartstream.ne.jp/' + event.target.label + '/_defInst_');
}

private function _onNetStatus(event:NetStatusEvent):void {
switch (event.info.code) {
case 'NetConnection.Connect.Success':
_stream = new NetStream(_conn);
_stream.client = {onMetaData: trace};
_stream.bufferTime = 1;
_stream.play('simul-stream');
break;
}
}
}
}


SoundMixer.computeSpectrum でサウンドビジュアライズ的なものもくっつけようとしたら、セキュリティエラーでできなかった。。。まー、いつまでこのコードが動くかわかんないので、できるうちに遊んどくのが吉。あ、これ、リファラーチェックしてないんだったらそのまま Wonderfl で動くやん、、つーことで置いときました

Categories: Flash

4 月のてら子

Blog

今月のてら子はなんかちょっといつもと違う。しかも 2 回もある。

ひとつめ。

お花見勉強会 2010
毎年やってて 3 回目ぐらい? 去年はぼくは社員旅行で海外いってた参加できなかったんだけど、てら子 (@teraco_osaka) + FxUG (Flex User Group, @fxug_osaka) + 関西ライフハック研究会、の合同イベント。お花見ってついてるけど 4/17(土)なのでお花はもうないと思われますが、まあ、食べながら飲みながら屋外でプロジェクタ用意してなんかやる。場所は靱公園。

ふたつめ。

GEEKs in OSAKA
Flash モーションプログラミング + 大阪てら子

4/25(日)に ROXIK 城戸さん (@roxik) と alumican.net の奥田さん (@alumican_net) が大阪にくるよー。ロクナナのワークショップ (@67ws) がついに大阪でも! せっかくなので大阪てら子も枠もらってなんか話すことになりまして、半分は僕が Flash サウンドプログラミング周りの話、New Year Sonata とかの内部の話をして、あとはてら子組がいつものように gdgd やりますw ワークショップなので有料イベント (¥3,800) だけどてら子枠は Ustream 中継する予定 (?)。(回線状況によっては録画になるかも?)

つーわけで、イベントでまた会いませう。