Flash random, use XML

又一年了。去年的這段時間,為了去屯門某學校的學生團契忙碌。今年,給人拒絕,因負責老師是非基督徒。

幸好,有另一間學校申請,就是跟屯門相距九千里的鴨脷洲的某小學。

去年,為了團契聚會內做了一個小flash,就是random抽同學名。第一次的random有重複,比較不方便,可參考:[Flash]隨機抽人名。兩個月之後,就做了[Flash]真正random,不用重覆。

兩個都有缺點,就是要在flash內改,沒有flash就不了同學名。我有flash,但如即場有同學沒有參加聚會,也是改不用,所以一直想用xml。

我曾在某flash論壇問過高手,高手的回應,當時看不明白;近日再重看,好像又明多一點點。

終於成功了。

先建立一個人名的name.xml。

<?xml version="1.0" encoding="big5"?>
<tree>
<node label="4A:大頭文">
<node label="4A:小小明">
</tree>


之後在flash:

name_txt:動態文字之實體名稱
list_txt:多行輸入文字之實體名稱
random_btn:按鈕之實體名稱

stop();
var ranCount:Number = 0;
var ranStr:String = '';
function random2(num) {
var d;
if (num<=1) { return 0; } if (ranCount>=num) {
ranCount = 0;
ranStr = '';
}
d = (getTimer()+random(num)) % num;
while (ranStr.indexOf(''+d+'')>=0) {
d = (getTimer()+random(num)) % num;
}
ranCount++;
ranStr += ''+d+'';
return d;
}

var aName = new Array();
var aTotal:Number = 0;

function choiceOne() {
var d;
if (aTotal>0) {
d = random2(aTotal);
name_txt.text = aName[d]['label'];
list_txt.text += name_txt.text+chr(13);
}
}

System.useCodepage = true;
treeXML = new XML();
treeXML.ignoreWhite = true;
treeXML.load("name.xml");
treeXML.onLoad = function(success) {
if (success) {
var node = this.firstChild.firstChild;
aTotal = 0;
aName.splice(0, aName.length);
while (node != null) {
var obj = new Object();
obj['label'] = node.attributes.label;
aName.push(obj);
aTotal++;
node = node.nextSibling;
}

choiceOne();
}
};
random_btn.onRelease = function() {
choiceOne();
};

下載參考demo

3 comments:

  1. 很好的scrtip
    不過最難明白都係++呢類東西,我都唔係好知點用。

    ReplyDelete
  2. 請問 why 用 input text field ?

    ReplyDelete
  3. 因為我想給同學看,random時沒有重覆。

    你是否想問這個?

    ReplyDelete

「有人看這日比那日強;有人看日日都是一樣。只是各人心裡要意見堅定。」(聖經.羅馬書14:5)