FC2ブログ
  • 08 «
  • 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
  • » 10
ASOK?
ActionScriptでFlashつくるよ

クラスのプロトタイプにmix-inしたい。コンストラクタに記述する例。

function Class () {
	// 1度しか実行されないように
	if (this.__proto__.each == undefined) {
		EventDispatcher.initialize(this.__proto__);
	}
}
page top
_rootにクラスを適用する。

-----------
class hoge extends MovieClip{
(略)
}

-----------

import hoge;
this.__proto__ = hoge.prototype;
hoge["apply"]( this, null ); //この書き方じゃないとダメ。
//hoge() //シンタックスエラー
stop();


page top

ローカルSharedObjectでちょっとはまった件。

いったん保存したローカルSharedObjectは、FlashPlayer設定マネージャの[Web サイトの記憶領域設定] パネルで、ドメインごとに削除することができる。

ローカルSharedObjectを使ったFlashで、最初のロード時、つまりSharedObjectにまだデータが保存されていない状態をテストしようとした。
ところが設定マネージャで削除して、Flashをリロードしてもデータが保存されている。

ヒントはドキュメントにあった。

flush (SharedObject.flush メソッド )
public flush([minDiskSpace:Number]) : Object
ローカル永続共有オブジェクトをすぐにローカルファイルに書き込みます。このメソッドを使用しない場合、共有オブジェクトがファイルに書き込まれるのは、そのオブジェクトのセッションが終了した時点となります。つまり、その SWF ファイルを閉じた時点、その共有オブジェクトに対する参照がなくなってガベージコレクションされた時点、 または SharedObject.clear() が呼び出された時点のいずれかです。

ローカルSharedObjectに書き込みをしSharedObject.flush()を使わなかった場合、実際にHDDに保存されるのは、swfファイルが閉じた時点。

つまり先のテストでは、以下のようなことが起こっている。

  1. テストFlash内でローカルSharedObjectに書き込む。この時点ではまだHDDには保存されていない。
  2. 設定マネージャでローカルSOを削除。
  3. テストFlashをリロードする。
  4. テストFlashが閉じられ、ローカルSOのデータが実際にHDDに書き込まれる。
  5. テストFlashが新たにロードされ、HDDからローカルSOデータが読み込まれる。

結論

適切なタイミングで、SharedObject.flush()を使いましょう。

ここで、ローカルSharedObjectに書き込んだらすぐにSharedObject.flush()を使用する、と結論するのは間違い。わざわざ遅延書き込みするのは、おそらくパフォーマンスのせいなので。

page top
BitmapData.draw()の拡大縮小って、2のべき乗倍に最適化されていたりするのだろうか。
そのうち調べよう。
page top
Copyright © 2005 ASOK?. all rights reserved.