2008年12月24日

MacのDockみたいな・改

MacのDockみたいなをちょっと修正。 横方向の動かし方を思いついたので実装。だいぶそれっぽくなった。

FlashPlayer9以上が必要です。

実用っぽく書き直しました。こちら

例によってソースコードは続きから。

前回のものにも縦方向の基準位置が必要だったが、 横一列に並んでいたので、全アイコンに共通の値を使えば問題はなかった。 横方向の基準位置はアイコンによって異なるので、 「各アイコンの基準位置」を保存するために新しくクラスを定義。 アイコンの動きも全部このクラスで行う。

package {
	import flash.display.Sprite;
	import flash.display.MovieClip;
	import flash.display.Stage;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.utils.*;
	
	public class Main extends Sprite {
		const ICON_NUM:int = 6;
		
		public function Main() {
			// 台座
			var base:MovieClip = new MovieClip();
			base.graphics.beginFill(0x555555);
			base.graphics.drawRect(10, 85, 380, 30);
			base.graphics.endFill();
			stage.addChild(base);
			
			// アイコン
			for(var i:int = 0; i < ICON_NUM; i++) {
				// アイコンのインスタンス化
				// アイコンを表すクラスはfla内で定義
				var classRef = getDefinitionByName('Icon' + i);
				var icon:MovieClip = new classRef();
				
				// あとはコンテナクラスに丸投げ
				var container:Container = new Container(stage, icon, i * 60 + 50, 75);
			}
		}
	}
}

import flash.events.Event;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.Stage;

class Container extends Sprite {
	const MEASURE = 100;
	
	private var mStage:Stage;
	private var mIcon:MovieClip;
	private var mX:Number;
	private var mY:Number;
	
	public function Container(stage:Stage, icon:MovieClip, x:Number, y:Number) :void {
		mStage = stage;
		mIcon = icon;
		mX = x;
		mY = y;
		
		icon.x = mX;
		icon.y = mY;
		this.addEventListener(Event.ENTER_FRAME, this.scaleChange);
		mStage.addChild(mIcon);
	}

	private function scaleChange(evt:Event) :void {
		// カーソルとアイコンの距離に応じて倍率を変える
		var scale:Number = (2 * MEASURE - Math.abs(mIcon.x - mStage.mouseX)) / MEASURE;
		if(scale < 1.0) scale = 1.0;
		mIcon.scaleX = scale;
		mIcon.scaleY = scale;
		mIcon.y = mY + (mIcon.height / 4) * (1.0 - scale);
		
		// X位置を変化
		var dx:Number = (mIcon.x - mStage.mouseX) / MEASURE;
		mIcon.x = mX + dx * Math.exp(-dx * dx) * MEASURE / 4;;
	}
}



同じカテゴリー(プログラミング)の記事画像
GoogleReaderを3ペイン表示にするスクリプトのα版
文字サイズを拡大縮小するスクリプト
電卓を表示するブックマークレット
Twitterで費やした時間を表示するスクリプト
ニコニコのタグをプレビューするスクリプト
ニコニコで広告を消すスクリプト
同じカテゴリー(プログラミング)の記事
 GoogleReaderを3ペイン表示にするスクリプトのα版 (2009-07-26 22:00)
 クリック動作を無効にするジョークブックマークレット (2009-07-19 23:52)
 文字サイズを拡大縮小するスクリプト (2009-07-12 18:09)
 ダブルクリックでスクロールするスクリプト (2009-07-05 14:22)
 電卓を表示するブックマークレット (2009-06-27 21:40)
 ごくごく一部の顔文字を絵文字に置き換えるスクリプト (2009-05-21 23:06)
Posted by Handle at 13:43│Comments(0)プログラミング
コメントフォーム
上の画像に書かれている文字を入力して下さい
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。