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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     外部SWF読込時、指定したフレームの次のフレームを表示してしまいます。
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kowan
Åê¹ÆNo.11982
投稿日時: 2004-11-4 15:12
新米
居住地: TOKYO
投稿: 6
使用環境:
WinXP,Flash MX2004
外部SWF読込時、指定したフレームの次のフレームを表示してしまいます。
はじめまして。題名の通りなんですが、物凄く悩んでいます。
main.swf の中にムービークリップのインスタンス「Mov1」に
subを読み込みます。

subは、sub1.swf,sub2.swf・・・・
各sub(sub1.swf,sub2.swf等)の内容自体は、ほとんど同じです。

main.swfに設置しているボタンごとに同じインスタンス「Mov1」に
sub.swf読込むのですが、指定フレーム数+1を
どうしても表示してしまいます。
でも、もう一度、ボタンを押すと指定フレームが表示されます。
そして、もう一度ボタンを押すと指定フレーム数+1
になってしまいます。

同じインスタンスに読み込む性なのでしょうか?

変数当てたり、トレースしても、数字や実行Functionも性格に動いているし、値も正常なので、どこから考えればいいのか、困りはてております。

野中さんの外部MOVIE読込時のフレーム指定のサンプルもダウンし、見ましたが解決いたしませんでした 。

野中さんがされていて、私がしていなかったのは、
ムービーが読み込まれるのを待つ
位の処理でした。

よろしくお願い致します。
ひろゆき
Åê¹ÆNo.11983
投稿日時: 2004-11-4 16:11
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 外部SWF読込時、指定したフレームの次のフレームを表示してしまいます。
引用:
変数当てたり、トレースしても、数字や実行Functionも性格正確に動いているし、値も正常なので、どこから考えればいいのか、困りはてております。

回答する側も困り果てております。
正確・正常に機能しているのであれば、問題ないはずですよね?

でも、思うように動かない。

もっと具体的に、例えば、読み込みのスクリプトは?ボタンのスクリプトは? を示された方がよろしいかと。
野中文雄
Åê¹ÆNo.11985
投稿日時: 2004-11-4 16:32
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 外部SWF読込時、指定したフレームの次のフレームを表示してしまいます。
具体的な外部SWFのロードやフレーム移動のスクリプト、移動先フレームの状態(ロードが完了しているかなど)がご説明されていませんので、具体的なお答えはしかねます。

「下腹がしくしく傷むのですが、盲腸でしょうか?」と尋ねられても、具体的な検査をしなければどんな名医でも診断はできません。
引用:
kowanさんは書きました:
main.swfに設置しているボタンごとに同じインスタンス「Mov1」に
sub.swf読込むのですが、指定フレーム数+1を
どうしても表示してしまいます。

どこに読込もうとも、指定していないフレームに移動するという動作は、バグでなければスクリプトに問題があります。
引用:
同じインスタンスに読み込む性なのでしょうか?

ムービー中から、問題のスクリプト以外の不要な要素とくにフレームを移動するスクリプトはすべて削除してテストしてください。→【問題の絞込みをしない
引用:
変数当てたり、トレースしても、数字や実行Functionも性格に動いているし、値も正常なので、どこから考えればいいのか、困りはてております。

外部SWFをロードして、そのSWF内のフレームを移動するのであれば、「読み込まれるのを待つ」べきだと思われます。
引用:
野中さんがされていて、私がしていなかったのは、
ムービーが読み込まれるのを待つ
位の処理でした。

フレーム移動の問題は、移動を実行しているスクリプトだけ見ても、解決できないことがあります。別のスクリプトのフレーム移動の処理が、合成されている可能性があるからです。

P.S. サンプルを考えましたが、適切でなかったので削除します。


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

kowan
Åê¹ÆNo.11989
投稿日時: 2004-11-4 17:16
新米
居住地: TOKYO
投稿: 6
使用環境:
WinXP,Flash MX2004
Re: 外部SWF読込時、指定したフレームの次のフレームを表示してしまいます。
お医者さんすみません。
もっと体調を説明させて頂きます。
main.swfで押すボタンの処理
インスタンス「t1」へムービーをロード。
on (release) {
_root.fno = 2;//飛ばしたいフレーム番号
//_rootの指定MCに読み込まれているMovieno
指定フレームに移動する関数を呼ぶ
_root.movfrctrl.gomovie(_root.fno);
}
読んでるgomovieが↓
onClipEvent (load) {
//指定フレームへGO!!
//this.bno = 0;
//sub.swfへのラベル名前リスト
LabelList = ["g1st","g1ar","g2st","g2ar","g3st","g3ar","g4st","g4ar","g5st","g5ar","g6st","g6ar","g7st","g7ar","g8st","g8ar","g9st","g9ar","g10st","g10ar","g11st","g11ar","g12st","g12ar","g13st","g13ar","g14st","g14ar"];
function gomovie(no) {
cno = _root.t1._currentframe;
trace("cno="+cno+" no="+no);
if ( no != _root.pushbnum && cno != no ) {
_root.t1.gotoAndStop(LabelList[no]);
_root.pushbnum = LabelList[no];
trace("フレームを移動します");
} else if( cno == no){

}
}
}

