dポイントプレゼントキャンペーン実施中!

Flash内で検索をしたいと思っています。具体的にはこんな感じです。
 1,Bob
 2,John
 3,Joe
というファイル(データ)があり、検索窓に1を入力して検索ボタンを
押すと、Bobが表示されるといった仕組みです。

Flashはほとんど初心者なので、これが可能なのかどうかをまず
知りたいです。簡単にできるようであれば、ソースの例やサンプルが
あるサイトを教えていただけると助かります。
あと、この場合、データもFlashのファイルに含めることができますか?

ちなみに、なぜFlashかというと、auの携帯がjava未対応だからです。
(もうすぐ自作javaも対応になるらしいですが・・・)

A 回答 (1件)

Flash Lite が作成できる環境をお持ちであれば可能です。



つまり,
Flash Professional 8 や Flash MX 2004 などをお持ちでしたら。

しかし,検索 ですか???
単なる条件分岐ではなくて…。

> 検索窓に1を入力して検索ボタンを
> 押すと、Bobが表示されるといった仕組みです。

これをプログラミングすれば,
 『もし検索窓に 1 が代入されていたら "Bob" を表示』
つまりこのような感じ↓

----------------------
if (knsaku eq "1") {
hyouji = "Bob";
}
----------------------

に見えますけど。

よくわからないので,

◎ if文 の条件分岐を使う方法
◎ 複数の変数から指定番号の変数の値を取ってくる方法
◎ 本当に検索する方法

この3つの方法を回答します。

また,携帯用Flash には,
「Flash Lite 1.0」,「Flash Lite 1.1」,「Flash Lite 2.0」という3つの規格(バージョン)のSWFが存在しますが,
「Flash Lite 2.0」規格のFlashが動く携帯はまだまだ少ないと思われるため,
「Flash Lite 1.0」もしくは「Flash Lite 1.1」 対応ということで書きます。


///////////////////////////////////////////////////////


3つの方法ともに共通するものをまず作成します。
Flash で新規ドキュメントを作成し,
「パブリッシュ設定」で 「Flash」タブから「FlashLite1.1」
または,「FlashLite1.0」を選択して「OK」しておきます。

ステージのサイズを 250×250くらいにしてください。
そして,まずステージ上に,1 か 2 か 3 を代入するための,
テキスト入力のテキストフィールドを作成します。
文字の色は黒など,背景とは違う色を選択しておいてください。

そして,そのテキスト入力のテキストフィールドを選択した状態で,
下の プロパティインスペクタ でこのテキストフィールドに "変数名" を付けます。
"インスタンス名" ではありません。"変数名" です。
検索文字入力用ですから,
「kensaku」 という変数名を付けておくことにします。


その下あたりに四角い塗りでも描いて,
その塗りを選択して,「修正」→「シンボルに変換」で,
ボタンシンボルに変換します。

そして,そのボタンの下あたりに,
今度は出力表示用のダイナミックテキストのテキストフィールドを用意します。
そのテキストフィールドを選択した状態で,
下の プロパティインスペクタ でこのテキストフィールドにもまた "変数名" を付けます。
表示用ですから,
「kensaku」 という変数名を付けておくことにします。

ステージ上を図示すると次↓のような感じになります。

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

  ┌─────┐
  └─────┘ ←テキスト入力 変数 kensaku

    ■■■■■
    ■■■■■   ←検索ボタン(ボタンインスタンス)

  ┌─────┐
  └─────┘ ←ダイナミックテキスト 変数 hyouji

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

ここまで準備ができたら,
3つの場合について3通りの方法の説明に移ります。



===========================================

◎ if文 の条件分岐を使う方法

真ん中のボタンを選択して,
そのボタンを選択した状態で,下のアクションパネルに次のように書きます。
コピペでかまいません。

---------------------------------
on (release) {
if (kensaku eq "1") {
hyouji = "Bob";
} else if (kensaku eq "2") {
hyouji = "John";
} else if (kensaku eq "3") {
hyouji = "Joe";
}
}
---------------------------------


そして,
SWFをパブリッシュし,
kensaku という変数名を付けた テキストフィールド に,
1 か 2 か 3 のを記入し,
ボタンをクリックすると,
hyouji という変数名をを付けた テキストフィールド に,
Bob か John か Joe が表示されます。

みたまんま,簡単な if文 による分岐です。



===========================================

◎ 複数の変数から指定番号の変数の値を取ってくる方法

これは,Bob や John や Joe などのデータ分の変数を用意して,
その値である Bob や John や Joe などのデータを表示させる方法です。


