トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     #initclip?#endinitclip の優先順位について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
みつもと
Åê¹ÆNo.12131
投稿日時: 2004-11-8 19:38
新米
居住地: 大阪府
投稿: 16
使用環境:
WindowsXP(SP1), Flash MX Professional 2004, SE|PY AS Editor
#initclip?#endinitclip の優先順位について
初めて投稿させていただきます。Flash歴1年ちょっとの新米ですが、よろしくお願いいたします。

さて、いきなり質問で恐縮ではありますが、
現在、ムービークリップと関連付けたクラスを大量生産しています。ムービークリップの1フレーム目の #initclip?#endinitclip でクラスを定義する、というヤツです。

数が少なかったうちは問題なく動作していたのですが、クラスの数(=ムービークリップの数)が増えてくると、思うように動作しなくなりました。
問題なのはおそらく自作クラスの継承で、確かではありませんが、どうも子クラスの定義が親クラスの定義より先に行われているのが原因ではないかと考えました。

具体的には以下のようなスクリプトです。
Super_mcの1フレーム目
#initclip
//  SuperClassの定義
function SuperClass(){
}

SuperClass.prototype = new MovieClip();

SuperClass.prototype.onLoad = function(){
  trace("ほげほげ");
}
Object.registerClass("Super_mc", SuperClass);
#endinitclip


Sub_mcの1フレーム目
#initclip
//  SubClassの定義
function SuperClass(){
}

SuperClass.prototype = new SuperClass();  //  SuperClassを継承

Object.registerClass("Sub_mc", SubClass);
#endinitclip


普通に SuperClass → SubClass と定義されれば、SuperClass の onLoad イベントハンドラメソッドがSubClass に継承され、Sub_mc がタイムライン上に配置された瞬間に「ほげほげ」と出力されるはずですが、もし SubClass → SuperClass と定義されていまえば、SubClass は何の機能も持たないことになります。(まさに現在この状態なのかもしれません)

書籍を漁ると、#initclip 1 と番号つけることで初期化される優先順位を決められることがわかりましたが、試しても、なんの変化もありませんでした。

この問題を解決するにはどういった対策をとれば良いのか、もし良かったら教えていただけないでしょうか?
よろしくお願いいたします。
野中文雄
Åê¹ÆNo.12144
投稿日時: 2004-11-9 7:01
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: #initclip?#endinitclip の優先順位について
クラス定義の順序が問題であれば、インスタンスがひとつでも、正しく動作しないはずです。
引用:
みつもとじょうじさんは書きました:
数が少なかったうちは問題なく動作していたのですが、クラスの数(=ムービークリップの数)が増えてくると、思うように動作しなくなりました。
問題なのはおそらく自作クラスの継承で、確かではありませんが、どうも子クラスの定義が親クラスの定義より先に行われているのが原因ではないかと考えました。

スペルミスなどがなく、クラス定義の順序に問題がなければ、私の環境では正しく動作します(Flash MX 2004/Mac OS X.3.5)。
引用:
Super_mcの1フレーム目
#initclip
//  SuperClassの定義
function SuperClass(){
    trace(["SuperClass", this]);  // 動作確認用
}

SuperClass.prototype = new MovieClip();

SuperClass.prototype.onLoad = function(){
    trace("ほげほげ");
}
Object.registerClass("Super_mc", SuperClass);
#endinitclip


Sub_mcの1フレーム目
// #initclip
#initclip 1
//  SubClassの定義
// function SuperClass(){
function SubClass(){	
    trace(["SubClass", this]);  // 動作確認用
}

// SuperClass.prototype = new SuperClass();  //  SuperClassを継承<しない
SubClass.prototype = new SuperClass();

Object.registerClass("Sub_mc", SubClass);
#endinitclip

普通に SuperClass → SubClass と定義されれば、SuperClass の onLoad イベントハンドラメソッドがSubClass に継承され、Sub_mc がタイムライン上に配置された瞬間に「ほげほげ」と出力されるはずですが、もし SubClass → SuperClass と定義されていまえば、SubClass は何の機能も持たないことになります。(まさに現在この状態なのかもしれません)

書籍を漁ると、#initclip 1 と番号つけることで初期化される優先順位を決められることがわかりましたが、試しても、なんの変化もありませんでした。

// 出力結果
SuperClass,[object Object]
SubClass,_level0.my_mc
ほげほげ


----------------
 

みつもと
Åê¹ÆNo.12149
投稿日時: 2004-11-9 9:59
新米
居住地: 大阪府
投稿: 16
使用環境:
WindowsXP(SP1), Flash MX Professional 2004, SE|PY AS Editor
Re: #initclip?#endinitclip の優先順位について
回答ありがとうございました。

記述したサンプルスクリプトはスペルミスだらけでしたね。(仕事中に急いで書いたもので・・・)
申し訳ありませんでした。次からは横着せずにサンプルを実際に制作してから投稿するようにします。

さて、#initclip の件についてですが、野中さんの添削を参考にこちらでもサンプルを制作してみたところ、おおむね意図どおりに動きました。
#initclip [n] の優先順位指定もちゃんと解釈してくれているようです。

実際に制作しているものにはもっと複雑なスクリプトが書かれていますが、そちらにもスペルミス、ケアレスミス等がないか再度調べてみます。

// funioNonaka.com のFlash非公式テクニカルノートはいつも参考にさせていただいております

【制作サンプル】
http://mega-cycle.gr.jp/~george/flash_exp/initclip_test.fla
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops