メイン コーダーズルーム【スクリプト系】 classについてお教え下さい | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
karin | Åê¹ÆNo.3508 投稿日時: 2004-2-4 14:20 |
新米 居住地: 投稿: 4
使用環境:
PC:WinXP FLASH:FLASH MX |
classについてお教え下さい classについて勉強をしています。
試作として関連づけられたムービークリップが 左へ移動するという単純なものを考えてみました。 クラスの定義 ***_rootのレイヤー1の1フレーム目*** MyClass = function(){} MyClass.prototype = new MovieClip(); MyClass.prototype.main = function(){ this._x += 1; } MyClass.prototype.onEnterFrame = function(){ this.main(); } ***_rootのレイヤー1の2フレーム目*** 下記に定義したムービークリップインスタンスを配置 識別子:myMovieClip ムービークリップへの関連づけ ***ムービークリップ(識別子:myMovieClip)*** ***レイヤー1の1フレーム目*** #initclip Object.registerClass("myMovieClip",MyClass); #endinitclip ***レイヤー2の1フレーム目*** 動かしたいシェイプ(ここでは単純な○) としたのですが○が点灯するだけでどちらにも動きません。 どこがいけないのかアドバイス頂けたらと思います。 宜しくお願い致します。 |
野中文雄 | Åê¹ÆNo.3511 投稿日時: 2004-2-4 14:54 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: classについてお教え下さい 初心者部屋にこの投稿は、他のみなさんがビビりそうです。[コーダーズルーム]に、回答を移行しました。
引用: karinさんは書きました: |
森 なおき | Åê¹ÆNo.3514 投稿日時: 2004-2-4 15:05 |
モデレータ 居住地: 福岡(心は大阪) 投稿: 527
使用環境:
:MacOSX10.6.8 :FlashCS5.5 |
Re: classについてお教え下さい なおきです。
移動しての回答どうもでした(^_^)>>野中さん スレッドもコーダーズに移動しました。
|
karin | Åê¹ÆNo.3519 投稿日時: 2004-2-4 17:57 |
新米 居住地: 投稿: 4
使用環境:
PC:WinXP FLASH:FLASH MX |
Re: classについてお教え下さい 野中さん、なおきさん、ありがとうございました。
見よう見まねでclassを使ってみようと思ってるレベルでしたので 初心者の版に記載してしまいました。 すみません。 野中さんに教えて頂いた通りムービークリップ内に記述した ところうまくいきました。 ただ、今手元にあるFLASHの本には最初私が書いたように書く と書かれてあったので、ちょっと混乱しております。 本には下記のように書かれています。 ■クラスの定義 まずクラスを定義します。 これは_rootの1フレーム目に記述します。 Myclasss = function(){} //[クラス名] = function(){} これは関数を定義するのと同じですが、これでクラスを作成した ことになります。 次に、このクラスをムービークリップと関連付ける前提で 「MovieClip」クラスを継承します。 MyClass.prototype = new MovieClip(); //[クラス名] = function(){} これで「Myclass」で「MovieClip」のメソッドが使えるように なりました。これをしないと「Myclass」でonEnterFrameや onPress等の「MovieClip」のビルドインメソッドが使えません。 ■メソッドの定義 次に「MyClass」に独自のメソッドを定義します。 このクラスが既にムービークリップに関連付けられてると 考えてみてください。 「main」という関数を実行することで、座標が右に1px移動します Myclass.prototype.main = function(){ this.x_ +=1; } 先ほど「MovieClip」クラスを継承しましたので、onEnterFrameが 使えます。そこに独自に定義した関数「main」を入れてみましょ う。 MyClass.prototype.onEnterFrame = function(){ this.main(); } これで、この「MyClass」の関連付けられたムービーは右に進んで いきます。 ■クラスの関連付け 続けて、この「MyClass」をムービークリップに関連付けます。 まず、ムービークリップのリンケージの識別子を「myMovieClip」 にし、「ActionScriptに書き出し」だけにチェックを入れます。 #initclip Object.registerClass("myMovieClip",MyClass); #endinitclip そして、このスクリプトをムービークリップの1フレーム目に記述 します。#initclip?#endinitclipは、このムービークリップが ロードされる直前に、間に記述されたスクリプトを実行するもの です。 ■ムービークリップの配置 最後に、このムービークリップをクラスが定義されているフレー ムより後ろのフレームに配置します。これはクラスが定義される 前にこのムービークリップが読み込まれるとクラスが見つからず 未定義になってしまうからです。 このように書かれてあったので、試しに先ほどの用に作ってみた のですがうまく行きませんでした。ちなみにこの本はMX対応と 書かれております。 これはどう解釈したらよいのでしょうか? 野中様から教えて頂いたのですと、この場合はクラス定義のと 関連付けの順序がいけないと思うのですが、、、。 宜しくお願い致します。 この文章が不適切でしたら、すみませんが削除なさって下さい。 |
野中文雄 | Åê¹ÆNo.3522 投稿日時: 2004-2-4 18:32 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: classについてお教え下さい 「『ActionScriptに書き出し』だけにチェックを入れます」という文章に、注意が必要です。
デフォルトでチェックされる[最初のフレームに書き出し]は、チェックを外します。最初のフレームに書出すと、#initclipブロックが、メインタイムラインの第1フレームアクションつまりクラス定義より先に処理されてしまうからです。 引用: karinさんは書きました: 少なくともこの例で、クラス定義とObject.registerClass()メソッドの呼出しを分断する理由は見つかりません。本の解説中で特別にこのような処理を行う理由がないなら、初学者にとって間違えやすいだけでなく、サンプルとしても適当でないように思えます。 引用: このように書かれてあったので、試しに先ほどの用に作ってみた |
野中文雄 | Åê¹ÆNo.3590 投稿日時: 2004-2-8 6:35 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: classについてお教え下さい スレッドを移動していただいたようですので、こちらに戻します。
ムービークリップシンボル内に定義した#initclipブロックは、メインタイムラインの第1フレームアクションより前に処理されます。したがって、Object.registerClass()メソッド呼出し時に、まだクラス定義が行われていません。 引用: karinさんは書きました: したがって、ひとつの対処法は、クラス定義後にObject.registerClass()を呼出すことです。
しかし、もっともスタンダードな設定は、ムービークリップの第1フレームにクラス定義をすることでしょう。
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |