ActionScript 3.0: Sürükle Bırak
Muttalip TULGAR Tarih: 8/07/2009 Yorum: 5 adet
Okunma : 1619 Tutanlar: Bu yazıyı 4 kişi tuttu.
Bu dersimizde birçok etkileşimli uygulamada sıkça kullanılan "sürükle-bırak" uygulamasını örnek bir çalışma üzerinden anlatmaya çalışacağım.
Bu uygulama için aşağıdaki resimde gösterilen moviecliplerin ve dynamic text alanlarının oluşturulması gerekiyor.
![]()
Sürüklenecek Movieclip instance adları: c1,c2,c3,c4,c5,c6
Hedef Movieclipler (Boş kutucuklar) instance adları: kutuc1, kutuc2, kutuc3, kutuc4
Dikkat edildiyse Ayrıca c5 ve c6 movieclipleri fazladan konularak kullanıcının bilgisini iyice test etmesi istenmektedir.
Uygulama Kodları:
//Sürüklenecek olan MovieClip(İller)instance adları dizide saklanıyor.
var c:Array=new Array("",c1,c2,c3,c4,c5,c6);
//MovieCliplerin ilk konumları belirleniyor.
var baslangickonum:Point=new Point();
//MovieClip sürükleme sayısı ve doğru sürüklenme
//sayısını öğrenmek için değişkenler tanımlanıyor.
var denemeSayisi:int=0;
var dogruSayisi:int=0;
//Sürüklenecek moviecliplerin hepsine buton özelliği
//kazandırılıyor.
//Ayrıca mouse'a basılı tutulduğunda ve bırakıldığında
// tetiklenecek fonksiyonlar atanıyor.
for (var i:uint=1; i<c.length; i++)
{
c[i].buttonMode=true;
c[i].addEventListener(MouseEvent.MOUSE_DOWN,surukle);
c[i].addEventListener(MouseEvent.MOUSE_UP,birak);
}
//Mouse'a basılı tutulduğunda çalışacak fonksiyon
function surukle(evt:MouseEvent):void
{
//Hangi movieclipe mouse ile basıldı ise o sürüklenmeye
//başlıyor.
evt.currentTarget.startDrag();
//Sürüklenen movieclipin başlangıç konumu belirleniyor.
baslangickonum.x=evt.currentTarget.x;
baslangickonum.y=evt.currentTarget.y;
}
//Mouse bırakıldığında çalışacak fonksiyon
function birak(evt:MouseEvent):void
{
//kontrolEt(evt) fonksiyonu çağrılıyor.
kontrolEt(evt);
}
//birak() fonksiyonu çalıştığında çalışacak fonksiyon
function kontrolEt(evt:MouseEvent)
{
//Sürüklenen movieclip artık sürüklenmiyor.
evt.currentTarget.stopDrag();
//Sürüklenen movieclipin ismi öğrenilip
// "kutu" adlı string ifadeyle birleştirilip hedefMc adlı
// değişkende tutuluyor.
var hedefMc:String="kutu"+evt.target.name;
//hedefMc adlı değişkenin bir DisplayObject olduğu
//belirtiliyor.
var hedef:DisplayObject=getChildByName(hedefMc);
// Sürüklenen movieclipin kutuların üzerine
//bırakıldığında o kutu(hedef movieclipler kutuc1,....)
//boş değilse ve kutunun instance adının sürüklenen
//movieclipin "hedef" adlı o anda oluşturulan instance
//adı ile aynı ise çalışacak komutlar belirleniyor.
if (evt.target.dropTarget!=null&&evt.target.dropTarget.parent==hedef)
{
//Hedef kutuya sürüklenen movieclip doğru yere
//bırakıldıysa tekrar sürüklenmemesi ve bırakılmaması
//sağlanıyor.
evt.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN,surukle);
evt.currentTarget.removeEventListener(MouseEvent.MOUSE_UP,birak);
//Sürüklenen movieclipler kutu(kutuc1,..) moviecliplerin
//konumuna yerleştiriliyor.kutu moviecliplerin
//registration pointlerine dikkat etmek gerekiyor.
evt.target.x=hedef.x;
evt.target.y=hedef.y;
//DOğru yere sürüklenen moviecliplerin buton özelliği
//kaldırılıyor.
evt.currentTarget.buttonMode=false;
//Her sürükleme işleminde doğru ve deneme sayıları
//artırılıyor ve bunlar stringe çevrilerek ekrandaki
// dinamik text alanlarında gösteriliyor.
dogruSayisi++;
denemeSayisi++;
denemeSayisi_txt.text="Deneme Sayısı:"+String(denemeSayisi);
dogruSayisi_txt.text="Doğru Sayısı:"+String(dogruSayisi);
//Doğru sayısını kontrol eden fonksiyon çağrılıyor.
sonuc(evt);
}
//Eğer sürüklenen movieclip doğru kutuya bırakılmadıysa
//ilk konumuna geri gönderiliyor ve deneme sayısı
//artırılıyor.
else
{
evt.currentTarget.x=baslangickonum.x;
evt.currentTarget.y=baslangickonum.y;
denemeSayisi++;
denemeSayisi_txt.text="Deneme Sayısı:"+String(denemeSayisi);
}
}
//Doğru sayısını kontrol eden sonuc() fonksiyonu
//çalışıyor
function sonuc(evt:MouseEvent)
{
//Doğru sayısı 4 olursa çalışacak komutlar belirleniyor
if (dogruSayisi==4)
{
//Doğru sayısı 4 olunca "Tebrikler" iletisi
//ekranda gösteriliyor.
durum_txt.text="Tebrikler";
//Yanlış olan c5 ve c6 adlı moviecliplerin sürükleme,
//bırakma ve buton özellikleri ortadan kaldırılıyor.
c5.removeEventListener(MouseEvent.MOUSE_DOWN,surukle);
c5.removeEventListener(MouseEvent.MOUSE_UP,birak);
c5.buttonMode=false;
c6.removeEventListener(MouseEvent.MOUSE_DOWN,surukle);
c6.removeEventListener(MouseEvent.MOUSE_UP,birak);
c6.buttonMode=false;
}
// Doğru sayısı 4 değilse ekranda gösterilecek
//ileti belirleniyor.
else
{
durum_txt.text="Daha Çok Çalışmalısınız";
}
}
Uygulama Dosyası:suruklebirak.rar
Yazan:Muttalip TULGAR
Teşekkürler Mehmet. Umarım işe yarar.
Hoş bir çalışma, kutlarım.
Yalnız küçük bir eksiklik var galiba: Kentlerden herhangi birini tıklayıp sonra o kenti kutuya bırakmaktan vazgeçtiğinizde de "deneme sayısı" artırılıyor. Vazgeçmeye hakkımız olmalı. Yalnızca kutuların bulunduğu bölge civarında bıraktığımızda deneme sayısı artırılmalı.
İlköğretimde bu tür interaktif araçların çok önemli olduğu açık. Bir set hazırlayıp tüm öğretmenlerin kullanımına açmak fikri bir ara zihnimi sarmıştı. Sonra zihnimi başka şeyler sardı, kaynadı gitti..
Tekrar kutlarım.
Evet haklısınız, bu tür uygulamalarda vazgeçme hakkı olmalı. Ama "deneme sayısını" ödül-cezayı düşünerek değilde sadece sürükleme sayısını öğrenmek amacıyla oraya koymuştum.
"Bir set hazırlayıp tüm öğretmenlerin kullanımına açma fikri"ni tekrar canlandırmanızda büyük yararların ortaya çıkacağını düşünüyorum. Şunu çok iyi biliyorum ki; bir çok öğretmen buradaki ders,uygulama,soru-cevap bölümlerinden edindiği bilgi ile öğretim metaryali hazırlamaya çalışıyor. Fikrimce; yapacağınız katkı çok büyük bir sosyal fayda güdecektir. Katkılarınızı ilgiyle bekliyoruz.
Sevdiğim konulardan biri! Örneklendirerek anlattığınız için teşekkürler. Bunun gibi daha nicelerini arttırmanız dileğiyle...
Başarılar...
Makale
Haber
Ders
Etkinlikler
Toplantı
Özgür Yazılım ve Linux Günleri '10
Özgür Yazılım ve Linux Günleri '10
İstanbul Bilgi Üniversitesi Bilgisayar Bilimleri Bölümü ve Linux Kullanıcıları Derneği'nin 9 yıldır düzenlemekte oldukları etkinlikler bu yıl `Özgür Y...
Kategori:
Toplantı
Kimler Burada? 
Son 1 dakika içinde MMIstanbul' da 52 (50 kayıtlı, 2 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:
MMIstanbul Blog'undan
Blog Bölümü Blogevi.com'a Taşınıyor
Selam arkadaşlar MMIstanbul'da , tasarımcı ve programcıların blog yazılarını "feedleyerek" MMIstanbul okurlarını MMIstanbul dışın ...
7.500'üncü üyemiz Cem Koç!
Neler Yapılabilir?
500 Hatası Hakkında!
Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)










Tebrikler hocam. Elinize sağlık. Çok güzel bir anlatım olmuş...