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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     MovieClipを任意のフレームでstopさせるには?
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
とんび
Åê¹ÆNo.38752
投稿日時: 2008-5-10 14:26
Bak@Fla大巨匠
居住地: 佐賀県 杵島郡
投稿: 275
使用環境:
MX
CS3
:Flash CS6:CS6
.7.5
Re: オーサリングで配置したTextFieldにアクセスしようとするとコンパイルエラー
 なるほどなるほどー。おかげさまで、この辺りの良く判ってなかった部分が、だいぶ分かってきました。

[ステージのインスタンスを自動宣言]をOFFにして、クラス定義ファイルの方で、TextFieldをimportして変数として_txtを宣言するわけですね。

[ステージのインスタンスを自動宣言]って、フレームスクリプトに以下のコードを書いている、と思っていいのかな…多分。
public var _txt:TextField;

 ただ、[ステージのインスタンスを自動宣言]をOFFにしちゃうと、フレームスクリプトから参照する従来のやりかたは使えなくなっちゃう。
 その場合、フレームスクリプトの方で上記の(手動)宣言をすると使えますね。

 これらの変数とステージ上に配置したインスタンスとの結びつけ(代入)がスクリプト上はされてないのに使えるのが、なんだか気持ち悪いですけど。以下のスクリプトみたいな感じの。
_txt = (インスタンスへの参照);


----------------
鳶嶋工房

野中文雄
Åê¹ÆNo.38751
投稿日時: 2008-5-10 4:51
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: オーサリングで配置したTextFieldにアクセスしようとするとコンパイルエラー
やはり、エラーは出ないですね。以下のクラスTestを、MovieClipシンボルの[クラス]に設定しました。シンボル内には、TextFieldインスタンス_txtを予め配置してあります。MovieClipインスタンスはタイムラインに予め置いても、コンストラクタを呼出してDisplayObjectContainer.addChild()メソッドで動的に配置しても結果は変わりません。
package {
	import flash.display.MovieClip;
	import flash.text.TextField;
	public class Test extends MovieClip {
		public var _txt:TextField;
		public function Test() {
			_txt.text = this.toString();
		}
	}
}

引用:
とんびさんは書きました:
1. ムービークリップを作って、ステージに配置
2. そのムービークリップ内にTextFieldを配置し(オーサリングで配置、といってたのはコレ。ActionScriptで実行時にAddChildすることとの対比で)、インスタンス名を付ける(例:_txt)
3. ムービークリップのプロパティ(リンケージ)でクラスを指定

4. 指定したクラスの外部asファイルでクラスを定義
5. そのクラスの中から_txtを呼ぶ(例:_txt.text)

[ステージのインスタンスを自動宣言]は、外しておく必要があります。

ActionScript 3.0では、インスタンス名はDisplayObject.nameプロパティの値となる文字列としての意味しかなくなりました。しかし、従来のターゲットパスの考え方と互換性を持たせるため、タイムラインに配置したインスタンスは、Flashが内部的にその名前と同名の変数を宣言して、そこに参照を設定してくれます。

もっとも、これをMovieClipシンボルに設定するクラスでやられてしまうと、シンボル内に配置したインスタンスをプロパティとして宣言できなくなります。そこで、余計なおせっかいを止めさせるのが、このオプションの役目です。

参考: F-site「 MovieClipインスタンスとインスタンス名
引用:
 [パブリッシュ設定]-[Flash]タブのActionScript 3.0[設定...]-[ステージのインスタンスを自動宣言]はOFFです。
 ぜんぜん気にしたことありませんでしたが、なんじゃこりゃ?ヘルプにも何するオプションかは書いてないようですが。


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

とんび
Åê¹ÆNo.38750
投稿日時: 2008-5-10 3:56
Bak@Fla大巨匠
居住地: 佐賀県 杵島郡
投稿: 275
使用環境:
MX
CS3
:Flash CS6:CS6
.7.5
Re: オーサリングで配置したTextFieldにアクセスしようとするとコンパイルエラー
1. ムービークリップを作って、ステージに配置
2. そのムービークリップ内にTextFieldを配置し(オーサリングで配置、といってたのはコレ。ActionScriptで実行時にaddChildすることとの対比で)、インスタンス名を付ける(例:_txt)
3. ムービークリップのプロパティ(リンケージ)でクラスを指定

4. 指定したクラスの外部asファイルでクラスを定義
5. そのクラスの中から_txtを呼ぶ(例:_txt.text)

とういことをやるとエラーが出るのです。

 [パブリッシュ設定]-[Flash]タブのActionScript 3.0[設定...]-[ステージのインスタンスを自動宣言]はOFFです。
 ぜんぜん気にしたことありませんでしたが、なんじゃこりゃ?ヘルプにも何するオプションかは書いてないようですが。

 ONにすると「1046:型が見つからないか、コンパイル時定数ではありません:TextField」ってエラーが出ます。


----------------
鳶嶋工房

野中文雄
Åê¹ÆNo.38745
投稿日時: 2008-5-9 22:51
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: オーサリングで配置したTextFieldにアクセスしようとするとコンパイルエラー
再現方法が、わからないのですけど。

クラスを定義した場合で、「オーサリングで配置した」ということは、MovieClipシンボルの[クラス]に設定したということですよね。[パブリッシュ設定]における[Flash]タブの[ActionScript 3.0設定]ダイアログで、[ステージのインスタンスを自動宣言]はどうされていますか?
引用:
とんびさんは書きました:
 現在以下のようなスクリプトを書いて、エラーを回避しています。
