ローディングバーセットを作ったよ:サンプルファイル付き
いつもお世話になっています、trick7さんのローディングバーを使ってみる。
設置も設定も簡単。誰でも簡単に導入できそうです。
なるほどなー。fla作るたびにプリローダ作るのも面倒だし、シンプルでカスタマイズできそうだし、この際勉強のためにも使ってみよう。ということでダウンロード。
早速flaの中身を覗いてみる。なるほどこれなら簡単に導入できそうだ。カスタマイズも簡単そう。よしよし、読み込むファイルを書き換えて、と。書き出し。
**エラー** シーン = シーン 1, レイヤー = レイヤー 1, フレーム = 1 :行 4:onMotionFinished’ という名前のプロパティはありません。
myTween.onMotionFinished = function() {
ActionScript エラー数 :1 報告済みエラー :1
へ?ダウンロードしてflaファイル開いてファイル名変えて書き出しただけだよ?そうか、オレのマシンの設定がおかしいに違いない。ということでいろいろいじる事小1時間。どうにもこうにもエラーが出ます。
Tween.asの中を覗いてみるも、どうやらonMothinFinishedというプロパティはエラーの通りないご様子。
んむむむ。なんじゃこれは。初期設定ファイルが壊れてるのか?などとさらにはまる。
とりあえずググる。
Tweenインスタンスにイベントハンドラを設定するとエラーになる
原因
実際Flash MX 2004のTweenクラスには、Tween.onMotionFinishedを始めとするイベントハンドラが、インスタンスプロパティとして宣言されていません。Flash 8のTweenクラスでは、以下のように(スクリプト002)イベントハンドラがプロパティ宣言されています。
_| ̄|○オレの時間返せ・・・。とうか、明らかなバグを堂々と放っとくなよadobe。この記事が書かれた2005年当時には少なくともバグであるという情報はネット上に流れてたはずで、これを華麗にスルーする辺りがなかなかの殿様商売ぶりです。
気を取り直して記事を読んでみると、どうやら解決法には3通りあるらしい。
[1] Flash 8のTweenクラスと同様に、必要なイベントハンドラを、インスタンスプロパティとして宣言することが考えられます。
[2] Tweenインスタンスを、Objectで型指定する方法がありえます。
[3] 配列アクセス演算子[]を使ってプロパティを指定すると、そのアクセス時にかぎり、型指定のチェックを回避することができます。
なるほど。[1][2]は見出しからしてややこしそうですが、[3]ならなんとかなりそうです。
ということで、とりあえず該当部分を以下のように修正。
import mx.transitions.Tween;
var myTween:Tween;
// …[中略]…
myTween["onMotionFinished"] = function() {
// ステートメント
};
一発で動きました。さすが野中さん。頼りになります。
説明を読むと、根本的な解決にはやはり[1]あたりが良さそうですが、今回のケースではとりあえずオッケーのようです。ありがとうございました。
trick7さんの該当エントリーにもコメント使用かとも思いましたが、みなさん無事動作しているところに2世代前のバージョンで動きませんよなどと水を差すのもアレかと思うので控えます。
そこのググって辿り着いた2世代前のバージョンを使っているあなた。あなたのためになれば幸いです。
という覚え書きの意味も含めたエントリー。
Recent Comments