Miniespana

Verilerin TXT Dosyasından Yüklendiği Quiz Hazırlamak

Verilerin TXT Dosyasından Yüklendiği Quiz Hazırlamak

Tüm verilerin haricen yüklendiği ve güncelleme için fla dosyasına dokunulmayacak bir çalışma hazırlamanın doğru yolu asp veya php`den yararlanmaktır. Bu destek serverda yoksa veya bu tür bir dosya bulunamıyorsa xml mükemmel bir çözümdür.Xml de olmasın diyorsanız geri kalan tek seçenek txt dosyasından veri yüklemektir.

Txt dosyasından veri yüklemek istediğinizde çok kısıtlı şartları kullanmak zorunda olacağınızı bilmeniz gerekir.Çünkü yapacağınız her işlem flash kodları ile olacaktır ve bu kodlar herzaman yeterli gelmeyebilir.

Çalışmamızın özellikleri şöyledir:

1- Tüm veriler txt dosyasından yüklenmektedir ve fla dosyasını açmadan soru sayısını azaltabilir, çoğaltabilir veya tamamen değiştirebilirsiniz.

2- Süre sınırlaması yapabilirsiniz ve zamanı txt dosyasından ayarlayabilirsiniz.Zaman bitiminde sonuçlar butonuna basmadan otomatik olarak flash sonuçlar sayfasına atlar. Çalışmamızda 4 soru ve 15 saniye zaman verilmiştir.

3- Sonuçlar kısmında doğru yanıtlar,yanlış yanıtlar ve boş bırakılan soru sayısı size verilir. Ayrıca sizin verdiğiniz yanıtlar ile soruların doğru yanıtları karşılaştırmak amaçlı size sunulur.

4- Buraya kadar olan uygulamalar zahmetli de olsa bir asp,php veya xml dosyasının vereceklerinden az değildir. Tek sorunumuz yeni sorular eklendiğinde sahne boyutunun yeterli gelmemesi riskidir.Örneğin bu dosya sayfa yüksekliği ancak 7 soru alacak kadardır.Siz 10 soru eklerseniz sorular flash sahnesi dışına kayacağından gözükmeyecektir.Aslında biraz daha çaba ile bu problemin üstesinden gelinebilir.Scroll eklenebilir veya her 4-5 soruda bir bir sonraki kareye geçiş sağlanabilir.Kısıtlı kodlarla bunun oldukça zahmetli olacağını belirtmek isterim. En basit yol ise fla dosyasını açıp sadece sahne yüksekliği artırmaktır. Şimdi çalışmamaıza göz atalım:

 

DOSYAYI İNDİR

Uygulama:

1- Önce tüm elemanları sahneye çizelim.

Üstte sahne dışında 2 adet dinamik metin kutusu mevcut. Bunlardan birine txt dosyasından doğru yanıtlar diğerine ise sizin verdiğiniz yanıtlar eklenmektedir. Daha sonra bunlar karşılaştırılarak doğru ve hatalı yanıtlar tesbit edilir.Hemen altındaki 2 adet dinamik metin kutusunun soldakine soru sırası sağdakine ise soru metni yüklenmektedir.Bunun altında 3 tane radiobutton ve sonuçlar sayfasına gitmesi için bir buton mevcuttur.Dinamik metin kutularının ismine fla dosyasından bakınız.Yoksa kodları yorumlamak zor olabilir. Radiobuttonlara sırası ile r0,r1 ve r2 instance name`i atanır.Properties panelinde parameters alanından data değerleri vermeniz gerekir. Verilecek data değerleri hangi şık olduğunu gösterir. Örneğin ilk buton a şıkkı olduğundan data değeri a, sonraki b sonraki c dir.Sonra kodlarla kişinin yaptığı seçimin hangi şık olduğunu flash kodları ile bu data değerlerinden almaktayız..Label kısmına yükleniyor yazarsanız txt dosyasından veriler yüklenene kadar kullanıcı boş alana bakmaz bir yüklemenin olduğunu düşünür.

