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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     もう1度再生(Retry)の実現
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
nao
Åê¹ÆNo.20135
投稿日時: 2005-9-9 2:16
職人
居住地:
投稿: 208
使用環境:
WinXP Pro
Flash8 Professional
もう1度再生(Retry)の実現
Flashで作成したコンテンツをもう1度再生(Retry)するときに_rootのタイムラインを1フレーム目に戻したりすると思うのですがこのときにstaticメンバーやのsingletonパターンなどを実装していると単純にはリトライできないことがあると思います.

簡単な例だと
class Test {
	// 自身のインスタンス
	private static var objInstance:Test;
	
	// フラッグ
	private var flag:Boolean = false;
	
	// コンストラクタ
	private function Test() {};
	
	// インスタンス取得
	public static function getInstance():Test {
		if (Test.objInstance == null)
			Test.objInstance = new Test();
		
		return Test.objInstance;
	}
	
	// flagの取得・設定
	public function getFlag():Boolean {
		return this.flag;
	}
	public function setFlag(flag):Void {
		this.flag = flag;
	}
}


タイムライン1フレーム目
var objTest = Test.getInstance();

if (objTest.getFlag() == true) {
	trace('起動失敗');
	this.stop();
}

objTest.setFlag(true);


リトライボタン
	_root.gotoAndPlay(1);


これだと起動失敗してしまいます.
reset()メソッドなどをTestクラスに実装させて
 public function reset():Void {
	delete Test.objInstance;
}

として解決したんですがクラスが多いとなかなかメンドイなぁと思って,単純にFlashPlayerのコンテンツ自体を再起動できないかなと思い質問しました.
(そんなのないですよね...)

それ以外でもなにか良い方法があれば教えていただければと思います.
よろしくおねがいします.


----------------
nao [seto@graffiti-web.org]

野中文雄
Åê¹ÆNo.20136
投稿日時: 2005-9-9 3:01
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: もう1度再生(Retry)の実現
singletonインスタンスを再生成し、staticメンバを初期化したいということですね。

お勧めはしませんので、試してもいませんけど、loadMovieNum()関数でレベル0にコンテンツを読み直すとどうですか?
引用:
naoさんは書きました:
Flashで作成したコンテンツをもう1度再生(Retry)するときに_rootのタイムラインを1フレーム目に戻したりすると思うのですがこのときにstaticメンバーやのsingletonパターンなどを実装していると単純にはリトライできないことがあると思います.

初期化のクラスなり、メソッドなりを実装するのが、筋だと思います。
引用:
reset()メソッドなどをTestクラスに実装させて
 public function reset():Void {
	delete Test.objInstance;
}

として解決したんですがクラスが多いとなかなかメンドイなぁと思って,単純にFlashPlayerのコンテンツ自体を再起動できないかなと思い質問しました.


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

nao
Åê¹ÆNo.20147
投稿日時: 2005-9-9 12:51
職人
居住地:
投稿: 208
使用環境:
WinXP Pro
Flash8 Professional
Re: もう1度再生(Retry)の実現
野中さんレスありがとうございます.

引用:
お勧めはしませんので、試してもいませんけど、loadMovieNum()関数でレベル0にコンテンツを読み直すとどうですか?


そんなアイデアが!

と思って試したのですがダメでした…

_globalの中にstatic変数が展開されてしまっていた場合,後から読み込んだ同一名のパッケージ・クラスは上書きされないようです…



引用:
初期化のクラスなり、メソッドなりを実装するのが、筋だと思います。


やはりそうですよね…
ファミコンのリセットボタンみたいになんとかならないかなと思いましたが…
HTML自体をいじってリロードさせるしかなさそうですね.

ありがとうございます.


----------------
nao [seto@graffiti-web.org]

グッピー堀内
Åê¹ÆNo.20154
投稿日時: 2005-9-9 18:39
常連
居住地: 都内某駅前
投稿: 68
使用環境:
Win2000, Flash MX 2004
MacOSX, Flash MX 2004
Re: もう1度再生(Retry)の実現
_global変数を for in で delete してクラス消えませんか?
nao
Åê¹ÆNo.20162
投稿日時: 2005-9-10 2:56
職人
居住地:
投稿: 208
使用環境:
WinXP Pro
Flash8 Professional
Re: もう1度再生(Retry)の実現
グッピー堀内さんレスありがとうございます.

for in文で消したら組み込みも消えちゃうとおもったらそもそも出てこないんですね.

for in文でdeleteしたあとに_level0に元のファイルを読み込んだらできましたっ!

期待通りの動作をしています.
次やる機会があったら使うのも検討してみようと思います.

ありがとうございます.


----------------
nao [seto@graffiti-web.org]

グッピー堀内
Åê¹ÆNo.20175
投稿日時: 2005-9-10 20:24
常連
居住地: 都内某駅前
投稿: 68
使用環境:
Win2000, Flash MX 2004
MacOSX, Flash MX 2004
Re: もう1度再生(Retry)の実現
うまく行った様で何よりです。

正直、level0の読み直しはあまり好きな手法ではないので
僕の場合はgetURLでそもそものHTMLごと読み直してしまいます。

っと思いましたが、HTML上に別な要素が転がってると色々まずいことがあるかもしれませんね。
野中さんのおっしゃっている通り。
なるべくなら、初期化メソッドで何とかしたいものです。
nao
Åê¹ÆNo.20179
投稿日時: 2005-9-11 0:07
職人
居住地:
投稿: 208
使用環境:
WinXP Pro
Flash8 Professional
Re: もう1度再生(Retry)の実現
引用:
僕の場合はgetURLでそもそものHTMLごと読み直してしまいます。

JavaScript経由でDOM使ってswfを指定する属性だけを書き換えてリロードさせる方法もありそうですね
これも危険そうですね.

引用:
っと思いましたが、HTML上に別な要素が転がってると色々まずいことがあるかもしれませんね。
なるべくなら、初期化メソッドで何とかしたいものです。


そうですね.基本的にはやはり初期化メソッドで今後は実装するようにします.
_level0に読み込むのはいざというとき(?)に使ってみようと思います.

ありがとうございます.


----------------
nao [seto@graffiti-web.org]

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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