アプリ版:「スタンプのみでお礼する」機能のリリースについて

FLASH初心者です。携帯用のFLASHを作成しているのですが、FLASHムービーの終了後にボタンを押すと他のページに飛ぶようにするために以下のようなスクリプトを書きました。

on(keyPress"<enter>"){
getURL("http://●●●●●●●●");
}

ここまではよかったのですが、次にURLのあとにパラメーターを付け、そのパラメーターをランダムで表示させて飛ぶようにさせたいのです。以下のような感じです。

on(keyPress"<enter>"){
getURL("http://●●●●●●●●?rmd=○○○");
}

※ ○○○は3桁の数字がランダムで入ります。

この場合、どのようなスクリプトを書けばいいのでしょうか?いろいろなサイトで調べて試してみたのですがどうしてもうまくいきません。どうか教えてください。

A 回答 (1件)

携帯用Flashと書かれましても FlashLite のバージョンがわかりません。


バージョンによって答えは変わると思います(この場合も完璧に変わります)。

on(keyPress"<enter>") を使われていらっしゃるところから見て,
勝手に,FlashLite1.0 または 1.1 のご質問だと決めて,
その FlashLite1.0 または 1.1 用SWFをパブリッシュする場合を中心に書きます。

それと,
>※ ○○○は3桁の数字がランダムで入ります。
これも,
本当に3桁のランダムな数でよろしいのでしょうか。
よくわからないので,3つの場合について回答します。




==========================================
◎ 本当に3桁のランダムな数を代入する場合

本当に3桁のランダムな数は,
100以上 999未満 の数になるので,
random関数 を使って,
ボタンのスクリプトを次のようにすれば良いと思います。

----------------------------------
on (keyPress "<Enter>") {
getURL("http://●●●?rmd=" add (100+random(900)));
}
----------------------------------

random関数 と Mathクラスのrandomメソッドとは違います。

例えば,
random(5)
は 0~4 の5つの整数からランダムな値を返します。
今の(FlashLite2.0以上の)ActionScriptでは
Math.floor(Math.random()*5)
と同じ意味になります。

random(10)
(今の Math.floor(Math.random()*10) )
だと 0~9 の10個の整数からランダムな値を返します。

したがって,
10 + random(10)
(今の 10+Math.floor(Math.random()*10) )
では 10~19 の10個の整数からランダムな値を返します。

つまり,
100+random(900)
(今の 100+Math.floor(Math.random()*900) )
だと 100~999 の900個の整数からランダムな値を返すことになります。


add は 文字列連結演算子です。
1 + 5 は 6 になりますが,
1 add 5 は "15" になります。
数値加算演算子 と 文字列連結演算子 が分かれているのは結構便利なことが多いです。
今の ActionScript では,
数値加算も文字列連結も区別無く,同じ 「+」 しかないので不便な場合も少しあります。




==========================================
◎ ランダムな3つの数字を代入する場合

上のものは3桁の数ですから「12」や「5」や「0」などは含みません。
「012」や「005」や「000」など,そういうものも含む場合です。

この場合,
ボタンのスクリプトを次のようにすれば良いと思います。

----------------------------------
on (keyPress "<Enter>") {
rand = random(1000);
if (rand<=9) {
rand = "00" add rand;
} else if (rand<=99) {
rand = "0" add rand;
}
getURL("http://●●●?rmd=" add rand);
}
----------------------------------




==========================================
◎ 3桁のランダムな数が選択肢になっている場合

この場合は,例えば,
「007」と「110」と「119」と「777」と「999」という3桁の数があったとして,
この中から ランダムにどれかを代入 する場合です。

まず,
ボタンが存在するフレーム(_root の フレーム1 など)に,
次のような,
「文字列+連番」の変数名とその値のデータを用意しておきます。

-----------------
para0 = "007";
para1 = "110";
para2 = "119";
para3 = "777";
para4 = "999";
-----------------


そして random関数 で,上の場合 0~4 のランダムな数を取得して,
eval関数 でその変数にアクセスするのが一般的です。

-------------------------------------
on (keyPress "<Enter>") {
getURL("http://●●●?rmd=" add eval("para" add random(5)));
}
-------------------------------------


eval関数は今でも(FlashLite2.0以上でも)使えますが,あまり使いません。
また,eval云々の前に,
変数をダラダラ並べるより配列を使うと思います。
さらに,
Enter キーが押されることとは全く無関係なボタンを作成するという変なこともないと思います。

これらのことを考えると,
今の(FlashLite2.0以上の)ActionScriptでは,
ボタンを作成せずにフレームに次のように書くと思います。

-------------------------------------
// 配列 para の作成
var para:Array = new Array();
para[0] = "007";
para[1] = "110";
para[2] = "119";
para[3] = "777";
para[4] = "999";

// キー監視用にオブジェクトを作成
var myListener:Object = new Object();
// 何かキーが押されたときの動作を定義
myListener.onKeyDown = function() {
// もし押されたキーが Enter であれば
if (Key.getCode() == Key.ENTER) {
trace("http://●●●?rmd="+para[Math.floor(Math.random()*5)]);
}
};

// オブジェクトをKeyクラスのリスナーとして登録
Key.addListener(myListener);
--------------------------------------

※注意
このスクリプトの場合,
FlashLite2.0 以上用のSWFをパブリッシュする設定にするだけでなく,
ActionScriptのバージョンも 2.0 に指定してパブリッシュする必要があります。




まだ「場合」が出てきそうな気もしますが,
FlashLite1.0 または 1.1 を中心に,
FlashLite2.0以上の場合をまじえながら,
3つの場合を回答してみました。
 
    • good
    • 0
この回答へのお礼

ありがとうございます!バージョンはFlashLite1.1を使用しておりましたが無事動作しました。とても丁寧かつ分かりやすい解説で大変勉強になりました。本当にありがとうございます。

お礼日時:2008/07/11 20:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!