public var frame_txt:TextField = TextField( getChildByName( "frame_txt" ) );

 確かにエラーは出ないのですが、もうちょっといい書き方がありそうな気もします。


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

とんび
Åê¹ÆNo.38743
投稿日時: 2008-5-9 22:22
Bak@Fla大巨匠
居住地: 佐賀県 杵島郡
投稿: 275
使用環境:
MX
CS3
:Flash CS6:CS6
.7.5
Re: オーサリングで配置したTextFieldにアクセスしようとするとコンパイルエラー
 新しくスレッドを作ったほうがいいのかもしれませんが…

 現在以下のようなスクリプトを書いて、エラーを回避しています。

public var frame_txt:TextField = TextField( getChildByName( "frame_txt" ) );


 確かにエラーは出ないのですが、もうちょっといい書き方がありそうな気もします。


----------------
鳶嶋工房

flashlite
Åê¹ÆNo.38503
投稿日時: 2008-4-21 2:40
常連
居住地: 東京
投稿: 69
使用環境:
WinXP Win7
Flash CS3,Flash CS5.0

FlashPlayer
FlashLite 1.1、2.0、2.1、3.1(下記)
Docomo SO903i
SH-08A
SoftBank 911T
 922SH
945SHG
au W61SA
S004
Disney DM001SH
Willcom Windows Mobile
 WX341k
Re: MovieClipを任意のフレームでstopさせるには?
ニノミヤ カズノリさん

ありがとうございます。
mc.addFrameScript((フレーム数、もしくはフレームラベル), mc.stop);


リンク先も読みました。

教えていただいた方法がひとつの解決方法として十分機能しました。しかも
stop以外にも、かなり応用が利きそうだと思いました。


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

永井勝則
Åê¹ÆNo.38497
投稿日時: 2008-4-20 9:25
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: MovieClipを任意のフレームでstopさせるには?
操作対象のムービークリップは、その内部にframe_txtという名前のダイナミックテキストフィールドを持っていて、
[リンケージプロパティ]ダイアログボックスで、
[クラス]フィールドにPlayMCクラスを指定しています。
このテキストフィールド自体は、操作対象のムービークリップの再生ヘッドが、今何フレームにあるかを示すだけのものなので、
質問の内容とは直接関係ないです。


----------------
永井勝則:
himco.jp :

とんび
Åê¹ÆNo.38496
投稿日時: 2008-4-20 3:05
Bak@Fla大巨匠
居住地: 佐賀県 杵島郡
投稿: 275
使用環境:
MX
CS3
:Flash CS6:CS6
.7.5
オーサリングで配置したTextFieldにアクセスしようとするとコンパイルエラー
引用:

flashliteさんは書きました:
未定義のプロパティ frame_txt へのアクセスです。

というコンパイルエラーが出てしまいました。


 これ、私も今悩んでいるところで、オーサリングで配置したTextFieldにドットシンタックスでアクセスしようとすると、コンパイルエラーが出てしまいます。
 無視して動かすと動くんですが、非常に気持ち悪いです。
 とりあえず_txtではなく、this["_txt"]という形でアクセスしていますが、今イチ納得いきません。


----------------
鳶嶋工房

flashlite
Åê¹ÆNo.38494
投稿日時: 2008-4-20 2:26
常連
居住地: 東京
投稿: 69
使用環境:
WinXP Win7
Flash CS3,Flash CS5.0

FlashPlayer
FlashLite 1.1、2.0、2.1、3.1(下記)
Docomo SO903i
SH-08A
SoftBank 911T
 922SH
945SHG
au W61SA
S004
Disney DM001SH
Willcom Windows Mobile
 WX341k
Re: MovieClipを任意のフレームでstopさせるには?
皆様 いろいろな方法をありがとうございます。

それぞれの方法を試してみているところですが
永井勝則さんの地道な方法
をそのまま試したところ

未定義のプロパティ frame_txt へのアクセスです。

というコンパイルエラーが出てしまいました。
勝手にframe_txt:TextFieldを追加してみても同様だったのですが
どうすれば再現できるでしょうか


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

野中文雄
Åê¹ÆNo.38474
投稿日時: 2008-4-18 4:09
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: MovieClipを任意のフレームでstopさせるには?
もうひとつ、地道な方法です。

MovieClipシンボルの[シンボルプロパティ]で、[クラス]または[基本クラス]にStopperクラスを設定します。インスタンスのstopFrameプロパティに止めたいフレーム番号を代入すれば、そのフレームで止まります。ただし、止まったときに、stopFrameプロパティは0にリセットされます。
// ActionScript 3.0クラス定義ファイル: Stopper.as
package {
	import flash.display.MovieClip;
	import flash.events.Event;
	public class Stopper extends MovieClip {
		var _stopFrame:uint = 0;
		public function get stopFrame():uint {
			return _stopFrame;
		}
		public function set stopFrame(nFrame:uint):void {
			_stopFrame = nFrame;
			if (nFrame>0) {
				addEventListener(Event.ENTER_FRAME, stopping);
			}
		}
		private function stopping(eventObject:Event):void {
			if (currentFrame == stopFrame) {
				stopFrame = 0;
				removeEventListener(Event.ENTER_FRAME, stopping);
				stop();
			}
		}
	}
}

引用:
flashliteさんは書きました:
再生させて任意のフレームでstopさせるにはどうすればよいでしょうか?(10フレームだったり、1フレーム目だったり変化します)

MovieClipの1フレーム目にstop();が入っているのと同じような事を
後から設定したいのです。


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

(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

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