Yukarıda gördüğünüz gibi sahnedeki tüm sembolleri seçin ve F8 tuşuna basarak tümünü film klibi yapın.

Şimdi görüntü yukarıdaki gibi olacaktır. Klibe anaklip adını verin. Anaklip sembolümüz txt dosyasından yüklenecek soru sayısı kadar çoğaltılacak ve asıl klibimiz artık işimize yaramadığından kodlarla sahneden silinecektir.

Ana çalışma bukadar.Üstte gördüğünüz gibi verilerin yüklenmesine zaman ayırabilmek için 15.kareye sağ klik yapıp insert keyframe seçeneği ile kare ekleyin.

Şimdi üste bir layer ekleyin ve 15.kareye bir blank keyframe atayın.Sadece bu karede gözükecek olan kronometre klibimizi bu kareye kütüphaneden çekip yerleştirelim. Kronometre klibinin nasıl yapıldığı uygulamalar bölümüzde Digital saat ve kronometre hazırlama başlığı altında anlatılmıştır.

Sınav layerı 16. kareye yine blank keyframe atayın ve bu alana sonuçların gösterileceği dinamik metin kutularını yerleştirin.

Kutuların açıklamaları zaten yanında yazmaktadır. Tüm çalışma bu kadardır.

Bu bölümde kodlar hakkında bilgi verilmeyecektir. Oldukça karmaşık olduğundan yazarak anlatmak son derece zor, bu nedenle fla dosyasında kodların üzerine gerekli açıklamalar yazılmıştır. Kodları , dinamik metin kutusu ve buton instance namelerini bir yere kaydederek incelerseniz anlamanız kolaylaşacaktır.

Kodlarda _global ifadesi biraz aşırıya kaçacak şekilde kullanılmıştır.Bu kod bize çok kolaylık sağlamaktadır.Bir sembolün görüntüsüne,değerine veya kısaca yoluna ulaşabilmek için tanımlamanız gereken bir dizin olmalıdır.Örneğin iç içe dıştan içe doğru isimleri klip1,klip2,klip3 olan bir sembol paketinde en içteki klip3 de var deger=1 şeklinde bir değişken deklare ettiğimizi varsayalım.Buna ana timeline dan ulaşıp değerini değiştirebilmek için:

_root.klip1.klip2.klip3.deger=

şeklinde bir yol yazmalısınız.Halbuki ilk deklerasyonu _global.deger=1 şeklinde verseydiniz anasahneden

_global.deger=

şeklinde pratik olarak ulaşabilirdiniz.Bu başka sahneye geçseniz dahi çalışacak bir kod grubudur. Özellikle karmaşık çalışmalarda çok yararlıdır.Prensip olarak ulaşma zorluğu yoksa klasik yöntem olan _root, this veya _parent yöntemleri tercih edilmeldir.

Kodları siz fla dosyasından inceleyeceğinize göre txt dosyasına bir göz atalım:

/*Soru isimlerini yüklemek için kullanılır*/
&sorular=Soru-1,Soru-2,Soru-3,Soru-4,Soru-5&

/*Soru metinlerini yüklemede kullanılır*/
&soru_metni=Türkiye`nin başkenti hangisidir?,İngiltere`nin başkenti hangisidir?,Amerika`nın başkenti hangisidir?,Rusya`nın başkenti hangisidir?&

/*Tüm soruların a şıkkını yerleştirir*/
&a_grubu=Ankara,Liverpool,California,Tahran&

/*Tüm soruların b şıkkını yerleştirir*/
&b_grubu=İstanbul,Londra,Los Angeles,Amsterdam&

/*Tüm soruların c şıkkını yerleştirir*/
&c_grubu=Bursa,Manchester,Washington,Moskova&

/* Doğru yanıtlara ait değerler */
&dogru_cevaplar=a,b,c,c&

