●720*470のステージ(12fps)を設定(背景色、ステージサイズは目的に応じて任意でよい)
●ステージに静止テキストで、タイトルや日付など任意の文字を配置する(任意)。ここでは、ステージ下部に <--Mouse Drag-->
●imgフォルダにサムネイル画像(100*50、sp1.jpg,sp2.jpg,,,,)と写真ファイル(ステージに収まる任意サイズの写真、Lp1.jpg,,,,,,,,)を格納する。 ここでの写真は、22年7月末穂高に出かけた時撮影した写真を使った(同行の長野さんの撮った写真も入っています)
|
//各クラスのインポート
import flash.geom.Matrix;
import flash.filters.BlurFilter;
import mx.transitions.Tween;
import mx.transitions.easing.*;
//各種変数の定義
var num:Number = 34;//パネル(サムネイル)の数
var speed0:Number = 0.0002;//マウスイベントが発生していない時の移動速度
var speed:Number = 0;//マウスに反応して移動する時の角速度
var diff:Number = 0;//フレームごとのspeedの増分
var rd:Number;//各パネルの表示角
var a:Number;//Matrix定義プロパティーの一つ(b,c,d,mcx,mcyも同様)、「ムービークリップの変形にMatrixを使ってみる」を参照
var depth:Number;//各パネルの深度
var v:Number;//Blur(ぼかし)定義プロパティー
var dir:Number = -1;//初期移動方向
var movex:Number = 0;//マウスドラッグの距離
var jpg:String;//拡大写真のurl
var settingTime:Number;//タイマーのセット時間
//サムネイル格納ムービークリップの作成
this.createEmptyMovieClip("thumbnailContainer",this.getNextHighestDepth());
//拡大写真読み込み用ムービークリップの作成
this.createEmptyMovieClip("load_mc", this.getNextHighestDepth());
//サムネイルの表示と円運動関数の呼び出し
for (i = 1; i <= num; i++)
{
var mc = thumbnailContainer.createEmptyMovieClip("sp" + i, i);
thumb_mc = mc.createEmptyMovieClip("ps", i);
thumb_mc.loadMovie("img/sp" + i + ".jpg");
addFrame(mc,0xffffff);
mc.n = i;
mc.onEnterFrame = circulating;
}
//ラセン運動関数
function circulating() {
if (getTimer() - settingTime > 1500)
{
settingTime = null;
mousedown = false;
}
if (mousedown) {
diff += (speed - diff) / 100;
} else
{
diff += dir * speed0;
}
rd = diff + this.n / num * 1.6 * Math.PI * 2;
a = Math.sin(rd);
b = 0;
c = 0;
d = 1;
mcx = 350 + 300 * Math.cos(rd);
mcy = 200 + 150 * Math.sin(rd / 5);
var myMatrix:Matrix = new Matrix(a, b, c, d, mcx, mcy);
this.transform.matrix = myMatrix;
depth = Math.floor((1 + Math.sin(rd)) * 100);
this.swapDepths(depth);
if (this.rollover) {
v = 1;
}
else
{
v = Math.floor((1 - Math.sin(rd)) * 3.5);
}
blurChange(this);
this.onRollOver = function() {
addFrame(this,0xff0000);
this.rollover = true;
};
this.onRollOut = function() {
addFrame(this,0xffffff);
this.rollover = false;
};
this.onRelease = function() {
loadPic(this.n);
}
}
//マウスドラッグ操作
var mouseListener = new Object();
mouseListener.onMouseDown = function() {
mousedown = true;
preMousex = _xmouse;
speed = diff;
mouseListener.onMouseMove = function() {
settingTime = null;
movex = -(_xmouse - preMousex);
if (movex >= 0) {
speed += Math.ceil(movex / 50) / 10;
dir = +1;
} else
{
speed += Math.floor(movex / 50) / 10;
dir = -1;
}
preMousex = _xmouse;
};
mouseListener.onMouseUp = function() {
settingTime = getTimer();
speed += 0;
delete this.onMouseMove;
};
};
Mouse.addListener(mouseListener);
//拡大写真の表示
function loadPic(picNo) {
thumbnailContainer._visible = false;
var mcLoader:MovieClipLoader = new MovieClipLoader();
jpg = "img/Lp"+picNo+".jpg";
mcLoader.loadClip(jpg,load_mc);
var oListener:Object = new Object();
oListener.onLoadInit = function() {
startx = Stage.width/2;
starty = Stage.height/2;
load_mc_w = load_mc._width/2;
load_mc_h = load_mc._height/2;
load_mcx = Stage.width/2-load_mc_w;
load_mcy = Stage.height/2-load_mc_h;
new Tween(load_mc, "_x", Regular.easeOut, startx, load_mcx, 0.5, true);
new Tween(load_mc, "_y", Regular.easeOut, starty, load_mcy, 0.5, true);
new Tween(load_mc, "_alpha", Regular.easeOut, 0, 100, 1, true);
new Tween(load_mc, "_xscale", Regular.easeOut, 0, 100, 0.5, true);
new Tween(load_mc, "_yscale", Regular.easeOut, 0, 100, 0.5, true);
load_mc.onRelease = load_mcRels;
};
mcLoader.addListener(oListener);
}
//拡大写真の消去とサムネイル群表示
function load_mcRels() {
mcTween = new Tween(load_mc, "_alpha", Regular.easeOut, 100, 0, 1, true);
thumbnailContainer._visible = true;
new Tween(thumbnailContainer, "_alpha", Regular.easeOut, 0, 100, 1, true);
mcTween.onMotionFinished = function() {
load_mc.unloadMovie();
}
}
//ぼかし付与関数
function blurChange(this_mc) {
var myBlur:BlurFilter = new BlurFilter(v, v, 1);
this_mc.filters = [myBlur];
}
//サムネイル枠線付与関数
function addFrame(mc, color) {
mc.clear();
var tw = 100;
var th = 50;
mc.lineStyle("2",color);
mc.moveTo(0,0);
mc.lineTo(0,th);
mc.lineTo(tw,th);
mc.lineTo(tw,0);
mc.lineTo(0,0);
} |