POPSブログ

FLASH-SLIDESHOW-4

64

  Category:  flash2012/03/26 pops 

FLASH AS3 による、TransitionManagerを使用した、スライドショーです。FLASH-SLIDESHOW-3の自動を削除して、サムネールページャー付きにしました。


FLASH-SLIDESHOW-4

FlashTest167c.swf

フルスクリーン対応、サムネールページャー付き「簡単なスライドショー」サンプル表示


FLASH表示テスト 専用のSWF FlashTest167c.swf 465x465


注意、FlashTest167c.swf は「BaserCMS」で使用する専用です。画像は /main/images/xxxx.jpg


簡単な説明

サムネールページャー付きの「簡単なスライドショー」タイプです。

  • FlashDevelopで作りました。AS3表記です。
  • スクリプトだけの資料です。書き換えなどは自由です。
  • 画像URLはスクリプト内部に記載します。
  • ランダムに設定された条件で作動しますので、合わないものもでます。ご了承ください。
  • TransitionManager処理。INのみです。
  • 当方のFlashDevelopの設定により、as swf クラスの名前は同じです。環境にあわせてください。

簡単なスクリプト説明


次の数値を変更してください、

[SWF(width="465", height="465", frameRate="30", backgroundColor="0x000000")]

//大きさ/現在上で決めている
private var boxWidth:Number = 465;
private var boxHeight:Number = 465;

//main-image 画像のおおきさを決定する
private var image_W:Number = 465;
private var image_H:Number = 350;

//thumbnailのおおきさ
private var thumb_W:Number = 32;
private var thumb_H:Number = 24;

//画像URL 実際の大きさ465x350
imageUrls = [
	"/main/images/cat11m.jpg",
	"/main/images/cat12m.jpg",
	"/main/images/cat13m.jpg",
	"/main/images/cat14m.jpg",
	"/main/images/cat15m.jpg",
	"/main/images/cat16m.jpg",
	"/main/images/cat17m.jpg",
	"/main/images/cat18m.jpg",
	"/main/images/cat19m.jpg",
	"/main/images/cat20m.jpg"
];
//画像説明文
imageMess = [
	"画像説明 1",
	"画像説明 2",
	"画像説明 3",
	"画像説明 4",
	"画像説明 5",
	"画像説明 6",
	"画像説明 7",
	"画像説明 8",
	"画像説明 9",
	"画像説明 10"
];
-----------------------------------------------------

AS3

as FlashTest167c.as

FlashDevelopで制作しました。中には使用していない変数もあります。画像URLなどは環境に合わせてください。
サムネール配置、または保管の部材を配置しても、画像のはみ出しが出無い構造になっています。
TransitionManagerは、その上に何らかの処理がくると少し不安定のようです。サムネールは、一旦、レーヤー(layer3:Sprite)にいれて配置しました。サムネールを、Transition画像の上に表示することが可能です。


//TRAN_SlideShow
//TransitionManager
//FlashTest167c
//Matrix画像の中心補正//Inに対応して下に画像を配置する/自動削除