ちなみに、ロードムービー部分は、
フレームに記入しており、それ以外は、
メインムービーにあるボタンからも_root.movctrl.setframeno(no);を呼ぶ形にしています。
no = _root.fno;
if(no == null) { no = 0; }
trace("frame 2 in : " + _root.fno);
_root.movctrl.setframeno(no);

_root.movctrl.setframeno(no);は↓
onClipEvent (load) {
//ムービーファイル配列
movieList = ["font1.swf", "font2.swf", "font3.swf", "font4.swf", "font5.swf", "font6.swf", "font7.swf", "font8.swf", "font9.swf", "font10.swf", "font11.swf", "font12.swf", "font13.swf", "font14.swf", "font15.swf", "font16.swf", "font17.swf", "font18.swf", "font19.swf", "font20.swf", "font21.swf", "font22.swf"];
function setframeno(no) {
trace(movieList[no]+"/"+_root.movnamebk);
if (movieList[no] ==_root.movnamebk){
trace("setframeno 処理しません");
}else{
trace("setframeno 処理します");
_root.t1.loadMovie(movieList[no]);
this.my_mc._y -= 1000;
trace("filename:"+movieList[no]);
_root.movnamebk = movieList[no];
}
}
}

メインムービーにあるボタン
は、リストボックス形式とっております。
それは、ムービークリップです。以下をムービークリップに
入れています。
onClipEvent (mouseUp) {
var px1 = this.sel._x;
var py1 = this.sel._y;
var px2 = px1 + this.sel._width;
var py2 = py1 + this.sel._height;

var sx1 = this.sc1._x;
var sy1 = this.sc1._y;
var sx2 = sx1 + this.sc1._width;
var sy2 = sy1 + this.sc1._height;

var mx = this._xmouse;
var my = this._ymouse;

if( px1 <= mx && mx <= px2 && py1 <= my && my <= py2 ) {
if ( this.txtData.text == "0" ) {
this.txtData.text = "1";
if ( parseInt(_root.fontno.text) > this.txt.length - this.viewmax ) {
this.current = this.txt.length - this.viewmax;
} else if ( _root.fontno.text != "" ) {
this.current = parseInt(_root.fontno.text);
}
this.gotoAndPlay(3);
} else {
this.txtData.text = "0";
this.gotoAndPlay(1);
}
} else if ( sx1 != null && sy1 != null && sx1 <= mx && mx <= sx2 && sy1 <= my && my <= sy2 ) {
//スクロールバー押下
} else {
_root.t1.gotoAndPlay(_root.fno);

this.txtData.text = "0";
this.gotoAndPlay(1);
}
}

onClipEvent (load) {
_root.box1.swapDepths(2);
}

上記をコメントアウトすると、正常な動作に戻るので、リストボックスを他の方法で作れないものか現状模索中です。


よろしくお願い致します。
野中文雄
Åê¹ÆNo.11990
投稿日時: 2004-11-4 17:32
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 外部SWF読込時、指定したフレームの次のフレームを表示してしまいます。
引用のリンクは、お読みいただいていますか? →【問題の絞込みをしない

内科の診察室では、内科の病気に関する症状に集中してお答えください。関係があるかないかわからないという要素は、片っ端から削除して結果を確認しましょう。

参考:「トラブルの『捜査手順』
引用:
野中文雄は書きました:
ムービー中から、問題のスクリプト以外の不要な要素とくにフレームを移動するスクリプトはすべて削除してテストしてください。→【問題の絞込みをしない

引用:
kowanさんは書きました:
お医者さんすみません。
もっと体調を説明させて頂きます。


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

kowan
Åê¹ÆNo.11992
投稿日時: 2004-11-4 18:11
新米
居住地: TOKYO
投稿: 6
使用環境:
WinXP,Flash MX2004
Re: 外部SWF読込時、指定したフレームの次のフレームを表示してしまいます。
問題の絞込みをしているつもりでした。
すみません。



のような形で、野中さんがおっしゃるみたいに、2箇所程度にかかれているgotoandPlayを片っ端から調べてみたのですが、結局
図に示す部分のリストボックスを修正したことで、直しました。
リストボックスには、↓
onClipEvent (mouseUp) {
var px1 = this.sel._x;
var py1 = this.sel._y;
var px2 = px1 + this.sel._width;
var py2 = py1 + this.sel._height;

var sx1 = this.sc1._x;
var sy1 = this.sc1._y;
var sx2 = sx1 + this.sc1._width;
var sy2 = sy1 + this.sc1._height;

var mx = this._xmouse;
var my = this._ymouse;

if( px1 <= mx && mx <= px2 && py1 <= my && my <= py2 ) {
if ( this.txtData.text == "0" ) {
this.txtData.text = "1";
if ( parseInt(_root.fontno.text) > this.txt.length - this.viewmax ) {
this.current = this.txt.length - this.viewmax;
} else if ( _root.fontno.text != "" ) {
this.current = parseInt(_root.fontno.text);
}
this.gotoAndPlay(3);
} else {
this.txtData.text = "0";
this.gotoAndPlay(1);
}
} else if ( sx1 != null && sy1 != null && sx1 <= mx && mx <= sx2 && sy1 <= my && my <= sy2 ) {
//スクロールバー押下
} else {
_root.t1.gotoAndPlay(_root.fno);

this.txtData.text = "0";
this.gotoAndPlay(1);
}
}

