2010年1月6日 星期三

[AS2]Flash的影格做亂數撥放,且不重覆

[AS2]Flash的影格做亂數撥放,且不重覆
@ 也是解答知識+提問
http://tw.knowledge.yahoo.com/question/question?qid=1009123003165
Flash的影格可以做到亂數撥放嗎?
@ 其實應該說是-->Flash的影格做亂數跳躍,且不重覆......而其需求是為了在每一影格放置評量題,並達到亂數出題的機制.




第一影格AS2
stop();
//假設從第一影格開始的每一連續關鍵影格,都有一個評量題.
//num: 影格之數量
//若只要展示1~8個影格的內容,就設成 var num:Number = 8; 即可
var num:Number = 10;
//用來被取出和移除元素之陣列
var mcNumArr:Array = new Array();
for (var i:Number = 1; i<=num; i++) {
 mcNumArr[i] = i;
}
//亂數取出後存放之陣列
var index:Array = new Array();
//clickCount : 點擊次數之累加變數
var clickCount:Number = 0;
//呼叫getRandom(),取得一輪的亂數排序
getRandom();
//根據第一輪亂數裡的第一個亂數,跳至相對應影格
//frameNum動態文字欄位:顯示目前所在影格數
//qNum動態文字欄位:顯示累計目前正在答題數
//order動態文字欄位:顯示亂數答題順序記錄
this.gotoAndStop(index[1]);
frameNum.text = index[1];
qNum.text = 1;
clickCount++;
order.text+=index[1]+"、";
//按鈕事件函式,累加點擊次數;
//滿一輪時clickCount設回1,呼叫resetArr()重設mcNumArr陣列元素;呼叫getRandom()再次取得新的一輪的亂數排序
play_mc.onRelease = function() {
 if (clickCount   clickCount++;
  this.gotoAndStop(index[clickCount]);
  frameNum.text = index[clickCount];
  qNum.text = clickCount;
  order.text+=index[clickCount]+"、";
 }

};
//replay為重新作題按鈕
replay.onRelease=function(){
 clickCount = 0;
 qNum.text = 0;
 frameNum.text = "";
 resetArr();
    getRandom();
 order.text = "";
}
//亂數產生,取出mcNumArr陣列元素,存入index陣列,刪除已取出之mcNumArr陣列元素---> 取得一輪的亂數排序,存入index陣列
function getRandom() {
 for (var i = 1; i<=num; i++) {
  var rad:Number = Math.floor(Math.random()*(mcNumArr.length-1))+1;
  trace("rad: "+rad);
  trace("mcNumArr.length-1: "+(mcNumArr.length-1));
  index[i] = mcNumArr[rad];
  trace("index["+i+"]: "+index[i]);
  mcNumArr.splice(rad, 1);
 }
}
//每一輪點擊後,重設mcNumArr陣列之元素
function resetArr(){
 for (var i:Number = 1; i<=num; i++) {
  mcNumArr[i] = i;
 }
}
SWF預覽
http://sites.google.com/site/terfict3/home/990101_as2_random2Frame.swf



FLA下載
http://sites.google.com/site/terfict3/home/990101_as2_random2Frame.fla

沒有留言: