[AIR]基本メモ

AIRは作るたびに色々忘れているので
基本的なことをメモ

Adobe AIR HTML 開発者用リファレンスガイド
http://help.adobe.com/ja_JP/AIR/1.1/jslr/index.html

アプリケーションを終了する

NativeApplication.nativeApplication.exit();

ウィンドウが全て閉じられたら自動でアプリケーションを終了する

NativeApplication.nativeApplication.autoExit=true;

ウィンドウをドラッグする

var me:NativeWindow=stage.nativeWindow;
me.startMove();

新しいウィンドウを作成する

var news_win:NativeWindow=get_newwindow("none", true, false, false, false);
function get_newwindow(str:String, trans:Boolean=true, resize:Boolean=false, max:Boolean=false, min:Boolean=false):NativeWindow{
	return new NativeWindow(get_winoptions(str, (str=="standard")?false:trans, resize, max, min));
}
function get_winoptions(str:String, trans:Boolean=true, resize:Boolean=false, max:Boolean=false, min:Boolean=false):NativeWindowInitOptions{
	var options:NativeWindowInitOptions=new NativeWindowInitOptions;
	options.systemChrome=str;
	options.transparent=trans;
	options.resizable=resize;
	options.maximizable=max;
	options.minimizable=min;
	return options;
}

ファイルのドロップを受け付ける

bg_mc.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, when_drag_enter);
bg_mc.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, when_drop_item);
function when_drag_enter(e:NativeDragEvent=null):void{
	NativeDragManager.acceptDragDrop(bg_mc);
}
function when_drop_item(e:NativeDragEvent=null):void{
	var str=e.clipboard.formats;
	var filelist:Array=e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
	//filelistにドロップされたFileの配列が格納される
}

ファイルを保存するとき//文字列の場合

var docsDir:File;
if(save_dir!=""){
	try{
		docsDir=new File(save_dir);
	}catch(e){
		docsDir=File.desktopDirectory;
	}
}else{
	docsDir=File.desktopDirectory;
}
try{
	docsDir.browseForSave("(・∀・)ノ< 保存するよ!");
	docsDir.addEventListener(Event.SELECT, execute_saveData);
}catch(error){
	trace("Failed:", "(´・ω・`)失敗したです");
}
function execute_saveData(e):void{
	//文字列の場合
	var str:String="保存する文字列";
	var stream:FileStream=new FileStream();
	stream.open(newFile, FileMode.WRITE);
	stream.writeUTFBytes(str);
	stream.close();
}

アップデートするとき

var air_filename:String="AIRファイル名";
var latest_version:String="新しいAIRアプリのバージョン";//今のが1.0なら1.1とか
var update_filepath:String="AIRファイルパス";
var urlReq:URLRequest = new URLRequest(update_filepath);
fileData= new ByteArray();
urlStream.addEventListener(Event.COMPLETE, loaded);
urlStream.load(urlReq);
function loaded(event:Event):void{
	urlStream.readBytes(fileData, 0, urlStream.bytesAvailable);
	writeAirFile();
}
function writeAirFile():void{
	var file:File=File.desktopDirectory.resolvePath(air_filename);
	update_airfile=file;
	var fileStream:FileStream = new FileStream();
	fileStream.addEventListener(Event.CLOSE, fileClosed);
	fileStream.openAsync(file, FileMode.WRITE);
	fileStream.writeBytes(fileData, 0, fileData.length);
	fileStream.close();
}
function fileClosed(event:Event):void{
	var updater:Updater=new Updater();
	updater.update(update_airfile, latest_version);
}

[flv]メモ

flvを扱う機会があったのでその時にわかったことをメモ
・扱いづらい
・擬似ストリーミング再生できる(15Mbyteぐらいなら大丈夫)
・flvplaybackのfullscreenTakeOverがtrueになっているとフルスクリーン再生時flvが全面に出る
・fullscreenTakeOverのデフォルト値はtrueなのでコンポーネントのflaを改造して
デフォルト値をfalseにすると安全
・フルスクリーンにしたあとflvplaybackをstageにaddし
fullscreenTakeOverをfalseにした場合、動作が不安定になる
・unloadが無い
・unloadが無いためいちいちnewでaddしてやる方法が安全
・シークはキーフレームにしかできない
・シークメソッドseek()は毎フレーム実行すると重いので
5フレーム毎ぐらいで使うとよい
・スキンを使うと自由度が皆無
・スキンは無しにしてflvplaybackをマネジメントするクラスを作るとよい
・stageのsoundTransformをいじっても音量を変えられない

ああ・・・めんどくさい

[アルファマスク]

アルファマスクの新発見
アルファマスクをかけるとき、ブレンドを使ってマスクを「消去」、その親mcを「レイヤー」にしてやっていましたが
この方法だと親mcにマスクをかけたり、親mcを対象にbitmap.drawするとマスクが見えてしまうことになります。
そこで調べていたらもの凄く簡単な解決方法があったのでメモ。

target_mc:マスクをかけられるmc
mask_mc:マスクmc

target_mc.cacheAsBitmap=true;
mask_mc.cacheAsBitmap=true;
target_mc.mask=mask_mc;

いやー灯台もと暗しでした。

[改名]

ブログの名前を[frasio report](フラシオ リポート)に変更しました。
旧名[weather report]だと検索に引っかからないので。よろ。

[Papervision3D]リボン2

Papervision3Dでリボン2です。
何か他に良い方法がありました。
※Firefoxだとフリーズしました。何故だ…

追記
直りました。ただのプログラムのミスでした。
裏側もマテリアルを設定できるようにしました。裏側が黒いやつがそうです。

スクリーンショット1

リボン2

[Papervision3D]壁2

Papervision3Dで壁2。
壁をクリックで動きます。
左上のカメラマークをドラッグで視点変更できます。
右上のボタンでワイヤフレームを切り替えられます。

スクリーンショット1

壁2

[Papervision3D]BitmapMaterialで一瞬カッ!てなる→解明

タイトル通りBitmapMaterialで一瞬カッ!てなる(ブラウザが一瞬止まる)原因を解明しました。
BitmapMaterial.asの135行目あたりのgraphics.beginBtimapFillメソッドの
手前に下記のコードを追加すれば回避できます。
テクスチャがおかしくなるときはlimitの値を大きくしてください。
これを使ってcharaがスムーズに動くようになりました。
どっちでも変わらないっていうPCには関係ないです。

chara(下記コードを適応したもの)
chara(下記コードを適応していないもの)

var limit:int=18000;
if(Math.abs(_localMatrix.tx)>limit)_localMatrix.tx=limit*((_localMatrix.tx==0)?0:((_localMatrix.tx>0)?1:-1));
if(Math.abs(_localMatrix.ty)>limit)_localMatrix.ty=limit*((_localMatrix.ty==0)?0:((_localMatrix.ty>0)?1:-1));