// Bu uygulama, as3coder.com / Burak AYDIN tarafından hazırlanmıştır
// İşlemler dizisiyle haberleşirken kullanmak üzere işlem sırası integer değişkeni oluşturuyoruz
// İlk değer -1 olmalı çünkü diziler 0 değerinden başlar ve ilk işlem varsayılan olarak kaydedilecek.
// Yani şuan kutunun durduğu yer bir işlem olarak kaydedildiğinde işlem numarası 0 olacak.
// Böylece diziden konumlar 0 elemanından geri çağırılabilecek.
var islemSirasi_int:int=-1;
// Kutu buton gibi davransın
kare_mc.buttonMode=true;
// Taşıma Fonksiyonu oluşturuluyor
// Baskı uygulandığında taşımaya başla fonksiyonunu çalıştır
kare_mc.addEventListener("mouseDown",tasimayaBasla);
// Baskı sonlandırıldığında taşımayı bitir fonksiyonunu çalıştır
kare_mc.addEventListener("mouseUp",tasimayiBitir);
// Taşımaya başla fonksiyonu oluştruluyor
function tasimayaBasla(e:Event) {
// Kare film klibini taşıma başla
MovieClip(kare_mc).startDrag();
}
// Taşımayı bitir fonksiyonu oluşturuluyor
function tasimayiBitir(e:Event) {
//if (kare_mc.hitTestPoint(mouseX,mouseY)) {
// Kare ‘yi taşımayı bitir
kare_mc.stopDrag();
//}
}
// İşlem sırası için dizi oluşturuluyor
var islemSirasi_arr:Array = new Array();
// İşlem kaydedici fonksiyonu oluşturuluyor. x konumu ve y konum için sayısal birer değer kabul edeceğiz.
function islemiKaydet(xKonum:Number,yKonum:Number) {
// Normal bir şekilde işlem seyrediyorsa, taşıma yapılıyorsa, işlem sırası toplam işlemden bir eksik olur.
// Böylece işlem sonlandığında yeni işlem diziye kaydedilir. Biz burada bunu sorguluyoruz.
// Eğer işlem sırası işlem toplamından bir eksik ise işlem sırasını bir artır.
// Eğer aksine, geri al ve ileri al butonları kullanılıyorsa işlem sırasının işlem toplamından bir eksik olma kuralı bozulmuştur.
// Böyle bir durumda o anki işlemden sonraki tüm işlemleri siliyoruz. Aynı paket programlarda olduğu gibi.
// Eğer işlem sırası, işlem toplamından bir eksik ise, yani kullanıcı usul usul taşı bırak işlemi yapıyorsa
if (islemSirasi_int == islemSirasi_arr.length -1) {
// İşlem sırasını bir artır, böylece diziye yeni değerleri işlem sırası numarasıyla ekleyebileceğiz
islemSirasi_int++;
// Değilse, yani kullanıcı işlemi geri al, ileri al butonlarıyla yapıyorsa
} else {
// Bütün işlem sırası bozulmuştur. Öyleyse şu anki adımdan sonrasını diziden temizle. (Adobe Flash’ta olduğu gibi)
islemSirasi_arr.splice(islemSirasi_int,islemSirasi_arr.length - islemSirasi_int)
}
// islemSirasi_arr[5] = [12,43] gibi düşünebilirsiniz. Buradaki 5 sonraki işlem numarası. Dizideki 5 elemanı içinde iki eleman daha var.
// xKonum ve yKonum. Bunlara yeni konum değerlerini yazıdırıyoruz
islemSirasi_arr[islemSirasi_int]=[xKonum,yKonum];
// Çalışma sırasında gerekli bilgileri output ekranımdan görmek istedim.
trace("iş sır arr: ",islemSirasi_arr.length);
trace("iş sır int: ",islemSirasi_int);
}
// işlem sırası için ilk konum kaydediliyor. Yani kutunun x ve y konumu ilk andaki konum için işlem sırasına yazdırılıyor.
islemiKaydet(kare_mc.x,kare_mc.y);
// Geri alma fonksiyonu tanımlanıyor
function geriAl(e:Event=null) {
// Eğer işlem sırası integer 0′dan büyükse halen history’de yaşayan bir işlem var demektir. Geri alırken bunu sorguluyoruz.
if (islemSirasi_int>0) {
// İşlem sırasını bir azalt, birazdan bir azaltılmış işlem sırası diziden numara olarak çağırılacak.
trace("İşlem Sırası: ",islemSirasi_int);
// Değeri bir azaltılmış işlem sırası kaçsa, dizide kayıtlı işlemlerden dizi numarasına göre çağırılıyor.
kare_mc.x=islemSirasi_arr[islemSirasi_int][0];
kare_mc.y=islemSirasi_arr[islemSirasi_int][1];
// Değilse, yani işlem sırası integer 0′a eşitse ve başka geri alınacak işlem kalmadıysa, bunu geliştiriciye bildir.
} else {
trace("Yapılacak İşlem Yok: Geri Al");
}
}
// İleri alma fonksiyonu tanımlanıyor
function ileriAl(e:Event=null) {
// işlem sırası, dizideki tüm işlemlerin toplamından küçükse, ileri alma işlemine izin veriyoruz
if (islemSirasi_int<islemSirasi_arr.length-1) {
// İşlem sırasını bir artır, böylece birazdan, bir artırılmış değeri dizideki yeriyle eşleştirebileceğiz.
islemSirasi_int++;
trace("İşlem Sırası: ",islemSirasi_int);
// Bir artırılmış işlem sırası integer’ı dizideki yeriyle eşleştiriyoruz. Kutunun konumunu ileri alıyoruz
kare_mc.x=islemSirasi_arr[islemSirasi_int][0];
kare_mc.y=islemSirasi_arr[islemSirasi_int][1];
} else {
trace("Yapılacak İşlem Yok: İleri Al");
}
}
// Tüm işleri sıfırlamak için yardımcı bir fonksiyon.
function sifirla(e:Event=null) {
islemSirasi_arr.splice(0,islemSirasi_arr.length);
islemSirasi_int=-1;
trace("Dizi Temizlendi, Eleman Sayısı: " , islemSirasi_arr.length);
kare_mc.x=stage.stageWidth/2-kare_mc.width/2;
kare_mc.y=stage.stageHeight/2-kare_mc.height/2;
// İşlem ilk kayıt için diziye yazdırılıyor.
islemiKaydet(kare_mc.x,kare_mc.y);
}
// Geri al butonuna geriAl fonksiyonu ekleniyor
geri_btn.addEventListener("click",geriAl);
// İleri al butonuna geriAl fonksiyonu ekleniyor
ileri_btn.addEventListener("click",ileriAl);
// Sıfırla butonuna geriAl fonksiyonu ekleniyor
sifirla_btn.addEventListener("click",sifirla);