質問: flashで、スクリプトによるカラーの変化を表現 flashで、setrgbを使って、 あるカラーから、あるカラーへ徐々に色を変化させることは可能でしょうか。 例えば、紫から緑や、紫から赤など、 一つの色からの変化を何通りも実現できれば最高です。 それをスクリプトで自由に表現できればと思っています。 色が徐々に変わるようにしたいのですが、それは可能でしょうか。 宜しくお願いします。
回答: color オブジェクトの setrgb メソッドでは、線やグラデーションのかかった塗りなども、全て指定の色で塗りつぶされてしまいます。 色調を変えたい場合は、setrgb ではなく settransform メソッドを使います。 settransform で必要とされるパラメータは、多くて複雑です。ですから、object 型という汎用オブジェクトを用意し、このオブジェクトにパラメータを設定して引数として渡すように設計されています。 詳しくは省略しますが、ra のように2文字目が”a”で終わるパラメータは、「高度な設定」のパネルで左側にある「%」の設定に、rb のように”b”で終わるパラメータは、右側の数字を入れる部分(オフセット)に対応しています。 1つの色から何通りもの変化を、とのことですので、このようにしてみてはいかがでしょう。 ムービークリップは、できればモノトーンで作った方が分かりやすいです。 例えば、白い四角形のムービークリップがあるとします。 これのインスタンスをステージに置いて、「カラー」→「高度な設定」のパネルを見てみて下さい。rgb全ての要素が100%に、オフセットは0 になっていると思います。 ここで、仮にrを100%に、gとbを0%にすると、ムービークリップの色が赤に変わります。 右側のオフセットをいじるとややこしいので、左側にあるrgbの割合を操作することで、色を変化させることにします。 actionscript では、パラメータを設定することで色を変えます。そのパラメータを一定の数字ではなく、フレームごとに変わる変数にしておけば、フレームごとに色が変化するアニメになります。 とりあえず、ステージに、 clip という白い四角形のムービークリップがあるとします。 clip の色を赤から紫へ変えるスクリプトは、次のようになるかと思います。 //初期設定 onclipevent( load ) { var color_ctrl , param_obj , r , g , b; //カラー操作オブジェクトと、パラメータ用オブジェクトの生成 color_ctrl = new color( this ); param_obj = new object(); //rgbの割合を管理する変数の初期化:最初は赤にする r = 100; g = 0; b = 0; //カラーのパラメータを設定 param_obj = { ra:r , rb:"0" , ga:g , gb:"0" , ba:b , bb:"0", aa:"100" , ab:"0" }; //カラー変更処理 color_ctrl.settransform( param_obj ); } //赤→紫のカラーアニメ onclipevent( enterframe ) { //青の割合をアップ:100%になったらアニメ終了 b += 5; if ( b > 100 ) { b = 100; } //パラメータを更新 param_obj.ba = b; //カラー変更処理 color_ctrl.settransform( param_obj ); } (↑このスクリプトをコピーして使う場合は、行頭の全角スペースを、全て半角のスペースかタブに置き換えて下さい。このまま使うと、シンタックスエラーになります) enterframe イベントは、ムービークリップがステージに存在している間、常に発生しています。この点を利用して、青の要素を1フレームごとに変更します。 今回は青の要素だけが変化するので、settransform に渡される param_obj は param_obj.ba の部分のみを変更していますが、r と g を変更する場合は、param_obj.ra と param_obj.ga に r と g の内容を代入して、変更を反映させます。 あとは色の調整ですので、いろいろ試してみて下さい。 ・・・ところで、先ごろのカテゴリーの整理で、「プログラミング」のところに「flash」というカテゴリーが作られました。 最近、カテゴリー違いで質問が削除されたという話を、よく耳にします。「グラフィックソフト」でも間違いではないとは思うのですが、actionscript の質問は「flash」のカテゴリーを利用した方が、無難な気がします。 長くなってしまって、すみませんでした。