幸好,有另一間學校申請,就是跟屯門相距九千里的鴨脷洲的某小學。
去年,為了團契聚會內做了一個小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。
很好的scrtip
ReplyDelete不過最難明白都係++呢類東西,我都唔係好知點用。
請問 why 用 input text field ?
ReplyDelete因為我想給同學看,random時沒有重覆。
ReplyDelete你是否想問這個?