/*Soru sayısı değerine göre klip duplike edilirBurada 4 soru olacaktır*/
&soru_sayisi=4&

/*Soruları cevaplama süresidir.Milisaniye cinsinden verilir.
1 saniye 1000 milisaniyedir*/
&sure=15000&

değikenlerin eklenme nedeni üstünde yazmaktadır.

Son olarak siz yeni soru eklemek isterseniz ne yapmanız gerektiği anlatılacaktır:

&sorular=Soru-1,Soru-2,Soru-3,Soru-4,Soru-5&
&soru_metni=Türkiye`nin başkenti hangisidir?,İngiltere`nin başkenti hangisidir?,Amerika`nın başkenti hangisidir?,Rusya`nın başkenti hangisidir?,italya`nın başkenti hangisidir?&
&a_grubu=Ankara,Liverpool,California,Tahran,Floransa&
&b_grubu=İstanbul,Londra,Los Angeles,Amsterdam,Roma&
&c_grubu=Bursa,Manchester,Washington,Moskova,Milano&
&dogru_cevaplar=a,b,c,c,b&
&soru_sayisi=5&
&sure=20000&

Dosyayı indirdiğinizde 4 örnekli sınav görürsünüz.degisken.txt dosyasını açıp üstteki verileri kopyalayarak değiştirirseniz çalışmanıza otomatik olarak bir soru daha eklenir ve değerlendirmeye alınır. Bunu deneyerek gözlemleyebilir siniz.Kırmızı alanlar her yeni eklentide yapılması gerekenlerdir.İlk dizine soru sırasını ikinci dizine soru metnini üçüncü dizin a şıklarının değerini dördüncü dizin b şıklarının beşinci dizin c şıklarının değerini altıncı dizin soru sayısını 7. dizin kullanıcıya verilecek süreyi belirler.Burada dikkat edilecek en önemli konu değişkene her eklediğiniz değerden önce virgül karakterinin konmasıdır.Çünkü fla dosyasında split komutu ile her virgülden sonraki değer kesilerek ayrı bir değişkene atanacaktır.Konuyu kavramanız açısından bir açıklama getireyim. Bu txt dosyasını flash içine yüklediğinizde örneğin sorular değişkeninin değeri:

Soru-1,Soru-2,Soru-3,Soru-4,Soru-5

şeklinde olacaktır.Flash içindeki görüntüsü şöyle olur:

this.sorular= Soru-1,Soru-2,Soru-3,Soru-4,Soru-5;

bu değerleri virgülden itibaren almak ve ayrı bir dizi oluşturmak için split kodu kullanılır.Bu kod belli bir karakterden itibaren değeri alıp parçalayarak her birini bir değişken değeri olarak bir array(dizi) haline getirir.

var sorular_dizi=this.sorular.split(","); Bu kodla sorular_dizi isimli bir array oluşturularak parçalanan değerler bu diziye atanır.Virgül kullanmak şart değildir.Hangi karakterden itibaren bölmek isterseniz onu kullanırsınız.Bu dizinin elemanları soru-1 soru-2 soru-3 soru-4 olacaktır.Çalışma zaten bu kod sayesinde olmuştur.Şayet flashta split komutu olmasa idi bu işlemi yapmak çok zor olacaktı. Deneme yapmak için 1.kareye şu kodları yazın ve test edin.

var sorular="Soru-1,Soru-2,Soru-3,Soru-4";
var dizi= sorular.split(",");
for(var i=0;i<dizi.length;i++){
trace("Dizinin "+(i+1)+".Elemanı: "+dizi[i])
}

Sonuç:

Dizinin 1.elemanı: Soru-1
Dizinin 2.elemanı: Soru-2
Dizinin 3.elemanı: Soru-3
Dizinin 4.elemanı: Soru-4

şeklinde olacaktır.Artık her elemana değer atayarak kullanabilirsiniz.

Bugün 2 ziyaretçi (21 klik) kişi burdaydı!