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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     classについてお教え下さい
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
野中文雄
Åê¹ÆNo.3590
投稿日時: 2004-2-8 6:35
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: classについてお教え下さい
スレッドを移動していただいたようですので、こちらに戻します。

ムービークリップシンボル内に定義した#initclipブロックは、メインタイムラインの第1フレームアクションより前に処理されます。したがって、Object.registerClass()メソッド呼出し時に、まだクラス定義が行われていません。
引用:
karinさんは書きました:
***_rootのレイヤー1の1フレーム目***
trace("Class is defined");  // テスト用
MyClass = function(){}
MyClass.prototype = new MovieClip();
// [後略]

***_rootのレイヤー1の2フレーム目***
 下記に定義したムービークリップインスタンスを配置
 識別子:myMovieClip

ムービークリップへの関連づけ
***ムービークリップ(識別子:myMovieClip)***
 ***レイヤー1の1フレーム目***
#initclip
trace("Object.registerClass is called");  // テスト用
Object.registerClass("myMovieClip",MyClass);
#endinitclip

したがって、ひとつの対処法は、クラス定義後にObject.registerClass()を呼出すことです。
// _root
// 第1フレームアクション
MyClass = function () {
	trace(this);  // テスト用
};
MyClass.prototype = new MovieClip();
MyClass.prototype.main = function() {
	this._x += 1;
};
MyClass.prototype.onEnterFrame = function() {
	this.main();
};
Object.registerClass("myMovieClip", MyClass);

しかし、もっともスタンダードな設定は、ムービークリップの第1フレームにクラス定義をすることでしょう。
// MovieClip: ムービークリップシンボル識別子"myMovieClip"
// 第1フレームアクション
#initclip
MyClass = function () {
	trace(this);
};
MyClass.prototype = new MovieClip();
MyClass.prototype.main = function() {
	this._x += 1;
};
MyClass.prototype.onEnterFrame = function() {
	this.main();
};
Object.registerClass("myMovieClip", MyClass);
#endinitclip


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

野中文雄
Åê¹ÆNo.3522
投稿日時: 2004-2-4 18:32
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: classについてお教え下さい
「『ActionScriptに書き出し』だけにチェックを入れます」という文章に、注意が必要です。

デフォルトでチェックされる[最初のフレームに書き出し]は、チェックを外します。最初のフレームに書出すと、#initclipブロックが、メインタイムラインの第1フレームアクションつまりクラス定義より先に処理されてしまうからです。
引用:
karinさんは書きました:
■クラスの関連付け
続けて、この「MyClass」をムービークリップに関連付けます。
まず、ムービークリップのリンケージの識別子を「myMovieClip」
にし、「ActionScriptに書き出し」だけにチェックを入れます。

#initclip
Object.registerClass("myMovieClip",MyClass);
#endinitclip

そして、このスクリプトをムービークリップの1フレーム目に記述
します。#initclip?#endinitclipは、このムービークリップが
ロードされる直前に、間に記述されたスクリプトを実行するもの
です。

少なくともこの例で、クラス定義とObject.registerClass()メソッドの呼出しを分断する理由は見つかりません。本の解説中で特別にこのような処理を行う理由がないなら、初学者にとって間違えやすいだけでなく、サンプルとしても適当でないように思えます。
引用:
このように書かれてあったので、試しに先ほどの用に作ってみた
のですがうまく行きませんでした。ちなみにこの本はMX対応と
書かれております。


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

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.3514
投稿日時: 2004-2-4 15:05
モデレータ
居住地: 福岡(心は大阪)
投稿: 527
使用環境:
:MacOSX10.6.8
:FlashCS5.5
Re: classについてお教え下さい
なおきです。
移動しての回答どうもでした(^_^)>>野中さん

スレッドもコーダーズに移動しました。


----------------
な お き
Dev.:MacOSX+FlashCS5.5
View:---

野中文雄
Åê¹ÆNo.3511
投稿日時: 2004-2-4 14:54
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: classについてお教え下さい
初心者部屋にこの投稿は、他のみなさんがビビりそうです。[コーダーズルーム]に、回答を移行しました。
引用:
karinさんは書きました:
classについて勉強をしています。
...
クラスの定義
***_rootのレイヤー1の1フレーム目***
MyClass = function(){}
MyClass.prototype = new MovieClip();


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

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フレーム目***
 動かしたいシェイプ(ここでは単純な○)


としたのですが○が点灯するだけでどちらにも動きません。
どこがいけないのかアドバイス頂けたらと思います。
宜しくお願い致します。
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

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