as3 SharedObjectクラスを使用したムービースキップ
一度訪問したユーザーには途中からムービーを流したいのですが、
sharedObjectを使用するというところまではわかったのですが、
as2のサンプルが多く、なかなかas3での記事が見つからなかったので、
ご質問させていただきました。
Flashを始めたのがas3からで環境はCS5になります。
as2のコードを流用して実装するスキルもなく困っております。
具体的に教えていただけると幸いです。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
> 途中からムービーを流したいのですが
実際は SharedObject よりも
その 「"途中"までのロード待ちをする部分」 が作成すべきものの大部分を占めるように思いますが。。。
(NowLoading...みたいなものをどうするかです。以下ではそのロード待ち部分の説明は省略します。)
例えば
「初回閲覧者」には
メインタイムラインの フレーム1 から順次閲覧してもらい
「一度訪問した閲覧者」には
フレーム31 から閲覧してもらうスクリプトの簡易例↓。
<フレーム1に書く例>
-------------------
//このタイムラインの再生を停止
this.stop();
//一度訪問したユーザーに見せる途中フレームを設定
var show_frm:uint = 31;
//SharedObject「numberOfTimes」を参照する変数「my_so」を作成
var my_so:SharedObject = SharedObject.getLocal("numberOfTimes");
//(試しにmy_so.data.numを出力)
trace(my_so.data.num);
//「numberOfTimes」に変数「num」が保存されていれば
if (my_so.data.num != undefined) {
//変数「num」に1を加算
my_so.data.num++;
//関数「waitLoaded」を毎フレーム時間実行するリスナーを登録
this.addEventListener(Event.ENTER_FRAME,waitLoaded);
//「numberOfTimes」に変数「num」が保存されていなければ
} else {
//変数「num」に1を代入
my_so.data.num = 1;
//このタイムラインの再生を開始
this.play();
}
//関数「waitLoaded」を定義 (↓簡易例)
function waitLoaded(e:Event):void {
//このタイムラインのロードが設定したフレームに達すれば
if (this.framesLoaded >= show_frm) {
//設定した途中フレームから再生開始
this.gotoAndPlay(show_frm);
//関数「waitLoaded」を毎フレーム時間実行するリスナーを削除
this.removeEventListener(Event.ENTER_FRAME,waitLoaded);
}
}
-------------------
「制御」→「ムービープレビュー」で閲覧してもらうとわかりやすいと思います。
◎上記AS 動作検証上の注意
例えば上記のファイルを
任意のフォルダに「AAA.fla」として作成したとします。
その場合
「AAA.fla」と同じフォルダに「AAA.swf」がパブリッシュされると思いますが,
「そのフォルダのそのAAA.swf」専用のSOLファイル(共有オブジェクトファイル)がPC内に保存されます。
つまり
「そのフォルダのそのAAA.swf」を見る限り
当たり前ですが1回目しか「初回閲覧者」になれないのです。
↑『「初回閲覧者」はどのように見えるか』 を検証するのは1回しかできないということ。
『「初回閲覧者」はどのように見えるか』 を何度も検証したい場合は
検証する都度「AAA.fla」の名前を変えて保存し直すのが楽です。
例えば「AAA1.fla」で保存し直すと
「AAA1.swf」 がパブリッシュされるため
それ専用のSOLファイルがPC内に保存されるので
「初回閲覧者」の状態に戻れるということです。
すいません、ご回答が遅くなりました!
ずっと検証してましてやっとめどが立ちそうです!
今、数時間たつとまた最初から見れるようにしたいと思っており、
試行錯誤しているところです。
それはまた別スレでにしたいと思います!!
ありがとうございました!
No.2
- 回答日時:
#1 です。
> 数時間たつとまた最初から見れるようにしたいと思っており、
> 試行錯誤しているところです。
試行錯誤することが一番良いと思います。
以下は 「ちなみに(大きなお世話)」 の参考まで。
#1で書いたスクリプトをベースにする場合
私だと次のように変更すると思います。↓
<フレーム1に書く例>
-------------------------
//このタイムラインの再生を停止
this.stop();
//時間内に訪問したユーザーに見せる途中フレームを設定
var show_frm:uint = 31;
//最初から見れるようになる経過時間を設定(ミリ秒)
// ↓1分の場合例
var passed_ms:uint = 1 * 60 * 1000;
// (↓3日の場合例)
//var passed_ms:uint = 3*24*60*60*1000;
//今現在の時刻オブジェクトを作成
var now_date:Date = new Date();
//1971年1月1日からの経過時間(ミリ秒)を取得
var now_time:uint = now_date.getTime();
//(試しに現在の絶対時刻を出力)
trace("1971年から今現在まで→" + now_time + "ミリ秒");
//SharedObject「visitTime」を参照する変数「my_so」を作成
var my_so:SharedObject = SharedObject.getLocal("visitTime");
//(試しにmy_so.data.numを出力)
trace("1971年から前回閲覧まで→" + my_so.data.num + "ミリ秒");
//「visitTime」の「num」からの経過時間がpassed_ms未満であれば
if (now_time - my_so.data.num < passed_ms) {
//関数「waitLoaded」を毎フレーム時間実行するリスナーを登録
this.addEventListener(Event.ENTER_FRAME,waitLoaded);
//それ以外は
} else {
//このタイムラインの再生を開始
this.play();
}
//「visitTime」の変数「num」にnow_timeの値を代入
my_so.data.num = now_time;
//関数「waitLoaded」を定義 (↓簡易例)
function waitLoaded(e:Event):void {
//このタイムラインのロードが設定したフレームに達すれば
if (this.framesLoaded >= show_frm) {
//設定した途中フレームから再生開始
this.gotoAndPlay(show_frm);
//関数「waitLoaded」を毎フレーム時間実行するリスナーを削除
this.removeEventListener(Event.ENTER_FRAME,waitLoaded);
}
}
-------------------------
上記スクリプト中の
//「visitTime」の「num」からの経過時間がpassed_ms未満であれば
if (now_time - my_so.data.num < passed_ms) {
の部分については 【下の図↓】をご参考に。
ちなみに#1の回答を見た時点で気付かれたかもしれませんが
SharedObject は ActionScript 2.0 も 3.0 も大差ありません。
ほぼ同じように使えば良いのです。
ここで使ったDateクラスも ActionScript 2.0 と 3.0 とで大差はなくほぼ同じです。
それ以外のロード待ちの部分などで
ActionScript 2.0 と 3.0 にかなり違いが出てきます。
時間経過を棒グラフでイメージした図↓
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- ルーター・ネットワーク機器 AU光10G回線について 6 2022/07/25 00:12
- Wi-Fi・無線LAN ホームゲートウェイと無線ルーター間の接続用に「LANケーブルの買い換え」を検討しています。 8 2022/04/09 11:33
- 一戸建て アスベスト物件解体に必要なこと 2 2023/07/12 07:10
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- その他(自然科学) LEDの接続について 2 2022/09/16 22:18
- Android(アンドロイド) auのAndroid端末のSIMカードがロックされてしまいました。 6 2022/08/22 20:31
- 写真 写真(画像)編集スキルを質問する時 1 2022/12/07 14:14
- ヒーター・こたつ・ホットカーペット お忙しいところよろしくお願いいたします。古いシャープ家具調こたつ(30年位前)の電源コードが無くなり 5 2022/12/04 01:56
- CAD・DTP 「機能ブロック図」の描画用フリーソフトを教えてください 1 2022/09/23 16:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アメブロで音声ファイルを貼る方法
-
pptxをPDFで保存すると、90%サ...
-
potplayerについて質問です
-
この曲はなんでしょう?
-
arduino プログラムについて
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
VBAのコンボボックスの年月表示...
-
Adobe Flash Player
-
Windows10重い
-
uwscでExcelに自動記入
-
パソコンのリカバリーについて
-
iPhoneです。 Adobeフラッシュ...
-
Adobe(マクロメディア)のFLAS...
-
ヘッダーデザインをするさい形...
-
更新されて起きた問題
-
googlechromeでadobeflashplayer
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WEBブラウザの重複起動の禁止
-
Flashでのゲーム用アナログ時計...
-
ムービーの早送りと巻き戻しが...
-
ボタンで移動する前に、特定のM...
-
Error#1009 時計のシーン移動ボ...
-
Flash Professional CS5
-
ループ再生のflashをタイムライ...
-
画像がランダムに表示されるFLA...
-
ActionScriptの基本的な部分で...
-
キーボードを押した時のムービ...
-
【ActionScript】命令文を再実...
-
FLASH lite1.1での質問というか...
-
画像をランダムに表示させたい
-
深い階層でのムービークリップ...
-
Flash lite1.0の計算クイズ
-
プルダウンメニューとフェード...
-
loadMovieで読み込んだswf
-
外部画像を読み込み、ボタンで...
-
Flashで右クリックメニューにつ...
-
フレーム内に移動したい
おすすめ情報