Sebenarnya, memuat data eksternal dari file .txt ke dalam movie Flash sudah tidak disarankan, selain tidak begitu terstruktur, teksnya juga tidak enak dilihat dan susah diedit. Tutorial ini soal kuis Flash dengan teks eksternal (.txt) sebagai bank soal untuk mereka yang masih ingin tahu bagaimana me-load teks eksternal ke dalam Flash. Bukan hanya itu, pertanyaannya dibuat secara random, memunyai skor, dan memberi timer.
Silakan tes IQ Anda dengan kuis berikut ini. Waktu yang diberikan hanya 10 detik. Pertanyaannya hanya 3 yang dirandom dan diambil dari 5 pertanyaan di bank soal.
Pertama, buat bank soal dalam file .txt. Untuk contoh kuis ini, file "banksoal.txt" berisi:
jlhSoal=3
&soal0=Ini dibuat dari apa sih??&jwbA0=Flash&jwbB0=Kacang&jwbC0=Kecap&jwbD0=Anjing&valid0=A
&soal1=Hari ini Hari Apa?&jwbA1=Senin&jwbB1=Apa&jwbC1=Tau!&jwbD1=Selasa&valid1=B
&soal2=Monyet!&jwbA2=Apa? Kurang Ajar!&jwbB2=Kamu&jwbC2=Saya!&jwbD2=Ga mutu&valid2=C
&soal3=1+1=? ?&jwbA3=Hahaha&jwbB3=Saya tau&jwbC3=Males Jawabnya&jwbD3=2&valid3=D
&soal4=1002x3494+15:21?&jwbA4=5234&jwbB4=Gak tau&jwbA4=Serius amat sih&jwbB4=4apaanB&valid4=B
Aslinya, tidak ada baris baru dalam file, semua teks menyambung dan hanya dipisahkan tanda "&". Jika meng-copy paste teks di atas, pastikan semua teks dalam satu baris (di Notepad, cek memakai "Word Wrap"). Seperti terlihat di atas, strukturnya adalah: Jumlah soal (jlhSoal) --> ini urutan soal yang akan dirandom dari bank soal. Nantinya, urutan ke-2 bisa jadi muncul sebagai pertanyaan pertama. Kemudian ada pertanyaan ("soal"), kemudian jawaban A, B, C, D (jwbA) yang semuanya diurutkan dari 0, 1, ... 4 Dan yang terpenting adalah variabel "valid" di ujung setiap soal. Kita memberitahu Flash mana jawaban yang benar. Misalnya "valid2=B", berarti untuk soal nomor 3 (Flash memulai dari 0), jawabannya yang benar adalah "B".
Buka Flash Anda, rekomendasi Flash 8 (CS3 juga oke asal publish ke player di bawahnya). Buat layer-layer seperti gambar ini:
Layer "bg" berisi background kuis. Terserah Anda mau dibuat seperti apa. Layer "kuis" berisi dynamic text bernama "tekssoal", tentukan besar font dan warnanya. Jangan lupa pilih opsi "multiline". Di bawahnya ada 4 radio button tanpa label bernama instance "satu", "dua", "tiga", "empat". Di sebelah kanan setiap radio button ini ada 4 dynamic text bermana instance "jwb1", "jwb2", "jwb3", dan "jwb4". Di bawahnya ada tombol "next_btn".
Properti lain di layer kuis adalah dynamic text untuk skor dengan nama variabel "skor", kemudian keterangan pertanyaan dengan variabel "nomor" dan "jumlah". Ini untuk menampilkan "Pertanyaan xxx dari yyy". Juga ada movieclip "bener" dan "salah" yang isinya 15 frame dengan stop(); di frame pertama. Frame kedua berisi animasi saat jawaban benar/salah. Silakan isi animasinya selain kata "BETOOOL" atau "SALAH" seperti demo di atas.
Layer "hasil" berisi dua keyframe di ujung. Frame ke-20 adalah layer selesai menjawab semua soal, yang berisi dynamic text dengan variabel "Hasil" serta button "Ulangi". Di frame ke-21 layer untuk "gagal" ketika waktu habis. Kedua button itu akan mengembalikan Flash ke frame pertama dengan kode: namabutton.onRelease=function() { _root.gotoAndPlay(1); }
Layer timer berisi movieclip bernama instance "waktu". Isinya dynamic text dengan variabel "time". Jumlah frame "waktu" adalah 24 frame sesuai fps swf dengan kode _root.time--; di frame ke-24. Jadi, setiap 24 frame selesai, time akan berkurang satu. Di _root, kita deklarasikan "var time=10" untuk memberi waktu kuis 10 detik.
Layer "as" berisi actionscript seperti ini:
stop();
//definisi variabel
var banksoal = new LoadVars();
var acakArray:Array;
var z = 0;
var score = 0;
var time = 10;
satu.enabled = true;
dua.enabled = true;
tiga.enabled = true;
empat.enabled = true;
next_btn.enabled = true;
skor = 0;
//load bank soal
banksoal.load("banksoal.txt");
banksoal.onLoad = function(sucess) {
if (sucess) {
_root.acakArray = _root.sekuensAcak(banksoal.jlhSoal);
_root.soalNext();
}
};
//generate sekuen untuk random nomor soal tanpa pengulangan
//-------------------------------------------------------
function sekuensAcak(nomer:Number):Array {
var acakArray = new Array(nomer);
var noAcak, noTambah, noSimpan;
noTambah = nomer-1;
for (var i = 0; i<nomer; i++) {
acakArray[i] = i;
}
while (noTambah>0) {
noAcak = random(noTambah);
noSimpan = acakArray[noTambah];
acakArray[noTambah] = acakArray[noAcak];
acakArray[noAcak] = noSimpan;
noTambah--;
}
return acakArray;
}
//Generate soal berikutnya
function soalNext() {
if (z<acakArray.length) {
tekssoal.text = banksoal["soal"+acakArray[z]];
jwb1.text= banksoal["jwbA"+acakArray[z]];
jwb2.text= banksoal["jwbB"+acakArray[z]];
jwb3.text= banksoal["jwbC"+acakArray[z]];
jwb4.text= banksoal["jwbD"+acakArray[z]];
satu.selected = false;
dua.selected = false;
tiga.selected = false;
empat.selected = false;
z++;
nomor = z;
jumlah = banksoal.jlhSoal;
} else {
satu.selected = false;
dua.selected = false;
tiga.selected = false;
empat.selected = false;
satu.enabled = false;
dua.enabled = false;
tiga.enabled = false;
empat.enabled = false;
next_btn.enabled = false;
tekssoal.text = "";
gotoAndPlay(2);
//jika array sudah selesai dimainkan play frame berikutnya sehingga muncul hasil. Agar hasil tidak seketika muncul setelah menjawab, kita membuat Flash memainkan frame 2-19 sebelum hasil muncul.
}
}
//fungsi untuk membandingkan hasil klik dengan variabel jawaban di bank soal, jika cocok, kasih skor dan mainkan movie bener dan sebaliknya
function evaluate() {
if (satu.selected) {
if (banksoal["valid"+acakArray[z-1]] == "A") {
score += 10;
skor= score;
trace(skor);
bener.play();
} else {
score -= 10;
skor = score;
salah.play();
}
soalNext();
return;
}
if (dua.selected) {
if (banksoal["valid"+acakArray[z-1]] == "B") {
score += 10;
skor= score;
bener.play();
} else {
score -= 10;
skor= score;
salah.play();
}
soalNext();
return;
}
if (tiga.selected) {
if (banksoal["valid"+acakArray[z-1]] == "C") {
score += 10;
skor= score;
bener.play();
} else {
score -= 10;
skor= score;
salah.play();
}
soalNext();
return;
}
if (empat.selected) {
if (banksoal["valid"+acakArray[z-1]] == "D") {
score += 10;
skor= score;
bener.play();
} else {
score -= 10;
skor= score;
salah.play();
}
soalNext();
return;
}
}
//kode untuk timer. jika waktu habis, reset time dan ke layer "gagal"
waktu.onEnterFrame=function() {
if (_root.time==0) {
_root.gotoAndPlay(21);
_root.time =0;
}
}
//fungsi membandingkan hasil dijalankan saat tombol ditekan
next_btn.onRelease=function () {
evaluate();
}