「this.stop();」のアクションを追加しています。当方WinXPの環境では
問題なく、ループせずに最後のフレームで停止するのですが、
Mac環境のクライアントの方に「ループしてしまう」と言われました。
swfファイルは「player 6」のバージョンで書き出しています。
ループする原因の分かる方、よろしくお願いします。
thisは、オブジェクトに対して定義するものであり、フレーム制御するのであれば stop(); でことたるでしょう。オブジェクト指向で制御したほうが色々な問題は回避できると思います。
ただ、this.stop(); とMacクライアントは関係ありません。問題があるとすれば、Macクライアントのブラウザ種別/バージョン/プレーヤーのプラグイン/バージョンあたりでしょう。
フラッシュプレイヤー(プラグイン)のバージョンが
古いのではないでしょうか。再生側のバージョンが分かりませんが、そう仮定しての対処です。
古いバージョン(たしかver4以前)ではthisが解釈できないと思います。ので、
・thisをなくしてstop();にする
・Player4で書き出す
・最初にバージョンチェックを行う
などが必要かと思います。
なるほど、そうかもしれません。
Player4でやってみます。
もう少し、回答を待ってみます。
当方MacOS9+FlashMX+Flash Player 7環境で作成しています。参考書として上野亨氏の「FLASH ActionScriptバイブル」を愛読しつつ、いまだに勉強中の身なので、まちがっていたら申し訳ないのですが、_rootの最後フレームにthis.stop();は頻繁に使用していますが、自分のMac上では、ご質問のような状況にはなったことはありません。
上記の参考書はFLASH5対応なのですが、それによりますと、『現バージョンのActionScriptには、旧バージョンとの互換性を保つために、MovieClipオブジェクトのメソッドと同じ名前を持つ「単独のアクション」が残されて』いて、『thisを省略した場合は、それがメソッドなのか、単独のアクションなのか、判断できなくなってしま』い、エラーになってしまうことがあるそうです。
しかし、play()やstop()であれば『たまたま、メソッドとアクションが、全く同じものであるから』どちらでも同じ動きになります。
また_rootという『大元のタイムラインもMovieClipオブジェクトの1つ』であるそうですから、オブジェクト指向の鉄則に乗っ取るならthis.stop()にしなければいけない…と私は頑に信じきっていました。(フレームアクションでonEnterFrameアクションを記述する時、thisがないとシンタックスエラーが出てしまいますよね?…関係ないかな?)
ただ、これがMX版のActionScriptになるとどうなっているのかは存じませんが、MX自身に内蔵されているリファレンスパネルで「this」を調べてみると、FlashPlayer5からの対応となっています。
ということで、上段の回答者の方たちが仰るように、クライアントさんのプレイヤーがver.4以下である可能性が高いのではないでしょうか。
と、長々と書いてしまいましたが、結局同じ答えとなりました。すみません。
私もクライアントに変な動きになると指摘されたこともありますが、たまたま先方が復数台パソコンを所持していたので、プレイヤーのバージョンによって動きが違うということがわかり、プレイヤーを新しいものにアップデートしてもらい、解決しました。
私も例のver5時代のバイブルを愛読してました。(^-^*)
HaoHaoさんの体験談から考えて、Mac環境の方すべてがループする、というわけではなさそうなので、安心しました。
2度目すみません。若干、話がそれるかもしれません。
パブリッシュなど使用しておりましたら、HTMLのループをオフにしたりするのも良いかもしれません。
また、最後から数フレーム手前にラベル作って最後のフレームに
gotoAndPlay(”ラベル”);
で、「止める」のではなくループさせてしまうのも手ですね。これならプレイヤーバージョンは関係しません。問題の切り分けとして試すのもよいかもしれません。
後から調べるうちに、書き出したHTMLのループ設定の存在にも気がついたんです。でもって、それが原因かなあ、と。でも、(少なくとも当方のWin環境では)swfのアクションで停止させるようにしていると、HTML側の設定に関わらず、ループしませんでした(うーん、どういうときに使うのだろう?)。最後のアイデアも、最後の切り札として参考になりました。
とりあえず、現行バージョンでは問題なさそうなので、安心しました。
thisの指定は気になっていたんですけどねぇ。
stop();もしくは、_root.stop();でしょうか。