| //Tween、easingクラスのインポート
import mx.transitions.Tween;
import mx.transitions.easing.*;
//メニュー名(とび先ページ名)
var subMenu = ["Hoag's Object", "NGC 1309", "NGC 4622", "NGC 1300", "Arp 87", "NGC 6782", "NGC 1427A ", "NGC 3949", "NGC 3310", "Arp 194","Arp 148","NGC 4038"];
//メニュー(ページ)の総数、ページの配置(列数、行数)
var num = subMenu.length;
var col = 4;
var row = 3;
//ステージ(ページ)の幅、高さ
var w = Stage.width;
var h = Stage.height;
//文字書式
txtFormat1 = new TextFormat();
txtFormat1.color = 0xFFFFFF;
txtFormat1.size = 20;
txtFormat2 = new TextFormat();
txtFormat2.color = 0xFFFFFF;
txtFormat2.size = 13;
txtFormat3 = new TextFormat();
txtFormat3.color = 0xffc6b1;
//題名
title = "Galaxes from Hubble Heritage Image Gallery";
this.createTextField("titleTxt",100,10,10,400,50);
titleTxt.text = title;
titleTxt.setTextFormat(txtFormat1);
//背景MCの作成・配置
for (i=1; i<=num; i++) {
bg_mc = this.createEmptyMovieClip("bg_mc"+i, i);
bg_mc.attachMovie("bg"+i,"bg",i);
bg_mc._x = w*((i-1)%col);
bg_mc._y = h*Math.floor((i-1)/col);
bg_mc.bgNum = i;
load_galaxy(bg_mc);
}
//サブメニュー(ギャラリーのシリーズ名)と選択されたシリーズ名の表示用テキストフィールドの配置
this.createEmptyMovieClip("submenuBar",101);
submenuBar._x = 20;
submenuBar._y = 40;
//サブメニュー(シリーズ名)の表示と、イベントアクション
for (i=0; i<subMenu.length; i++) {
menuB = submenuBar.createEmptyMovieClip("submenuItem"+i, 100+i);
menuB._y = 25*i;
menuTxt = menuB.createTextField("tf", 100+i, 0, 0, 100, 30);
menuB.tf.text = subMenu[i];
menuB.tf.setTextFormat(txtFormat2);
menuB.no = i+1;
menuB.onRollOver = menubOver;
menuB.onRollOut = menubOut;
menuB.onRelease = menuRels;
}
//フルスケール表示及びリサイズのリスナーの設定
Stage.scaleMode = "exactFit";
Stage.align = "LT";
function fullScale() {
btn_mc._x = 20;
btn_mc._y = 40;
menu_mc._x = (Stage.width-num*50)/2;
menu_mc._y = Stage.height-80;
fullscreen_btn._x = Stage.width - 150;
fullscreen_btn._y = 50;
}
myListener = new Object();
myListener.onResize = function() {
fullScale();
};
Stage.addListener(myListener);
//フルスクリーンボタンの配置と設定
this.createEmptyMovieClip("fullscreen_btn",this.getNextHighestDepth());
fullscreen_btn.createTextField("tf",this.getNextHighestDepth(),0,0,100,30);
fullscreen_btn.tf.text = "FULLSCREEN";
fullscreen_btn.tf.setTextFormat(txtFormat2);
fullscreen_btn.onRelease = function() {
Stage["displayState"] = "fullScreen";
};
fullScale();
function menubOver() {
this.tf.setTextFormat(txtFormat3);
}
function menubOut() {
this.tf.setTextFormat(txtFormat2);
}
//サブメニューがリリースされたら
//該当するページが表示されるように、全頁を相対位置を保ったまま移動させる
//各ページの移動先・中間点(加速・減速2つのTweenを切り替える)の設定
function menuRels() {
menuNum = this.no;
for (j=1; j<=num; j++) {
mc = _root["bg_mc"+j];
col_j = (j-1)%col;
col_m = (menuNum-1)%col;
row_j = Math.floor((j-1)/col);
row_m = Math.floor((menuNum-1)/col);
mc.startx = mc._x;
mc.starty = mc._y;
mc.targetx = w*(col_j-col_m);
mc.targety = h*(row_j-row_m);
mc.midx = mc.startx+(mc.targetx-mc.startx)*0.7;
mc.midy = mc.starty+(mc.targety-mc.starty)*0.7;
shrinkImage(j);
myTween(mc,menuNum);
}
}
//ページ移動
function myTween(mc,menuNum) {
mcTween1 = new Tween(mc, "_x", Regular.easeIn, mc.startx, mc.midx, 2, true);
new Tween(mc, "_y", Regular.easeIn, mc.starty, mc.midy, 2, true);
mcTween1.onMotionFinished = function() {
mcTween2 = new Tween(mc, "_x", Regular.easeOut, mc.midx, mc.targetx, 2, true);
new Tween(mc, "_y", Regular.easeOut, mc.midy, mc.targety, 2, true);
mcTween2.onMotionFinished = function() {
if(mc == _root["bg_mc"+menuNum]){
new Tween(mc.galaxy_mc,"_xscale",Regular.easeOut,10,100,1,true);
new Tween(mc.galaxy_mc,"_yscale",Regular.easeOut,10,100,1,true);
new Tween(mc.galaxy_mc,"_alpha",Regular.easeOut,60,100,1,true);
}
};
};
}
//画像の縮小
function shrinkImage(menuNum) {
mc = _root["bg_mc"+menuNum];
mc.galaxy_mc._xscale = 10;
mc.galaxy_mc._yscale = 10;
mc.galaxy_mc._x = bg_mc._width/2-(mc.galaxy_mc._width/2)*mc.galaxy_mc._xscale/100;
mc.galaxy_mc._y = bg_mc._height/2-(mc.galaxy_mc._height/2)*mc.galaxy_mc._yscale/100;
mc.galaxy_mc._alpha = 60;
}
//画像のロード・配置(最初の表示でp1.jpgを拡大)
function load_galaxy(bg_mc) {
bg_mc.createEmptyMovieClip("galaxy_mc",300+bg_mc.bgNum);
bg_mc.galaxy_mc.createEmptyMovieClip("inner_mc",300+bg_mc.bgNum);
var mcLoader:MovieClipLoader = new MovieClipLoader();
jpg = "img/p"+bg_mc.bgNum+".jpg";
mcLoader.loadClip(jpg,bg_mc.galaxy_mc.inner_mc);
var oListener:Object = new Object();
oListener.onLoadInit = function() {
g_w = bg_mc.galaxy_mc._width;
g_h = bg_mc.galaxy_mc._height;
bg_mc.galaxy_mc.inner_mc._x = -g_w/2;
bg_mc.galaxy_mc.inner_mc._y = -g_h/2;
bg_mc.galaxy_mc._x = bg_mc._width/2-g_w/2;
bg_mc.galaxy_mc._y = bg_mc._height/2-g_h/2;
bg_mc.galaxy_mc._alpha = 60;
shrinkImage(bg_mc.bgNum);
if (bg_mc.bgNum==1) {
new Tween(mc.galaxy_mc,"_xscale",Regular.easeOut,10,100,0.5,true);
new Tween(mc.galaxy_mc,"_yscale",Regular.easeOut,10,100,0.5,true);
new Tween(mc.galaxy_mc,"_alpha", Regular.easeOut,60,100,0.5,true);
}
};
mcLoader.addListener(oListener);
} |
exactFitを使うとウインドウに合わせて全体を表示するので歪む場合がある。
縦横比を保ちたい場合は、
noBorderを使う。
targetx,targety:
リリースに対応したページの左上座標が(0,0)にくるように、全部のページを一枚の絵のように同時に動かすための到達座標の設定
midx,midy:
Tweenを加速から減速に切り替える中間点
(midx,midy)まで加速移動
中間点に到達したら
(targetx,targety)に減速移動
移動し終わったら
リリース対応星雲画像を
拡大して、非透明度を100%に
写真を中心点から拡大するために、座標調節用入れ子MC(inner_mc)を作成
|