ささきち流 Suzuka & ParaDraw 講座
Suzuka & ParaDraw
TOP
PROFILE
ActionScript Editor
LINK
BBS


フリーのFlash作成ソフト SuzukaParaDraw でFlashな生活を楽しもうというサイトです。
省スペース検索窓 サンプル&作成方法解説

 

 


サンプルダウンロード
PDRファイル・CSFファイル在中
「search.zip」 2.54 KB (2,608 バイト)



省スペース検索窓 作成方法解説

ParaDraw Ver.0.3a4 で作成した絵を,Suzuka Ver.0.7.2 で動作させています。
Flash はファイルの中に空間のみならず時間を持っているので,その時間によって空間を補うことができます。
時間を活用すれば,かなりな省スペース化ができますね。

 

スプライトインスタンスとテキストフィールドインスタンスの階層構造は次のようになっています。

 _root
  ├ sMC3 (スプライト MSN)
  ├ sMC2 (スプライト Yahoo!)
  ├ sMC1 (スプライト Google)
  └ w (テキストフィールド)

_root のタイムラインの フレーム1 のスクリプトは,次のように書いています。
スクリプトが存在するのはここだけです。

// 変数 my_n の初期値を設定
var my_n = 0; // 検索ボタンの動くのスピードの設定
var spd = 1/6; //
テキストフィールドの初期値 w.text = "< 検索語入力 >";
// 変数 flag の値を false に設定
var flag = false;
// 
w.onSetFocus = function() {
	// flag が false であれば
	if(!flag){
		// テキストフィールドを初期化
		w.text = "";
		// flag を true にする
		flag = true;
	}
};
// 検索ボタンの座標を指定する配列の作成
var xArr = new Array();
xArr[0] = [105, 110, 115];
xArr[1] = [30, 110, 115];
xArr[2] = [30, 35, 115];
xArr[3] = [30, 35, 40];
xArr[4] = [30, 55, 80];
// 検索ボタンをそれぞれの座標に向けて徐々に動かす
_root.onEnterFrame = function() {
	for (i=1; i<=3; i++) {
		_root["sMC"+i]._x += (xArr[my_n][i-1]-_root["sMC"+i]._x)*spd;
	}
};
// 検索ボタンのロールオーバー・アウト時の動作定義
for (i=1; i<=3; i++) {
	// 各ボタンに固有値 n を設定
	_root["sMC"+i].n = i;
	// ロールオーバーで my_n に固有値を代入
	_root["sMC"+i].onRollOver = function() {
		my_n = this.n;
	};
	// ロールアウトで my_n に 0 を代入
	_root["sMC"+i].onRollOut = function() {
		my_n = 0;
	};
	// ドラッグアウトした時はとロールアウト同じく
	_root["sMC"+i].onDragOut = _root["sMC"+i].onRollOut;
}
// 検索ボタンのクリック時の動作定義
_root.sMC1.onRelease=function(){
   getURL("http://www.google.co.jp/search?q="+escape(_root.w.text),"_blank");
};
_root.sMC2.onRelease=function(){
   getURL("http://search.yahoo.co.jp/search?p="+escape(_root.w.text),"_blank");
};
_root.sMC3.onRelease=function(){
   getURL("http://search.msn.co.jp/results.aspx?q="+escape(_root.w.text),"_blank");
};
//
// Enterキーを押したときにボタンを出す
// キー監視用インスタンスの作成
var myKey = new Object();
// 何かキーが押されたときの動作定義
myKey.onKeyDown = function() {
	// キーコードが13であれば
	if (Key.getCode() == 13) {
		// 変数 my_n に 4 を代入
		my_n = 4;
	}
};
// myKey をキークラスのリスナーに登録
Key.addListener(myKey);

最初の方は,テキストフィールドの初期値を与えておいて,そのテキストフィールドがフォーカスを与えられたとき(onSetFocus),テキストフィールドを空にするという,比較的どうでも良いことが書いてあります。

中ほどが重要ポイントです。
「Google」や「Yahoo!」や「MSN」のスプライトにロールオーバーしたとき,変数 「my_n」 の値を変えてやります。
その 「my_n」 の値によって,

 // 検索ボタンの座標を指定する配列の作成
 var xArr = new Array();
 xArr[0] = [105, 110, 115];
 xArr[1] = [30, 110, 115];
 xArr[2] = [30, 35, 115];
 xArr[3] = [30, 35, 40];
 xArr[4] = [30, 55, 80];

この2次元配列から各スプライトの x座標 をセレクトして,

 // 検索ボタンをそれぞれの座標に向けて徐々に動かす
 _root.onEnterFrame = function() {
  for (i=1; i<=3; i++) {
   _root["sMC"+i]._x += (xArr[my_n][i-1]-_root["sMC"+i]._x)*spd;
  }
 };

によって,各スプライトインスタンスをセレクトした x座標 に徐々に近付けるという動きをさせています。
絶対に2次元配列を用意しなければならないことはありませんが,データをシンプルに扱うために用意しています。

次に,「Google」や「Yahoo!」や「MSN」のスプライトをクリックしたときの動作定義を書いています。
「MSN」の例↓。

_root.sMC3.onRelease=function(){
 getURL("http://search.msn.co.jp/results.aspx?q="+escape(_root.w.text),"_blank");
};

各サーチエンジンに渡す引数部分に代入する文字列は escape関数 を使って w.text の値をエスケープしています。
エスケープさせなくても良いエンジンもありましたが,一応共通してエスケープさせてみました。