Flex ActionScript 関連覚書などなど

聞き捨てならない話。

AIR は IE や Safari とかとは cookie を共有できるよー。
でも Firefox は無理だよー。
らしい。

kunzo.logさんより

むしろ、cookieはどれとも共有できないと思ってた。
すごい微妙だ。

セキュリティ上の問題で~とかなって、
大手のサイトとかでAIRアプリからのアクセスをはじいたりするような予感。

AIRでアクセスした場合のuserAgentは今のところ、

AppleWebKit/420+ (KHTML, like Gecko) Safari/419.3 Apollo/1.0.Beta1

らしい。(Geek Glueさんより)

AIRアプリは危険!みたいな記事が出回るんだろうなぁ・・・。

まずはサンプル。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package{
  import flash.display.DisplayObject;
  import flash.display.Sprite;
  import flash.events.NativeDragEvent;
  import flash.desktop.DragManager;
 
  public class Main extends Sprite{
    private var drop_target:Sprite = new Sprite();
 
    public function Main(){
      drop_target.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, DaDEnterHandler);
      drop_target.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, DaDDropHandler);
 
      addChild(drop_target);
      changeColor(0x000000);
    }
 
    public function DaDEnterHandler(nde:NativeDragEvent):void{
      DragManager.acceptDragDrop(nde.target as DisplayObject);
      changeColor(0x888888);
    }
 
    public function DaDDropHandler(nde:NativeDragEvent):void{
      changeColor(0xFFFFFF);
    }
 
    private function changeColor(color:uint):void{
      drop_target.graphics.beginFill(color);
      drop_target.graphics.drawRect(0, 0, 100, 100);
      drop_target.graphics.endFill();
    }
  }
}

こんな感じ。

まずは、イベントハンドラ。

drop_target.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, DaDEnterHandler);
drop_target.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, DaDDropHandler);

これで、例えばデスクトップとかAIRアプリ外から、AIRアプリの中にドラッグされてきたものが、
DisplayObject上に乗ると、NATIVE_DRAG_ENTERイベントを受け取ることができるようになり、
ドロップされると、NATIVE_DRAG_DROPイベントを受け取ることができるようになる。

でもこのままだと、NATIVE_DRAG_DROPが発行されないっぽい。
ドロップ時にNATIVE_DRAG_DROPイベントを発行するには、

DragManager.acceptDragDrop(nde.target as DisplayObject);

これで指定してやる。
上のサンプルだったら、

DragManager.acceptDragDrop(drop_target);

でもOK。これで、ドロップのイベントもちゃんと発行される。
ちなみに、NativeDragEventはデフォルトではバブリングされない。
なので、acceptDragDropで指定したところ以外にはイベントは届かない。

それからDragManagerは同名のクラスがあって、
flash.desktop.DragManager

mx.managers.DragManager
だけど、AIRアプリの中からデスクトップへD&Dとか、
ブラウザからURLをAIRアプリにD&Dとかのときには、
flash.desktop.DragManagerを使う。

いろんなサンプルが出てるけど、
FlexFramework使ったやつばっかり。
個人的には、無駄にアプリのサイズが増えるので、
ActionScriptだけで作りたい。
で、ちょっと迷ったけど、普通に

1
2
3
4
5
6
7
package{
  import flash.display.Sprite;
  public class Main extends Sprite {
    public function Main(){
    }
  }
}

これで、いつもどおりにamxmlc して swf を作って、
adl or adt してやればAIRのアプリができる。

AIRおもしろそう

カテゴリー AIR

AIRなイベントにも参加したことだし、
そろそろ本気でAIRしようと思います。

AIRって、いちいちインストールしなきゃならないし、
なんかネットに転がってるサンプルとかもめんどくさくて試してなかったりしたんだけど、

AIR Launcher

ants Labさんでこんなん公開されてました。すごい。
インストールせずに試せる。

これと言って…新しい話は無かったけど、
色々な会社が意外にアクティブに動いてるのを聞いて、
ちょっとびっくりした。まだベータなのに。

あとパネルディスカッションで、
バスキュールの亀田さんって人が何を聞かれてもハリーさん?という人の成長について語ってた。
ハリーさんを成長させるAIRはマジすごい。みたいな。
とにかくバスキュールって会社がオモシロなことはわかった。

とりあえず、備忘録的にメモ。

[tips]ActionScript3 最適化・高速化Tips 簡易まとめ
演算をビット演算化するとか、プログラムの可読性を下げそうなもの多め。
でも、クリティカルな場面ではすごい役に立ちそう。

AS3 での変数宣言とパフォーマンス

1
2
3
4
date = new Date()
for (i=0; i<100000; i++){
  date.getTime()
}

これだと340ms

1
2
3
4
5
date = new Date()
var dateTyped:Date = date
for (var i:int=0; i<100000; i++){  // i を int 型に
  dateTyped.getTime()
}

これだと13ms

うぉー。差がありすぎ。
でもstrictでコンパイルして、
ワーニングもきっちり消すように心がけてれば大丈夫かな?

Flex 3 Beta 1 (Moxie)

カテゴリー Flex

Flex2が出てから、一年経ったっけ?
早すぎ。

とりあえず、Flex Builder 3の体験版入れてみたけど、
やっぱり30日しか使えないっぽい。まずいな。あんまり触れないかも。
個人的にはプロファイラの機能が気になるんだけど、
使い方がよくわかんないや。

//メモメモ
リファレンス[http://livedocs.adobe.com/labs/flex/3/langref/index.html]

ドキュメント色々

Blog書こう

カテゴリー 日記

やる気が沸いたので、
Blog、はじめます。

いつまで続くかわからないけど。

« 戻る