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

今、フラッシュ暗算のコンテンツを作っています。

一つ目のフレームで足す桁数や個数、再生速度を指定したいと思っています。
桁数などは一応指定できたのですが、fpsについてはお手上げでした。

あるHPで、fpsを後から変更する事はできない。という説明を見たのですが、それは、私がやろうとしている事ができないという意味でしょうか?それとも、あるムービーを作っていて、それを後からfps変更すると不具合が生じると言う事なのでしょうか?

A 回答 (2件)

フレームレートは変えられませんよ。


でも,アニメーションを早くしたり遅くしたりする方法は無数にあります。
どういうしくみで,次の暗算問題を出されているのかがよくわかりませんので,
一般的な方法をいくつか書いておきます。


初歩的な物では,

            1    5    10    15    20
 □レイヤー 筆・・|○   []|○            []|○|
 □レイヤー 筆・・|●--------->|●|○        []|
 □レイヤー 筆・・|○   []|●/////////[]||○   []|

こんなムービーを1つ作って,
内容が全く同じでキーフレームの間隔を短くしただけの

            1    5    10    15   
 □レイヤー 筆・・|○  []|○         []|○|
 □レイヤー 筆・・|●------->|●|○     []|
 □レイヤー 筆・・|○  []|●///////[]||○ []|

こんなムービーを作っておいて,
一つ目のフレームの再生速度を指定で,
「ロースピード」を選択すれば,上の方のムービーをロードする。
「ハイスピード」を選択すれば,下の方のムービーをロードする。
とか
「ロースピード」を選択すれば,上の方のシーンに gotoAndPlay() する。
「ハイスピード」を選択すれば,下の方のシーンに gotoAndPlay() する。
とかそういう方法もあります。


また,たとえば,
ステージ上に「hayasa」という変数名のテキスト入力のテキストフィールドと,
「atai」という変数名のダイナミックテキストを置いておいて,
タイムラインのフレーム1のスクリプトに

------------------------
//変数の初期値の設定
hayasa = 10;
atai = 100;

//1フレーム進む時間ごとに以下を実行
this.onEnterFrame = function() {

//変数hayasa のエラー処理
if (hayasa<1 || hayasa == "") {
hayasa = 1;
}

//変数hayasa を整数化
hayasa = Math.floor(hayasa);
//変数atai への値の加算
atai += hayasa;
};
-----------------------

と書くと,
テキスト入力のテキストフィールドに書いてある値通りに,
変数atai の値が加算されて行きます。
つまり,変数hayasa を変えることによって,
変数atai の変化する速さを変えられるわけです。

上の状態で,
さらに2つの 塗りの ○ (丸) でもステージ上に描いて,
2つともムービークリップにし,
1つには

-----------------------------
onClipEvent (enterFrame) {
if (this._x>600) {
this._x = -10;
}else{
this._x += _root.hayasa;
}
}
-----------------------------

もう1つには

-----------------------------
onClipEvent (enterFrame) {
if (this._x>600) {
this._x = -10;
} else {
this._x += _root.atai/100;
}
}
-----------------------------

と書いておいてパブリッシュ。
テキスト入力のテキストフィールドに書いてある値通りに,
ムービークリップの動く速さが変えられます。
つまり,変数hayasa を変えることによって,
色々なものの速さを変えることができます。


慣れてくると,
まずフレームレートを途中で変えようとかいう考えはなくなってきます。
フレームレートは変えることができませんが,
もし変えられたとしてもアニメーションの品質を保つ上で変えては変えてはならないと思います。
フレームレートなんか変えなくても,いくらでもスピードを変化させることができます。

#1の方の書かれている方法で,
スクリプトを実行するタイミングを変えるというのも1つの方法ですし,他にもタイミングを変える方法はたくさんあります。

例えば
複数フレームのムービーを作っておいて,
フレーム1のスクリプトに下のように書くと,
すごくゆっくりにしかアニメーションは進みません。

---------------------
//とりあえずストップ
stop();
//変数count の初期値を設定
count = 0;

//1フレーム進む時間ごとに以下を実行
this.onEnterFrame = function() {

//変数count を 1ずつ加算
count++;

//もし count が 10 で割り切れたら
if(count%10 == 0){
//次のフレームへ
nextFrame();
}
}
---------------------

こんなようにして,
アニメーションの動きを制御することはできますし,

//次のフレームへ
nextFrame();

と書いている部分を,
他のスクリプトに変えると,しばらくごとに,書いたスクリプトが実行されるものができます。

if(count%10 == 0)

の 10 を他の数に変えれば 他のタイミングで何かが実行されますから,
10 の部分を変数にしておいて可変にすることも可能です。

とにかく,

>> 私がやろうとしている事ができないという意味でしょうか?

fps を変えなくてもいくらでも方法はあると思います。
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。とても参考になりました。

お礼日時:2006/01/22 10:16

 フレームレート(fps)自体は変更できませんが、setInterval()という関数で、一定間隔ごとに処理を呼び出せるので、fpsを変更するのと同じような処理を行うことができますよ。



 引数は1つめがオブジェクト(対象)。
 2つ目がメソッド(処理)。
 3つめが呼び出す間隔です。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。

お礼日時:2006/01/22 10:14

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