« 千の | メイン | 恐怖 »

2007年05月09日

AS2

まちょっと思い立ってアコーディオンを作ってみました。
flashで。

いろいろと実装の方法はあると思うのですが、せっかくなのでActionScript2.0でアコーディオンのパーツのクラスを作ってみました。

accord2.swfとゆーflashのファイルにパブリッシュして、同じディレクトリにjpgを置いておいて、テキストファイルにそのファイル名と、URLとターゲットを記述しておくと勝手に読み込む。つーのを。
設定テキストには、

kadoi.jpg http://www.google.co.jp _new
kanon.jpg http://www.starchild.co.jp/artist/horie/profile/index.html _new
taki.jpg http://www.yahoo.co.jp _new
baho2.jpg http://www.4gamer.net _new
rinne.jpg http://www.pangya.jp _new
baho.jpg http://www.starchild.co.jp/artist/aice5/ _new

なんていうのを書いておくと。

クラス自体は簡単なもんで、

class Accord extends MovieClip{
  var XMIN = 0;
  var XMAX = 300;
  var to_x = 0;
  var id = 0;
  var url = "http://www.google.co.jp";
  var target = "_new";

なんて変数を内部に持ってて、XMINとXMAXはそのパーツの可動域として最初に設定してやっておいて、クラス内部に

function onEnterFrame(){
  if (this._x != to_x){
    this._x = (this._x + to_x)/2;
  }
}

onEnterFrameを入れてあるので、常にここでイベントが起こってるわけなので、ここでto_xへXMINまたはXMAXを入れてやるとそこへ向かって動いていくってことね。
あとはタイムライン(ルート)のほーで、このクラスを使ってムービーのインスタンスをいくつか作るので、それらにマウスが乗ったときにどうやって各へ通知しようかと考えた末に、クラス内部に

function onRollOver(){
  _root.doAccord(id);
}

なんてのを持たせておいて、ムービークリップ側からルートの関数をコールバックしてやることにした。

で、ルートの方には

doAccord = function(id){
  for (var i=0; i<id; i++){
    items[i].to_x = items[i].XMIN;
  }
  for (var i=id; i<MAXNO; i++){
    items[i].to_x = items[i].XMAX;
  }
}

こんな関数を用意しておいて、マウスポインタの触れたインスタンスよりも左にあるやつは、行き先を各々のXMINへ、自信とそれより右にあるインスタンスは各々のXMAXへ飛んでいってもらう。と。

でまぁ、上にあるようなものができるわけで。

つかこんくらいならjavascriptで作れって話も。
まいいか。

投稿者 izumi : 2007年05月09日 23:58