package
{
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.geom.*;
	import flash.system.*;
	import flash.utils.*;
	import flash.text.*;
	//Transition
	import fl.transitions.*;
	import fl.transitions.easing.*;
	//虹色用
	import frocessing.color.ColorHSV;
	//Tween
	import com.greensock.*;
		
	[SWF(width="465", height="465", frameRate="30", backgroundColor="0x000000")]

	public class FlashTest167c extends Sprite {
		//layer
		private var layer1:Sprite;
		private var layer2:Sprite;
		private var layer3:Sprite;
		private var masklayer:Sprite;
		//textlayer
		private var textlayer:Sprite;
		private var square2:Sprite;
		//Text
		private var tf:TextField;
		//title
		private var mvtf:TextField;
		//大きさ/現在上で決めている
		private var boxWidth:Number = 465;
		private var boxHeight:Number = 465;
		//LOADER
		private var loader:Loader;
		//Loading
		private var indicator:DisplayObject;
		//main-image
		private var photomax:int = 0;
		private var photomax2:int = 0;//修正用
		private var countImage:int = 0;
		private var mainImages:Array = [];//Array-Bitmap
		//main-image 画像のおおきさを決定する
		private var image_W:Number = 465;
		private var image_H:Number = 350;
		//mainImageBox mainBox
		private var mainBox:Sprite;
		private var mainImageBox:MovieClip;//MovieClip
		private var backImageBox:Sprite;//背景用画像BOX
		//番号
		private var show_no:int = 0;//現在表示番号
		//active番号サムネール処理用途
		private var active_no:int = 0;
		//Urlの保存
		private var imageUrls:Array = [];
		//画像の説明文の保存
		private var imageMess:Array = [];
		//thumbnail配置menuベース
		private var menu_base:Sprite;
		//thumbnailのおおきさ
		private var thumb_W:Number = 32;
		private var thumb_H:Number = 24;
		private var thumbs:Array = [];//Array-thumbnail
		//FullScreenButton
		private var fullScreenBtn:Sprite;

		public function FlashTest167c ():void {
			
			//ステージ
			stage.align = StageAlign.TOP_LEFT;
			stage.quality = StageQuality.HIGH;
			//stage.scaleMode = StageScaleMode.NO_SCALE;//使用しない
			stage.fullScreenSourceRect = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
			
			//BASE/黒背景
			var square:Sprite = new Sprite();
			square.graphics.beginFill(0x0000);//0x000000
			square.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
			square.graphics.endFill();
			addChild(square);
			
			//layer1
			layer1 = createSquare( 0, 0, 0, 0, 0x000000, 1);
			addChild(layer1);
			layer1.visible = false;
			
			//layer2/全体を移動できるようにmasklayer、mainBox収容、layer2に入れる
			layer2 = createSquare( 0, 0, 0, 0, 0x000000, 1);
			addChild(layer2);
			layer2.visible = false;
			
			//layer3
			layer3 = createSquare( 0, 0, 0, 0, 0x000000, 1);
			addChild(layer3);
			
			//mainImageBox用のマスクとして利用する、layer2に入れる
			masklayer = createSquare( 0, 0, image_W, image_H, 0x000000, 0);
			masklayer.x = 0;
			masklayer.y = 0;
			layer2.addChild(masklayer);
			masklayer.visible = false;
			
			//mainImageBox収容用Flyのはみ出し除去、中心補正をするとFlyがずれるのでしないこと
			//layer2に入れる
			mainBox = createSquare( 0, 0, image_W, image_H, 0x000000, 1)
			backImageBox = createSquare(0, 0, image_W, image_H, 0x000000, 1);
			mainBox.addChild(backImageBox);
			layer2.addChild(mainBox);
			
			//MovieClip、中心補正の位置の計算が面倒、回転がなければ要らないのだが、mainBoxに入れる
			mainImageBox = new MovieClip();//MovieClipであること
			mainImageBox.graphics.beginFill(0x000000, 1);
			mainImageBox.graphics.drawRect( -image_W / 2, -image_H / 2, image_W, image_H);
			mainImageBox.graphics.endFill();
			mainImageBox.x = image_W / 2;
			mainImageBox.y = image_H / 2;
			//mainBoxにaddChild
			mainBox.addChild(mainImageBox);
				
			//マスクをかける設定、Rotateのはみ出し除去
			mainBox.mask = masklayer;
			
			//layer1、全体の位置を決定する
			layer2.x = 0;
			layer2.y = 30;
			layer2.visible = true;
			
			//menu_baseをベースにしてmenu_boxを作る
			menu_base = createSquare(0, 0, stage.stageWidth, 75, 0x333333, 1);
			menu_base.x = 0;
			menu_base.y = 380;//380
			layer3.addChild(menu_base);
			menu_base.visible = false;
			
			//LOADING
			indicator = new Indicator();
			//indicator.x = stage.stageWidth / 2;
			//indicator.y = stage.stageHeight / 2;
			indicator.x = 12;
			indicator.y = 15;
			indicator.addEventListener(Event.ENTER_FRAME, step);//回転Listener
			addChild(indicator);
			indicator.visible = false;
			
			//textlayer-hover収容BOX
			textlayer = new Sprite();
			addChild(textlayer);
			textlayer.visible = false;
			
			//TEXT背景Spriteボックス作成1/alpha=0.4
			square2 = createSquare(0, 0, stage.stageWidth, 30, 0x000000, 0.4);
			textlayer.addChild(square2);
			
			//text
			tf = createTextField(25, 5, stage.stageWidth - 60, 20);
			tf.textColor = 0xFFFFFF;
			tf.text = "";
			square2.addChild(tf);
			
			//FullScreenButton
			fullScreenBtn = createFullScreenButton();
			fullScreenBtn.x = stage.stageWidth - 35;
			fullScreenBtn.y = 2;
			square2.addChild(fullScreenBtn);
			
			//title
			mvtf = new TextField();
			addChild(mvtf);
			
			//FULLSCREEN-ACTION
			fullScreenBtn.addEventListener(MouseEvent.CLICK, fullClickHandler);
			
			//textlayer-Listener
			stage.addEventListener(MouseEvent.MOUSE_OVER, openTextLayer);
			stage.addEventListener(MouseEvent.MOUSE_OUT, closeTextLayer);
			
			//GOTO-Url_Set
			loadImage_Url_Set();
		}
		// 画像URL-SET
		private function loadImage_Url_Set():void {
			//画像URL 実際の大きさ465x350
			imageUrls = [
				"/main/images/cat11m.jpg",
				"/main/images/cat12m.jpg",
				"/main/images/cat13m.jpg",
				"/main/images/cat14m.jpg",
				"/main/images/cat15m.jpg",
				"/main/images/cat16m.jpg",
				"/main/images/cat17m.jpg",
				"/main/images/cat18m.jpg",
				"/main/images/cat19m.jpg",
				"/main/images/cat20m.jpg"
			];
			//画像説明文
			imageMess = [
				"画像説明 1",
				"画像説明 2",
				"画像説明 3",
				"画像説明 4",
				"画像説明 5",
				"画像説明 6",
				"画像説明 7",
				"画像説明 8",
				"画像説明 9",
				"画像説明 10"
			];
			//カウント
			countImage = 0;
			//画像数
			photomax = imageUrls.length;
			//LOADING表示
			indicator.visible = true;
			//GOTO-loadImage
			loadImage();
		}
		// 画像をロード
		private function loadImage():void {
			//
			loader = new Loader();
			var imageName:String = imageUrls[countImage];
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete_img);//
			loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);//Error
			loader.load(new URLRequest(imageName));//loader
		}
		private function onComplete_img(event:Event):void {
			loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete_img);
			tf.text = "画像読み込み中";
			
			//Matrixを使用
			var mainloader:Loader = event.currentTarget.loader;
			var ratio:Number = image_W / loader.width;//縮尺比率
			var matrix:Matrix = new Matrix();
			matrix.scale(ratio, ratio);
			var bd2:BitmapData = new BitmapData(image_W, image_H, false);
			bd2.draw(mainloader, matrix);//Matrixを適応
			mainImages.push(bd2);
			
			//サムネール用にLoaderを用意する
			var cliploader:Loader = event.currentTarget.loader;//onComplete(event:Event)を参照する
			//loaderのBitmapを縮小操作する/BitmapDataを直接縮小操作できないから
			var thumb_bitmap:Bitmap = Bitmap(cliploader.content) as Bitmap;
			thumb_bitmap.width = thumb_W;//64
			thumb_bitmap.height = thumb_H;//48
			
			//BitmapData化
			//BitmapDataを得る1/縮小されている
			var bd:BitmapData = new BitmapData(thumb_W, thumb_H, false);
			//縮小操作したloaderをBitmapData容器に流しこむ
			bd.draw(cliploader);
			//サムネール用Spriteを挿入BitmapDataを流しこむ
			var thumbbox:Sprite = createSquare(0, 0, thumb_W, thumb_H, 0x000000, 1);
			thumbbox.graphics.clear();
			thumbbox.graphics.beginBitmapFill(bd);
			thumbbox.graphics.drawRect(0, 0, thumb_W, thumb_H);
			thumbbox.graphics.endFill();
			//保存
			thumbs.push(thumbbox);
			countImage ++;
			
			//全て読み込んだらinitにまだなら残り画像をロードする
			if (countImage >= photomax) {
				//LOADING非表示
				indicator.visible = false;
				//画像をロード終了goto-init
				init();
			} else {
				//残り画像をLoad
				loadImage();
			}
		}
		// INIT
		private function init():void {
			//init
			tf.text = "";
			//画像数再セット
			photomax = mainImages.length;
			var i:int = 0;
			//make_Menu
			make_Menu();
			//goto-main
			main_action();
			//最初の画像を表示
			show_Image(0);
		}
		
		//make_Menu addChild
		//注意、menu_baseにはサムネール以外をaddChildしないこと
		private function make_Menu():void
		{
			var px:Number = 10;
			var py:Number = 10;
			var pw:Number = menu_base.width - (thumb_W + 2 + 10);
			for (var i:int = 0; i < photomax; ++i) {
				//
				thumbs[i].x = px;
				thumbs[i].y = py;
				menu_base.addChild(thumbs[i]);
				px += thumb_W + 2;
				if (px > pw) { px = 10; py += thumb_H + 2; }
				//alpha
				thumbs[i].alpha = 0.5;
				//サムネール mouseOver-Listener
				thumbs[i].addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
				//サムネール mouseOut-Listener
				thumbs[i].addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
				//サムネール CLICK-Listener
				thumbs[i].addEventListener(MouseEvent.CLICK, mouseClickHandler);
			}
		}
		
		// MAIN-ACTION
		private function main_action():void {
			
			//main_action as3 hear
			var msg:String="POPS WEB KOUBOU";
			var mvtextColor:uint;
			var nAngle:Number = Math.PI * 2 / msg.length;
			var cAngle:Number = 0;
			//TextFormat
			var tfm:TextFormat = new TextFormat("_sans", 40, 0x666666, true);
			mvtf.defaultTextFormat = tfm;
			mvtf.autoSize = TextFieldAutoSize.LEFT;
			mvtf.text = msg;//msg.substr(i, 1)
			mvtf.textColor = 0x000000;
			mvtf.selectable = false;
			//個別に着色
			for (var i:int = 0; i < msg.length; ++i) {
				//虹色にそめる
				var hsv:ColorHSV = new ColorHSV(0, 1, 1, 1);
				hsv.h = cAngle / Math.PI * 180;
				//虹色を取得受け渡す
				mvtextColor = hsv.value;
				cAngle += nAngle;
				var tfm2:TextFormat = new TextFormat();
				tfm2.color = mvtextColor;
				mvtf.setTextFormat(tfm2, i);
			}
			//位置の確定
			mvtf.x = (stage.stageWidth - mvtf.width) / 2;
			mvtf.y = (stage.stageHeight - mvtf.height) / 2;
			//Fade-Out
			TweenMax.to(mvtf, 2, { delay:10, alpha:0, onComplete:function ():void {
				mvtf.y = -200;
				mvtf.visible = false;
			}});
			//
		}
		
		//show-image
		private function show_Image(no:int):void
		{
			//active
			active_no = no;
			//サムネールprivate透明度変更
			var i:int = 0;
			for (i = 0; i < photomax; ++i) {
				//private
				if (i == no) {thumbs[i].alpha = 1;}
				else {thumbs[i].alpha = 0.5;}
			}
			
			//画像説明文
			//tf.text = " 番号 " + no + " / URL " + imageUrls[no];
			tf.text = imageMess[no];
			
			//mainImageBox/MovieClip
			//画像表示用/layer1流し込み/bitmapData
			//MatrixでbeginBitmapFillをずらすと画像の中心補正が出来る
			var matrix:Matrix = new Matrix();
			matrix.translate( -image_W / 2, -image_H / 2);//-方向移動
			mainImageBox.graphics.clear();
			//select_noに注意
			mainImageBox.graphics.beginBitmapFill(mainImages[no], matrix, false, false);
			//xy位置もマイナス方向になる
			mainImageBox.graphics.drawRect( -image_W / 2, -image_H / 2, image_W, image_H);
			mainImageBox.graphics.endFill();
			
			mainImageBox.width = image_W;
			mainImageBox.height = image_H;
			
			//現在表示番号に代入
			show_no = no;
			
			//'Blinds','Fade','Fly','Iris','Photo','PixelDissolve','Rotate','Squeeze','Wipe','Zoom'	
			//None.easeNone/Elastic.easeOut/Strong.easeOut/Strong.easeInOut/Bounce.easeOut
			//全てIN
			
			var duration:Number = 1.5;//速度1-2
			//設定条件
			var numStrips:int = (Math.random() * 12) + 1;//1-12分割
			var dimension:int = Math.random() * 2;//1 0 分割縦横
			var startPoint:int = (Math.random() * 9) + 1;//位置
			//shape ccw
			var shape_v:int = Math.random() * 2;
			var shape:Object = Iris.SQUARE;//四角 丸
			var ccw:Boolean = false;//回転方向
			//競合しないので2種の鑑定にしようする
			if(shape_v) { shape = Iris.CIRCLE; ccw = true; }
			//easing
			var easing_v:int = Math.random() * 3;
			var easing:Object = Bounce.easeOut;
			if(easing_v == 0) { easing = None.easeNone; }
			if (easing_v == 2) { easing = Regular.easeOut; }//Regular Elastic
			
			//Function認識しない/AS3ではClassにしなければならない
			var transitionType:Class;
			var trans_no:int = 1 + Math.random() * 20;//1-20
			var no_flag:int = 0;//一部判定のフラグ
			
			//分岐、このように記述しないと認識しない、中には変化なしのものもあり
			//Fade PixelDissolve の場合 easingはないほうが良い
			if (trans_no < 2) {transitionType = Zoom;}//1
			if (trans_no == 2) {transitionType = Fade; easing = None.easeNone;}
			if (trans_no == 3) { transitionType = Photo; }
			if (trans_no == 4) { transitionType = Rotate; }
			if (trans_no == 5 || trans_no == 6) { transitionType = PixelDissolve; easing = None.easeNone; no_flag = 1; }
			if (trans_no == 7 || trans_no == 8) {transitionType = Squeeze;}
			if (trans_no == 9 || trans_no == 10) {transitionType = Fly;}
			if (trans_no == 11 || trans_no == 12 || trans_no == 13) {transitionType = Iris;}
			if (trans_no == 14 || trans_no == 15) {transitionType = Wipe;}//startPoint 5 でも動く
			if (trans_no > 15) { transitionType = Blinds; }
			
			//PixelDissolveの場合だけの処理
			if (no_flag) {
				//PixelDissolveの縦横分割数/変化をつける
				var xySection_v:int = Math.random() * 5;
				var xyS_v2:int = 1 + Math.random() * 4;
				//正方形にちかずける/10 20 30 40の正方形
				var xSections:int = int(image_W / (10 * xyS_v2));//10-40の正方形
				var ySections:int = int(image_H / (10 * xyS_v2));
				//ランダム分割/2x2以上、ばらばらな大きさ、あまり小さくしない
				if (xySection_v > 3 ) {
					xSections = 2 + Math.random() * 8;
					ySections = 2 + Math.random() * 5;
				}
			}
			
			//var transitionType:Class = PixelDissolve;
			var myTransitionManager:TransitionManager = new TransitionManager(mainImageBox);
			//Listener
			myTransitionManager.addEventListener("allTransitionsInDone", doneTrans);
			//start
			myTransitionManager.startTransition({type:transitionType, direction:Transition.IN, duration:duration, easing:easing, startPoint:startPoint, numStrips:numStrips, dimension:dimension, shape:shape, xSections:xSections, ySections:ySections, ccw:ccw});
			//
		}
		
		//TransitionManager-Listener
		private function doneTrans(e:Event):void {
			//back画像を描画する
			//Matrixはなし
			backImageBox.graphics.clear();
			backImageBox.graphics.beginBitmapFill(mainImages[show_no], null, false, false);
			//xy位置00
			backImageBox.graphics.drawRect(0, 0, image_W, image_H);
			backImageBox.graphics.endFill();
			//tf.text = "allTransitionsInDone event occurred";
		}
		
		//サムネールClickEvent
		private function mouseClickHandler(e:MouseEvent):void {
			//currentTargetの位置番号を取得
			var no:int = menu_base.getChildIndex(e.currentTarget as DisplayObject);
			show_Image(no);
		}
		//サムネールmouseOver
		private function mouseOverHandler(event:MouseEvent):void
		{
			//currentTargetの位置番号を取得
			var no:int = menu_base.getChildIndex(event.currentTarget as DisplayObject);
			thumbs[no].alpha = 1;
		}
		//サムネールmouseOut
		private function mouseOutHandler(event:MouseEvent):void
		{
			//currentTargetの位置番号を取得
			var no:int = menu_base.getChildIndex(event.currentTarget as DisplayObject);
			//サムネールprivate番号なら処理しない
			if (active_no != no) {
				thumbs[no].alpha = 0.5;
			}
		}
		
		//TextLayer
		private function openTextLayer(e:MouseEvent):void {
			textlayer.visible = true;
			menu_base.visible = true;
		}
		private function closeTextLayer(e:MouseEvent):void {
			textlayer.visible = false;
			menu_base.visible = false;
		}
		
		//ERROR画像取得失敗
		private function ioErrorHandler(event:IOErrorEvent):void {
			
			//ERROR処理
			tf.text = "LOADING-EROOR";
			//画像取得失敗の場合には、画像かわりのBitmapDataを挿入
			var bd2:BitmapData = new BitmapData(image_W, image_H, false, 0x333333);
			//No-Imageの文字を挿入
			var t:TextField = new TextField();
			var tfm:TextFormat = new TextFormat("_sans", 40, 0x888888, true);
			t.defaultTextFormat = tfm;
			t.autoSize = TextFieldAutoSize.LEFT;
			t.text = "No-Image";
			var matrix:Matrix = new Matrix();
			matrix.translate((image_W - t.width) / 2, (image_H - t.height) / 2);
			bd2.draw(t, matrix);
			//BitmapDataの保存
			mainImages[countImage] = bd2;
			
			//サムネール用空Spriteを挿入
			var thumbbox:Sprite = createSquare(0, 0, thumb_W, thumb_H, 0x000000, 1);
			thumbs[countImage] = thumbbox;
			
			//画像ERRORならカウントをすすめて次ぎ画像ロードに進む
			countImage ++;
			loadImage();
		}
		
		//create-GradBox
		private function draw_grad_box(w:uint, h:uint, color1:uint, color2:uint):Sprite {
			var gb:Sprite = new Sprite();
			var colors:Array = [color1, color2];
			var alphas:Array = [1, 1];
			var ratios:Array = [0, 255];
			var matrix:Matrix = new Matrix();
			matrix.createGradientBox(w * 1.5, h * 1.5, 0, -w * 0.25, -h * 0.25);
			gb.graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, matrix, SpreadMethod.PAD, InterpolationMethod.RGB, 0);
			gb.graphics.drawRect(0, 0, w, h);
			gb.graphics.endFill();
			//addChild(gb);
			return gb;
		}
		//create-box
		private function createSquare(x:Number, y:Number, width:Number, height:Number, color:Number, alpha:Number):Sprite {
			var s:Sprite = new Sprite();
			s.graphics.beginFill(color, alpha);
			s.graphics.drawRect(x, y, width, height);
			s.graphics.endFill();
			//addChild(s);
			return s;
		}
		//create-Roundbox
		private function createSquare2(x:Number, y:Number, width:Number, height:Number, color:Number, alpha:Number, round:Number):Sprite {
			var rs:Sprite = new Sprite();
			rs.graphics.beginFill(color, alpha);
			rs.graphics.drawRoundRect(x, y, width, height, round);
			rs.graphics.endFill();
			//addChild(rs);
			return rs;
		}
		//create-text
		private function createTextField(x:Number, y:Number, width:Number, height:Number):TextField {
			var result:TextField = new TextField();
			result.x = x;
			result.y = y;
			result.width = width;
			result.height = height;
			//addChild(result);
			return result;
		}

		//LOADING回転
		private function step(evt:Event):void {
			indicator.rotation = (indicator.rotation + 360 / stage.frameRate) % 360;
		}
		//FullScreenBtn CLICK
		private function fullClickHandler(e:MouseEvent):void {
			stage.displayState = (StageDisplayState.FULL_SCREEN==stage.displayState)?StageDisplayState.NORMAL:StageDisplayState.FULL_SCREEN
		}
		//FullScreenButton
		private function createFullScreenButton():Sprite {
			// 画面右下にボタン配置(YouTube風)
			var margin:Number = 10;
			var b:Sprite = new Sprite();
			b.graphics.lineStyle();
			b.graphics.beginFill(0x4d4d4d);
			b.graphics.drawRoundRect(7, 5, 21, 14, 3);
			b.graphics.beginFill(0xc1c1c1);
			b.graphics.drawRoundRect(8, 6, 10, 6, 2);
			b.graphics.endFill();
			b.buttonMode = true;
			return b;
		}
		
	}
	
}