onClipEvent (load) {
_root.box1.swapDepths(2);
}
と書いており、
これを全削除して、リストボックス内の処理を書いているところの挙動にあわせて分散させて書くと困っていた現象がおきなくなりました。

解決は、しました。。。。
なにか、すっきり分からないのが気持ち悪いです。
うーむ。
野中文雄
Åê¹ÆNo.11993
投稿日時: 2004-11-4 18:19
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 外部SWF読込時、指定したフレームの次のフレームを表示してしまいます。
「コメントアウトすると、正常な動作に戻る」というのは、「メインムービーにあるボタン」あるいは「リストボックス」のMovieClipアクションですか? だとすると、if条件やelse if条件の処理は、そのインスタンスのボタンやスクロールバーなどの操作だと「推測」します(インスタンスselやsc1の役割がご説明されていませんので、正確にはわかりかねます)。

推測が正しければ、問題のフレーム移動のボタンをクリックしたとき、このMovieClipアクションのelseが処理され、_root.t1のフレームを(_root.fno)に移動したうえ先のフレームに進もうとする(MovieClip.gotoAndPlay()メソッドなので)はずです。これは、最初の回答で申し上げた「フレーム移動の処理が、合成されている可能性」を示します。
引用:
kowanさんは書きました:
main.swfで押すボタンの処理
インスタンス「t1」へムービーをロード。
on (release) {
    _root.fno = 2;//飛ばしたいフレーム番号
    // ...[中略]...
    _root.movfrctrl.gomovie(_root.fno);
}

読んでるgomovieが↓
onClipEvent (load) {
    //指定フレームへGO!!
    //this.bno = 0;
    //sub.swfへのラベル名前リスト
    LabelList = ["g1st","g1ar","g2st","g2ar"];   // 一部略
    function gomovie(no) {
        // ...[中略]...
            _root.t1.gotoAndStop(LabelList[no]);
            _root.pushbnum = LabelList[no];
            trace("フレームを移動します");

...[中略]...
メインムービーにあるボタン
は、リストボックス形式とっております。
それは、ムービークリップです。以下をムービークリップに
入れています。
onClipEvent (mouseUp) {
    // if条件やelse if条件の座標判定対象となるインスタンスが不明
    // おそらくスクロールボタンやパーの操作と「推測」
    if(  px1 <= mx && mx <= px2 && py1 <= my && my <= py2 ) {
        // ...[中略]...
    } else if (  sx1 != null && sy1 != null && sx1 <= mx && mx <= sx2 && sy1 <= my && my <= sy2 ) {
        //スクロールバー押下
    } else {
        _root.t1.gotoAndPlay(_root.fno);

...[中略]...
上記をコメントアウトすると、正常な動作に戻るので、リストボックスを他の方法で作れないものか現状模索中です。


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

kowan
Åê¹ÆNo.12085
投稿日時: 2004-11-7 16:35
新米
居住地: TOKYO
投稿: 6
使用環境:
WinXP,Flash MX2004
Re: 外部SWF読込時、指定したフレームの次のフレームを表示してしまいます。
引用:

野中文雄さんは書きました:
「コメントアウトすると、正常な動作に戻る」というのは、「メインムービーにあるボタン」あるいは「リストボックス」のMovieClipアクションですか? だとすると、if条件やelse if条件の処理は、そのインスタンスのボタンやスクロールバーなどの操作だと「推測」します(インスタンスselやsc1の役割がご説明されていませんので、正確にはわかりかねます)。


野中さんが、ご推測されているとおりです。
引用:

推測が正しければ、問題のフレーム移動のボタンをクリックしたとき、このMovieClipアクションのelseが処理され、_root.t1のフレームを(_root.fno)に移動したうえ先のフレームに進もうとする(MovieClip.gotoAndPlay()メソッドなので)はずです。これは、最初の回答で申し上げた「フレーム移動の処理が、合成されている可能性」を示します。


あれから、メインとサブの中にあるボタンの処理で使う移動に関する処理同士がぶつからないようにしてみました。

たとえば、サブムービーの中で、フレーム移動させる部分には、
_root.t1.gotoAndPlay(); と絶対パスにしていたのを
 → this.gotoAndPlay();にしてみたりなどです。

また、現在のフレーム番号を取得するための処理で_root.t1._currentFrame(); を常にとって判定するようにしてみたりしました。

「フレーム移動の処理が、合成されている可能性」をご指摘いただいたことに対する対応がこれでよかったのか?判断しかねています。
せっかくご指摘頂いたのですから、正しく理解したいのですが、一般的に、フレーム移動の処理が、合成される時というのは、どのような条件がかさなったときなのでしょうか?難しく考えすぎなのでしょうか?

お手数でなければ、ご回答いただければと思います。

いろいろ、ご指摘頂いて、助かりました。
ありがとうございました。



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

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