- ベストアンサー
flashで1秒間に任意の数字を加算させたいのですが…
flash初心者です。 3つのダイナミックテキストエリアを作り、それぞれに再生が始まったら1秒ごとに、 1、100,000に2をプラス 2、4をプラス 3、2をマイナス このようなflashを作成したいと思っています。 とてもシンプルなんですが、どうしたらいいのか分からずに悩んでいます。 アドバイスを頂けたら、と思います。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1&2 です。 あのー、 日本語はちゃんと通じていらっしゃいますか? #2では, ロードするならロードするで, 「具体的なデータ形式などを提示して頂かないと具体的な回答はできません。」 と書いているのです。 「ロードする」or「ロードしない」を明記して, ロードする場合はどのようなデータをどのようにロードするのかを書いてもらわないと回答できません。 また, ロードさせないならロードさせないで, > 1秒でこれだけ産まれ、亡くなり、トータルはこれだけですよ、 > と目に見える数字 > 厳密な数字でなくて良い とおっしゃる, 「適当な厳密でない数字が出る法則」 を提示していただかないと回答できないでしょう? 本当にまったくデタラメな私が勝手に作った法則で動く, 「1秒でこれだけ産まれ、亡くなり、トータルの厳密ではない数字」 を表示する方法で良いのでしょうか? 「全くデタラメの法則にしたがって数字を算出し表示する方法」 でしたら回答できますが↓。 ///////////////////////////////////////////////////////// ◎ デタラメサンプル ・ 勝手なルール (デタラメな法則) 島の人口が最初 100000 人 であったとします。 その島では1秒間に 4人±2人 の人が生まれ, 1秒間に 2人±1人 の人が亡くなります。 新規ドキュメントを作成して, _root の フレーム1 に次のようなスクリプトを書いて(コピペして), パブリッシュすると,上で書いたデタラメルールのサンプルができます。 ------------------------------------------------ // ステージ上に pop_txt0~2 というインスタンス名の // ダイナミックテキストフィールドを作成 for (i=0; i<=2; i++) { _root.createTextField("pop_txt"+i, i, 10, i*30+10, 150, 22); _root["pop_txt"+i].border = true; } // ---↑手動で作成する場合は以上不要↑--------- // 人口の変数 population の初期値を設定 population = 100000; // 人口を変動させるユーザ定義関数 changeNumber の定義 function changeNumber() { // 生まれる人の人数を 4人±2人 で適当に算出 birth = 2+Math.floor(Math.random()*5); // 死亡する人の人数を 2人±1人 で適当に算出 death = 1+Math.floor(Math.random()*3); // 人口を算出 population += birth-death; // ダイナミックテキスト pop_txt0 に人口を表示 pop_txt0.text = "総人口: "+population+" 人"; // ダイナミックテキスト pop_txt1 に生まれた人口を表示 pop_txt1.text = "生まれた人数: "+birth+" 人"; // ダイナミックテキスト pop_txt2 に死亡した人口を表示 pop_txt2.text = "死亡した人数: "+death+" 人"; } // 最初に 上の関数 changeNumber を実行 changeNumber(); // 1秒(1000ミリ秒)間隔で上の関数 changeNumber を実行 myID = setInterval(changeNumber, 1000); ------------------------------------------------ 意味は,行頭に // が付いた注釈行に書いてある通りです。 デタラメなルール通りに動くようにしたものですから, なぜそのようになるのかの詳細を説明しても意味がないので説明はしません。 とにかく,#2 で書きましたように, setInterval で 1秒ごとに 何らかの関数を実行させれば良いのではないでしょうか。 以上 #2 からほとんど進化していない回答です。 逆に退化している回答かもしれません。 進化したのか退化したのかすら私にはわかりません。 また,動きの内容は違いますが, (テキストフィールドの作成) ↓ 変数の初期値を設定 ↓ ユーザ定義関数の定義 ↓ setInterval で1秒ごとにユーザ定義関数を実行 結局これは, #1 と同じしくみ(同じ形)のスクリプトに過ぎません。 つまり #1 からもほとんど進化していない回答です。
その他の回答 (2)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#1 です。 > 2と3は1秒間にそれぞれの人数がプラスマイナスされた数を表示。 > 1は総人口に2-3のトータル数を表示させます。 それを聞くともっとわからなくなりました。 そのデータはどうやって用意するのです? おそらく外部から(SWF以外のどこかから)ロードするのだと思いますが, それによってスクリプトは変わりますよ。 setInterval によって1秒間隔にどこかからそのデータをロードして, ロード完了次第, テキストフィールドにそのデータを表示する。 という流れでコーディングします。 このくらいのことしか書きようがありません。 ロードするデータ形式によってもスクリプトは変わりますから, 具体的なスクリプトは回答できませんね。 ※ クロスドメイン セキュリティポリシー によって, SWF にロードできるテキスト(文字)データは その SWF の置いてあるドメインの中のものしか 普通はロードできません。 この点も注意です。
補足
回答ありがとうございます。 総人口数は大まかで良いのです。 視覚的に訴えたいのです。 1秒でこれだけ産まれ、亡くなり、トータルはこれだけですよ、と目に見える数字として表示できたらな、というのがメインです。 全く個人的に使用するだけですので、厳密な数字でなくて良いのです。
- BlurFiltan
- ベストアンサー率91% (1611/1754)
若干, > 1、100,000に2をプラス > 2、4をプラス > 3、2をマイナス というルール(規則)がどういうルールなのか不明な点がありますが, 新規ドキュメントを作成して, _root の フレーム1 に次のようなスクリプトを書けば, 一応それらしいものはできると思います。 ------------------------------------------------ // ステージ上に my_txt0~2 というインスタンス名の // ダイナミックテキストフィールドを作成 for (i=0; i<=2; i++) { _root.createTextField("my_txt"+i, i, 10, i*30+10, 100, 22); _root["my_txt"+i].border = true; } // ---↑手動で作成する場合は以上不要↑--------- // 表示データを 配列myArr の要素 0~2 に準備 myArr = new Array(100000+2, 100000+4, 100000+2); // カウントするための変数 cnt の初期化 cnt = 0; // 配列のデータを順次表示するユーザ定義関数の定義 function showData() { // my_txt0~2 に myArr[0]~[2] を順次表示 _root["my_txt"+cnt].text = myArr[cnt]; // 変数 cnt に 1 を加算 cnt++; // もし cnt の値が 3 以上になれば if (cnt>=3) { // setIntarval をクリア clearInterval(myID); } } // 1秒(1000ミリ秒)間隔で showData を実行 myID = setInterval(showData, 1000); ------------------------------------------------
補足
丁寧に教えて頂きありがとうございます。 解りにくい説明ですみませんでした。 作ろうとしているのは、世界の人口を表示させる、時計の様なものです。 1、総人口 2、産まれた人数 3、亡くなった人数 2と3は1秒間にそれぞれの人数がプラスマイナスされた数を表示。 1は総人口に2-3のトータル数を表示させます。 こんな感じにしたいのです。
お礼
反省しました。 不快な気持ちにさせてしまい、申し訳ありませんでした。 プログラムもよく解らず、言葉も伝えられない人間に、親切に教えていただいてありがとうございました。 教えて頂いたスクリプトでばっちりです。感謝いたします。 今回は本当にありがとうございました。