//LOADING-Shape
import flash.display.Shape;
class Indicator extends Shape {
	public function Indicator() {
		var i:uint,
		cx:Number, cy:Number,
		numNeedles:uint = 12,
		innerR:Number = 7,
		outerR:Number = 5,
		cAngle:Number = -Math.PI / 2,
		nAngle:Number;

		nAngle = Math.PI * 2 / numNeedles;
		for (i=0; i<numNeedles; i++) {
			cAngle += nAngle;
			cx = Math.cos(cAngle) * innerR;
			cy = Math.sin(cAngle) * innerR;
			graphics.moveTo(cx, cy);
			
			cx = Math.cos(cAngle) * outerR;
			cy = Math.sin(cAngle) * outerR;
			graphics.lineStyle(2, 0xffffff, i/numNeedles);
			graphics.lineTo(cx, cy);
		}
	}
}


エラー処理で代替画像を作らない場合の例

次ぎの箇所を書き換えると、画像の読み込みに失敗した場合、代替画像およびサムネールを作りません。その分、サムネールの数は少なくなります。



1.変数配列の追加

---------------------------------------------------
//画像の説明文の保存
private var imageMess:Array = [];
追加する
private var imageMess2:Array = [];

---------------------------------------------------

2.保存の方式を変える、次のように変更

private function onComplete_img(event:Event):void {

	途中省略

	//保存
	thumbs.push(thumbbox);

	追加する、一旦imageMess2に保存して、あとですりかえる

	imageMess2.push(imageMess[countImage]);

	countImage ++;
			
	//全て読み込んだらinitにまだなら残り画像をロードする
	if (countImage >= photomax) {

		追加する、すりかえる処理
		imageMess=[];
		imageMess=imageMess2;

		//LOADING非表示
		indicator.visible = false;
		//画像をロード終了goto-init
		init();
	} else {
		//残り画像をLoad
		loadImage();
	}
}

---------------------------------------------------

3.代替画像を作っている箇所を削除

//ERROR画像取得失敗
private function ioErrorHandler(event:IOErrorEvent):void {

	下の部分だけを残し、削除する

	//画像ERRORならカウントをすすめて次ぎ画像ロードに進む
	countImage ++;
	loadImage();
}


画像は、Wonderfl さんのものを再利用しました。色々学習しているとたまちゃう。


当方の参考記事 FLASH-SLIDESHOW-3

【参考】: FLASH-SLIDESHOW-3


以上です。



[ この記事のURL ]


 

ブログ記事一覧



[1]