Adobe AIRで作るデスクトップアプリケーション

第9回 Flash CS3による開発

この記事を読むのに必要な時間:およそ 3 分

Flashでのオーサリング

では,せっかくなので何かアプリケーション化してみましょう。手元にあるSWFファイルを読み込んで表示するのが手っ取り早そうです。読み込むSWFファイルはActionScript 1.0や2.0を使っていても構いません。AIR APIに直接アクセスすることはできませんが,ムービーの再生自体は可能です。ここではFlash 8で作った時計(clock.swf)を利用することにします。

システムクロームは使わずに背景を透過させましょう。その場合,マウスドラッグによる移動処理を明示的に組み込む必要があります。また,終了時の位置を記録して,次回起動時に同じ位置に現れたほうがアプリケーションらしくなります。以上を踏まえて,メインタイムラインの第1フレームにスクリプトを記述します。

import flash.filesystem.*;
var _prefs:File;
var _loader:Loader;
init();
readData();
loadClip();
function init():void {
  registerClassAlias("flash.geom.Rectangle", Rectangle);
  registerClassAlias("flash.geom.Point", Point);
  _prefs = File.applicationStorageDirectory.resolve("prefs");
}
function loadClip():void {
  _loader = new Loader();
  _loader.contentLoaderInfo.addEventListener(Event.INIT, loadInitHandler);
  _loader.load(new URLRequest("clock.swf"));
  addChild(_loader);
}
function loadInitHandler(e:Event):void {
  stage.window.addEventListener(NativeWindowBoundsEvent.MOVE, boundsMoveHandler);
  _loader.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
}
function boundsMoveHandler(e:NativeWindowBoundsEvent):void {
  this.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}
function mouseDownHandler(e:MouseEvent):void {
  stage.window.startMove();
}
function mouseUpHandler(e:MouseEvent):void {
  stage.window.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
  writeData();
}
function readData():void {
  if (_prefs.exists) {
    var stream:FileStream = new FileStream();
    try {
      stream.open(_prefs, FileMode.READ);
      stage.window.bounds = stream.readObject();
    } catch (error:IOError) {
      trace(error.message);
    } finally {
      stream.close( );
    }
  }
}
function writeData():void {
  var stream:FileStream = new FileStream();
  try {
    stream.open(_prefs, FileMode.WRITE);
    stream.writeObject(stage.window.bounds);
  } catch (error:IOError) {
    trace(error.message);
  } finally {
    stream.close( );
  }
}

コードの大まかな流れは次の通りです。まず,ウィンドウ位置の保存データがあれば読み込んでその位置に移動し,続いて外部SWFファイルを読み込みます。その後,マウスダウンイベントとウィンドウ移動イベントを監視します。マウスダウン時にウィンドウの移動を開始し,ウィンドウが移動したならばマウスアップイベントの監視を行います。そしてマウスアップ時(つまり移動終了時)にウィンドウ位置の保存を行います。ウィンドウの移動中だけマウスアップイベントを監視するのがポイントです。

外部SWFの読み込み部分はLoaderクラスを使った一般的な処理で,AIR特有のものではありません。それ以外の処理については,これまでの連載で解説したウィンドウやファイル関連のAPIを使っています。詳細はバックナンバーを参考にしてください。Beta 1ではAIR API関連のコードヒントやカラーリングには対応していませんが,以上のようにFlashから直接AIRの機能にアクセスできます。

既存のSWFファイルをアプリケーション化した

既存のSWFファイルをアプリケーション化した

著者プロフィール

タナカヤスヒロ

早稲田大学卒業後,DTP業務を経てマルチメディア系制作会社へ。Macromedia Directorにのめり込む。フリーランスとなりFlashにシフトしてからもデスクトップ絡みの仕事が絶えず,Apolloにも勝手に縁を感じている。現在株式会社antsに所属。ants Lab.にも記事を上げている。

URLhttp://labs.anthill.jp/

著書