アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のように決まった画像を読み込むスクリプトを現在使用しています。
フラッシュを開く毎に20枚程度の画像の中からランダムに7枚選んで表示させたいのですが、ここから修整するにはどのように考えたら良いのでしょうか?
現在はまったく固定の画像を読み込んでいるだけなのでいいのですが、、。


// 写真のURLを保存する配列
var photoArr:Array
// 写真を自動的に変更するタイマー
var imageTimer:Timer;
// 大きな画像を読み込むローダー
var bigImageLoader:Loader;
// 現在表示されている画像の番号
var imageNum:Number = 0;

//--------------------------------
// 初期化の処理
//--------------------------------
// 配列を設定する
photoArr = new Array();
photoArr[0] = "b00.jpg";
photoArr[1] = "b01.jpg";
photoArr[2] = "b02.jpg";
photoArr[3] = "b03.jpg";
photoArr[4] = "b04.jpg";
photoArr[5] = "b05.jpg";
photoArr[6] = "b06.jpg";

// タイマーを起動
startTimer();

// サムネイルを表示
setThumbnail();

// 大きな画像を読み込む
loadImage();


//--------------------------------
// 関数
//--------------------------------

// サムネイルを並べる
function setThumbnail() {
for (var i=0; i<photoArr.length; i++) {
// MovieClipを並べる
var mc:Thumbnail = new Thumbnail();
mc.y = i * 74;

mc.mouseChildren = false;
mc.addEventListener(MouseEvent.CLICK, onThumbnailClick);
mc.buttonMode = true;
mc.num = i;

thumbnailTarget.addChild(mc);
// サムネイル画像をロードする

var loader:Loader = new Loader();
var url = "gallery_img/"+photoArr[i];
var urlRequest = new URLRequest(url);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onThumbnailLoad);
loader.load(urlRequest);
loader.x = 4;
loader.y = 17;
mc.addChild(loader);

}
}

// タイマーをスタートする
function startTimer() {
imageTimer = new Timer(8000, 0);
imageTimer.start();
imageTimer.addEventListener(TimerEvent.TIMER, onTimerCalled);
}

// 大きな画像を読み込む
function loadImage() {
// サムネイルの背景色を変える
for (var i=0; i<photoArr.length; i++) {
var mc = thumbnailTarget.getChildAt(i+1);
if (i == imageNum) {
mc.gotoAndStop(2);
mc.scaleX = 1.1;
mc.scaleY = 1.1;
} else {
mc.gotoAndStop(1);
mc.scaleX = 1;
mc.scaleY = 1;
}
}
// 表示されている画像を消す
if (bigImageLoader != null) {
mainTarget.removeChild(bigImageLoader);
}
// 新しい画像を読み込む
var url = "gallery_img/"+photoArr[imageNum];
var req = new URLRequest(url);
bigImageLoader = new Loader();
bigImageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoad);
bigImageLoader.load(req);
mainTarget.addChild(bigImageLoader);
}


//--------------------------------
// イベント
//--------------------------------

// サムネイルが押されたら実行される
function onThumbnailClick(eventObj) {
imageNum = eventObj.target.num;
loadImage();
imageTimer.stop();
imageTimer.start();
}

// サムネイルがロードされたら実行される
function onThumbnailLoad(eventObj) {
var mc = eventObj.target.loader;
mc.width = 80;
mc.height = 55;
}

// タイマーが呼ばれるたびに実行される
function onTimerCalled(eventObj) {
imageNum++;
if (imageNum >= photoArr.length) {
imageNum = 0;
}
// 大きな画像を読み込む
loadImage();
}

// 大きな画像が読み込まれたら実行される
function onImageLoad(eventObj) {
//
bigImageLoader.alpha = 0;
stage.addEventListener(Event.ENTER_FRAME, onFadeIn);
}

//
function onFadeIn(eventObj) {
// フェードインをつける
bigImageLoader.alpha += 0.05;
if (bigImageLoader.alpha >= 1) {
removeEventListener(Event.ENTER_FRAME, onFadeIn);
}
}

A 回答 (1件)

えらく長いスクリプトを書かれていらっしゃいますし


動作検証などはしてみていませんが
結局のところ
「最初の配列「photoArr」の 要素[0]~[6] に
用意した 20枚 の画像のうちの 7枚 をランダムに入れれば良い。」
というだけのことでしょう?

そうでしたら
最初の部分を次のようにすれば良いと思います。

//===========================================
// 元の全画像URLを保存する配列
var sourceArr:Array;
// 表示する写真のURLを保存する配列
var photoArr:Array;

//~数行略~

//--------------------------------
// 初期化の処理
//--------------------------------

// 元の全画像URLの配列を設定する
sourceArr = new Array();
sourceArr[0]="b00.jpg";
sourceArr[1]="b01.jpg";
sourceArr[2]="b02.jpg";
sourceArr[3]="b03.jpg";
sourceArr[4]="b04.jpg";
sourceArr[5]="b05.jpg";
sourceArr[6]="b06.jpg";
sourceArr[7]="b07.jpg";
sourceArr[8]="b08.jpg";
sourceArr[9]="b09.jpg";
sourceArr[10]="b10.jpg";
sourceArr[11]="b11.jpg";
sourceArr[12]="b12.jpg";
sourceArr[13]="b13.jpg";
sourceArr[14]="b14.jpg";
sourceArr[15]="b15.jpg";
sourceArr[16]="b16.jpg";
sourceArr[17]="b17.jpg";
sourceArr[18]="b18.jpg";
sourceArr[19]="b19.jpg";

// 表示する7枚の画像URLの配列を作成する
photoArr = new Array();
for (var i:int=0; i<7; i++) {
//配列 sourceArr からランダムな要素を1つ抜き取って
//配列 photoArr の 要素[i] に代入
photoArr[i]=sourceArr.splice(Math.floor(Math.random()*sourceArr.length),1);
}

//「ムービープレビュー」時検証用(本来は不要)
trace(photoArr);

//~以下略~

//===========================================



現在作成されているものは一時置いておいて,
新規ドキュメントを作成して
上のスクリプトをフレーム1に書き(コピペし),
「制御」→「ムービープレビュー」すると,即動作確認できると思います。
    • good
    • 0
この回答へのお礼

早々にありがとうございます!
助かりました!

お礼日時:2011/07/21 09:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!