まずデータ部分として,
_root のフレームに変数と値の用意をしておきます。
次はフレームに書くスクリプトです。

----------------------------------
a1 = "Bob";
a2 = "John";
a3 = "Joe";
----------------------------------

変数 a1 ~ a3 にそれぞれのデータを入れています。
そして,ボタンに書くスクリプトは次のようになります。

----------------------------------
on (release) {
hyouji = eval("a" add kensaku);
}
----------------------------------

if文の分岐などもないので,非常にシンプルです。
そして,なおかつデータ部分と動作部分が分かれているので,
データを修正するだけで,いろいろな表示ができます。

普通の Flash だと配列を使うところだと思いますが,
Flash Lite 1.1 まででは配列というものがないので,
eval 関数で変数の集合体を配列のように扱っています。

3つの方法の中では一番お薦めの方法です。




===========================================

◎ 本当に検索する方法

本当に,

-------------
 1,Bob
 2,John
 3,Joe
-------------

という改行入り文字列から検索するのですか???
なぜそんなことをしなければならないのか意味がわかりませんが,
一応その方法を書きます。

しかし,"上のような規則の場合限定" です。
データの形式が変われば当然スクリプトも変わりますよ。
この形↓,

 1,Bob

 検索すべき 1 などの番号がまずあって,
 その後に 「,」 が入って,
 その後に 検索結果表示のデータがあって,
 その後(次の番号との間に)に改行が入っている。

この形式限定のスクリプトです。


まず,
データ用のダイナミックテキストのテキストフィールドを,
ステージ外など見えない場所に作成します。
そのダイナミックテキストは,複数行表示に設定して,
「a」 という "変数名" を付けてください。

その「a」のテキストフィールドに,

 1,Bob
 2,John
 3,Joe


を書いておきます。
そしてボタンには次のように書きます。

--------------------------------------
on (release) {
// 変数 hyouji の初期化
hyouji = "";

// 変数 i の初期値を 1 に設定
i = 1;

// 変数 mojisuu に 変数 a の文字数を取得
mojisuu = mblength(a);

// 変数 i が mojisuu 以下である条件でループ
while (i<=mojisuu) {
// 変数 a の i 文字目が kensaku の値と等しければ
if (mbsubstring(a, i, 1) == kensaku) {
// 次の改行コードがあるまでループ
while (mbsubstring(a, i+2, 1) ne "\r" and i<=mojisuu) {
// 変数 hyouji に i+2 番目の文字を足す
hyouji = hyouji add mbsubstring(a, i+2, 1);
// 変数 i に 1 を加算
i++;
}
}
// 変数 i に 1 を加算
i++;
}

}
--------------------------------------


while文の中にwhile文が入っているという,
結構ややこしめのスクリプトになっています。


>> データもFlashのファイルに含めることができますか?

上に書いたように,
変数名付きテキストフィールドを用意し,
その中にデータを書けばFlashのファイルに含めることができます。


そして,
例えば kensku テキストフィールドに,
仮に 1 が入った場合,
変数 a の文字列の先頭から,1文字ずつ見ていって,
もし 1 があればその2文字後から改行コード "\n" までを,
hyouji テキストフィールドに表示するというスクリプトです。


 [ 注意 ]
 ひょっとしたら
 改行コードは "\r" ではなく "\n" になるかもしれません。
 これはデータを入力するソフトやOSによって変わります。
 もし, "\r" でうまく行かなければ,
 while (mbsubstring(a, i+2, 1) ne "\r" and i<=mojisuu) {
 の部分を
 while (mbsubstring(a, i+2, 1) ne "\n" and i<=mojisuu) {
 に変えてください。
 Flash でスクリプトを用いで意図的に改行を入れる場合は,
 "\n" が普通です。
 しかし,テキストフィールドにWindows環境で入力した場合,
 "\r" になってしまいます。
 メモ帳からコピペした場合は,
 "\n\r" となったりしますが, "\n\r" なら "\r" でできます。
  "\r" が一番無難であると考えたため,
 スクリプトでは "\r" を使用しています。



===========================================

携帯用Flash(Flash Lite)で参考になるサイトや書籍はほとんどありません。
上のスクリプトでも eq や add など,Flash Lite 特有の言葉が入っていたりしますが,
なんとかその辺は,ヘルプなどで調べながらやって行くしかないでしょう。
    • good
    • 0
この回答へのお礼

2番目のやり方でなんとかできました。
とりあえず動くので、後は自分で勉強して色々と改良してみたいと思います。
ありがとうございました。

お礼日時:2007/12/18 09:43

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