|
Bu dersimizde flash'ta değişken
tanımlayarak ve bu değişkenleri kullanarak, animasyonumuza
interaktiflik katmayı öğreneceğiz. Bunun için en güzel
animasyon hesap yapabilen bir animasyon olabilir. Boş bir
çalışma sayfasında CTRL+L'ya basıp kütüphanemizi açalım.
Options düğmesini kullanarak "new symbol" ile yeni sembol
yaratalım. Ancak "behavior" yani davranış biçimi olarak button
seçelim. Button'un isminede "rakam1" diyelim. Karşımıza gelen
ekrana küçük bir kare çizelim ve içine "1" rakamını yazalım.
Sonra tümünü kopyalayarak yeni bir button daha oluşturup,
buraya yapıştıralım. Ve her yeni button'a bir rakam verelim.
Şimdi elimizde üzerinde "0"dan "9"a kadar olan 10 adet düğme
oluştu. Aynı yöntemle "+" , "-" , "/" , "*" , "=" , "."
işlemlerini ifade edecek düğmeleri de yapalım.Ve devam edelim,
bu sefer üzerinde "CE" , "C" , "MRC" , "M+" yazan
düğmelerinide yaparak tüm düğmelerimizi oluşturalım. Biz
buraya kadar ne yaptık? Toplam 20 adet düğme yaptık. Bunların
10 tanesi rakamları ifade ediyor. Bir tanesi noktalamayı ifade
ediyor. Beş tanesi toplama, çıkarma, çarpma, bölme ve eşittiri
ifade ediyor. Birisi hafızaya almayı ifade ediyor. Birisi
hafızayı göstermeyi, diğerleride ekranı silme ile tüm
işlemleri silmeyi ifade ediyor. Yani basit bir hesap
makinasında olması gereken herşey var. Bunu yapmayı
öğrendikten sonra fonksyonları arttırmak sizin elinizde.
Artık Scene1 yazılı ekranımıza
dönebiliriz. Yaptığımız tüm düğmeleri ekrana sürükleyerek
düzgün bir şekilde dizelim. Sonra sahnenin üstüne bir "text
field" koyalım. Bunu alet kutusundaki "A" text dümesine basıp,
modifier kısmındaki abl yazılı düğmeye basarak yapabilirsiniz.
Şimdi sahnemizde hesap makinamızın tüm tuşları ve ekranı
oluşmuş oldu. Hazır hesap makinamızın ekranını yapmışken
üzerinde sağ tıklayıp, properties'ine girelim. Açılan
pencerede en üstte yazan variable kısmına "ekran" yazalım.
Buraya "ekran" yazmamızın nedeni, ileride yazacağımız program
akışına göre ekran değişkenine istediğimiz değeri
atayabileceğiz. Ve bu değişkene atadığımız değerleri "text
field" kısmında görebileceğiz.
Artık hesap makinamız görünüş itibarı
ile hazır sayılır. Şimdi ilk değişkenlerimizi tanımlayalım.
Layer 1'de duran tek keyframe'in üstüne sağ tıklayıp,
properties'inden Actions'a geçelim. Komut listesinden "Set
Variables"e basalım. Yan tarafta iki adet "text field" yani
yazı yazabileceğimiz alan çıktı. Birisi "variable"; yani
değişkenimiz, diğeri "value"; yani değişkene atayacağımız
değer. Birinci değişkenimize "hafiza" diyelim ve değer olarak
"0" atayalım.
Dikkat: Değişken isimlerimizde asla
tükçe karakter bulunmamalı. Zaten yazmak istediğiniz zaman bir
uyarı mesajı alacaksınız. İkinci konu, değişkenimiz ve
değerinin özelliği nasıl olmalıdır. Yani değişkenimizin
alfanümerik karakter özelliğe sahip olmasını istiyorsak bunu
çift tırnak içinde tanımlamalıyız. Aynı şey değeri içinde
geçerlidir. Eğer rakamsal özelliğinden yararlanacaksak, bu
sefer tırnak işaretlerini kaldırmalısınız. Bunu en sağda
bulunan "abc - string literal" yada "= - expression" düğmesine
basarak yapabilirsiniz. "abc" string literal, değişkenlerimizi
alfanümerik olarak yorumlar ve çift tırnak içine alır. "="
expression ise değişkenlerimizi rakam gibi yorumlar ve tırnak
içine almaz. Bunu bir örnekle anlatalım. Diyelimki rakam1 ve
rakam2 isimli iki değişkenimiz var, değerleride 100 ve 200
olsun. Bunları çift tırnak içine alırsak, yani string literal
yaparsak, bu iki değeri "+" ile toplamaya kalktığımızda yeni
değerimiz "rakam1rakam2" olacaktır. Ama çift tırnak içine
almazsak, yeni değerimiz 300 olur.
"rakam1"="100" , "rakam2"="200"
"sonuc"="rakam1"+"rakam2"
"sonuc"="rakam1rakam2"
rakam1=100 , rakam2=200
sonuc=300

İkinci değişken olarakta "ekran" diyelim
ve değer olarak yine "0" atayalım. Değişkenlerimizi
tanıttıktan sonra "Stop" komutunu vererek buradaki işimizi
bitirelim. "hafiza" değişkenimiz aslında "M+" tuşuna basıldığı
zaman atayacağımız değer. "ekran" ise hesap makinamızın
ekranındaki değerdir ve şimdilik ikiside sıfırdır.
İşlemlerimiz bittiyse aşağıdaki gibi bir komut satırı
çıkacaktır.
Set Variable: "hafiza" = "0"
Set Variable: "ekran" = "0"
Stop
Layer1'deki zaman eksenine bir frame
daha yerleştirelim. Ve bu frame'in üzerinde sağ tıklayıp
properties'ini açalım. Actions'a geçmeden önce "Label"
kulakçığını tıklayalım ve "name" kısmına "RakamEkle" yazalım.
Bu şekilde ikinci frame'in sadece hesap makinamızın ekranına
rakam eklemek olduğunu söylüyoruz. Bu "RakamEkle" ismini daha
sonra çağırarak kullanacağız. Artık "Actions"a geçebiliriz.
Şimdi komutlarımızı yazmadan önce düşünelim. Her bir rakam
için yaptığımız buttonlardan gelecek değere bir değişken
vermek lazım. Bu değişkene "rakam" diyebiliriz. Basitçe
"ekran" değişkenine "rakam" değişkenini atarsak ekranımızda
rakamı görürüz. Yani "Set Variable: "ekran" = rakam". Ama bu
şekilde asla iki ve daha üstü basamaklı sayıları yazdıramayız.
Her yeni rakama bastığımızda önceki rakam silinecektir. Bir de
arka arkaya nokta basılmasını engelleyemeyiz. O zaman şöyle
bir şey yazalım:
If (ekran eq "0" and not(rakam eq "."))
Set Variable: "ekran" = rakam
Else
Set Variable: "ekran" = ekran & rakam
End If
İlk önce artıya basarak If komutunu
çağırın. Yan tarafta "Condition" isimli bir yazı alanı
çıkacak. Buraya değilde onun yanındaki "=" işaretine basarak
karşımıza gelecek pencereye yazalım. Parantez işaterini
kendisi yazdığından bizim yazmamıza gerek yok. "ekran"
yazdıktan sonra "operator" kısmında bulunan eq ifadesine çift
tıklayın. Tırnak içinde sıfır yazın. Sonra yine "operator"dan
"and" ve "not" ifadelerine çift tıklayın. Sonrada parantez
içinde rakam yazıp "operator"dan "eq", ve tırnak içinde nokta
yazıp bitirin. "Else" ifadesi için "Condition" penceresinin
altındaki "Add Else/Else If Clause" düğmesine basın ve nerede
kullanmak isterseniz "Actions" penceresinin üstündeki ok
işaretleri ile kaydırın.
Şimdi gelelim ne yaptığımıza. Eğer ekran
değişkenimiz sıfırsa ve rakam değişkenimiz nokta değilse
(burada noktaya iki kere basılmasını önleyelim) ekran
değişkenimize rakam değişkenini ata. Değilse (Else) ekran
değişkenimize ekranla birlikte rakam değişkenimizi ata. Yani
ekranda sıfır yazıyor ve rakamımız nokta değilse hangi rakama
bastıysak onu ekrana yaz. Yok eğer ekranda bazı rakamlar varsa
o zaman onun yanına yeni bastığımız değeride yaz. Fakat dikkat
ediyormusunuz, değişkenimiz alfanümerik, değeri ise rakamsal
şekilde ifade ediliyor. Eğer değerini de alfanümerik yapmaya
kalkarsak o zaman ekrana yazı ile "rakam" yada "ekran&rakam"
yazılacaktır. Evet herhalde olmuştur. Ama birşeyler eksik.
Kullanıcı bir işlem yapıp eşittire bastıktan sonra tüm
değerleri sıfırlamamız gerekir. O zaman bir değişken daha
tanımlayalım ve işlem yapıldıktan sonra o değişkene bir değer
verelim. Eğer bu değişkenimiz verdiğimiz değere eşitse işlem
yapılmış sayıp tüm değişkenleri (hafıza hariç) sıfırlayalım.
If (islemtamam = 1)
Set Variable: "islemtamam" = "0"
Set Variable: "nokta" = "0"
Set Variable: "ekran" = "0"
End If
If (ekran eq "0" and not (rakam eq "."))
Set Variable: "ekran" = rakam
Else
Set Variable: "ekran" = ekran & rakam
End If
Evet artık tamamdır. Şimdi zaman
eksenine bir frame daha yerleştirip, işlem yaptırma
komutlarına geçebiliriz. Üçüncü frame'e sağ tıklayıp
properties'inden "label" kulakçığına tıklayın ve "name"
kısmına "IslemYap" diyelim ki bu ismi çağıdığımızda işlem
yapılsın. Toplama, çarpma, çıkarma ve bölme işaretlerine
basınca bir değişken vereceğiz. Bunun adı "islem" olsun. Şimdi
herhangi bir işlem işaretine basmadan önceki ekran değeri ile
basıldıktan sonraki ekran değeri, iki ayrı değişkeni ifade
edeceğinden; işlem işaretine basıldıktan sonraki ekran
değerini başka bir değişkene atamamız lazım. Mesela "oncekiekran".
Bu atamayı işlem tuşlarında yapacağız. Artık işlemleri
yaptırabiliriz. Eğer işlem değişkeni "+" ise "ekran"
değişkenine "oncekiekran" ile "ekran" değişkenini toplayıp
ata. Yani ekrana yazdır. Tüm bu işlemleri sırası ile yazarsak
sonuç aşağıdaki gibi olur. En altta iki değişken tanımlaması
dikkatinizi çekmiş olabilir. "islem" değişkenini sıfıra
eşitlememizin nedeni, herhangi bir işlemin sonunda eşittire
bastıktan sonra, işlem değişkeni en son değeri itibari ile
dikkate alınacağından, ikinci işleme başladığınız zaman,
işlemler karışacaktır. "islemtamam" değişkenini de bir önceki
frame'de, yani "RakamEkle" bölümünde kullanmak üzere "1"
değerini verdik.
If (islem eq "+")
Set Variable: "ekran" = oncekiekran + ekran
End If
If (islem eq "-")
Set Variable: "ekran" = oncekiekran - ekran
End If
If (islem eq "*")
Set Variable: "ekran" = oncekiekran * ekran
End If
If (islem eq "/")
Set Variable: "ekran" = oncekiekran / ekran
End If
Set Variable: "islem" = "0"
Set Variable: "islemtamam" = "1"
Şimdi rakamlarımıza geçelim. Sıfır
rakamının üzerinde sağ tıklayıp Actions'ı açın. Burada ilk
önce rakam değişkenine üzerinde yazdığı rakamı atayalım.
Sonrada "RakamEkle" frame'ine göndermemiz lazım. Bunu "Call"
komutu ile yapabiliriz. "Call" ("RakamEkle") dediğimiz zaman "Label"
"name"i "RakamEkle" olan frame'i çağırmış oluyoruz.Tüm
rakamlar için aynı işlemi yapın.
On (Release)
Set Variable: "rakam" = "0"
Call ("RakamEkle")
End On
Sıra geldi nokta işaretine. Burada
dikkat edilmesi gerekn tek bir şey var oda üst üste nokta
işaretini basmayı engellemek. Bunu basit bir if dönüsü ve
değişken tanımlama ile yapabiliriz. "rakam" değişkenine "."
değerini verdikten sonra, yine "RakamEkle" frame'ini çağırıp
işyaptırıp, ardından da nokta değişkenine doğru, yani "true"
değerini atamalıyız. En baştada, eğer nokta doğru değilse yada
yanlışsa devam et aksi takdirde işlem yapma dersek bu iş olur.
On (Release)
If (nokta = false)
Set Variable: "rakam" = "."
Call ("RakamEkle")
Set Variable: "nokta" = true
End If
End On
Şimdi de işlem düğmelerimize bakalım. "islem"
değişkenimize üzerinde yazan işlem işaretini değer olarak
atayalım. Sonrada ekranda bulunan değeri başka bir değere
atayalımki bundan sonra yazacağımız değer karışmasın. Mesela
işlem düğmesine basmadan önceki ekran değerini "oncekiekran"
olarak değiştirelim. Artık ekrana ne yazarsanız yazın daha
önce yazdığınız değer kaybolmayacaktır. Ancak kullanıcı
eşittir'e basmadan da arka arkaya işlem yapabilir. Mesela 3
adet değeri toplamaya kalktığında her seferinde eşittire
basmaktansa, her değeri girdikten sonra, işlem düğmesine
basabilir. Bunun için en başta "IslemYap" isimli frame'i
çağırıp işlem yaptırmamız lazım. Onu da "Call" ile
yapabileceğimizi öğrenmiştik.
On (Release)
Call ("IslemYap")
Set Variable: "islem" = "+"
Set Variable: "oncekiekran" = ekran
End On
Eşittir işaretine basınca sadece "IslemYap"
frame'ini çağırmamız yeterli olacaktır.
On (Release)
Call ("IslemYap")
End On
"CE" düğmesine basınca herşeyi
sıfırlamamız gerekir. Ekrana sıfır yazacağız, "islem"in
değerini boşaltacağız ve diğerlerini yanlış olarak yani "false"
olarak değiştireceğiz.
On (Release)
Set Variable: "oncekiekran" = false
Set Variable: "ekran" = "0"
Set Variable: "islem" = ""
Set Variable: "islemtamam" = false
Set Variable: "nokta" = "false"
End On
"C" düğmesine bastığınız zaman en son
yazdığınız rakamı silmesi için sadece "ekran" değişkenine
sıfır atamak ve nokta işaretini yazdırabilmek için "false"
değerini vermek yeterli olacaktır.
On (Release)
Set Variable: "ekran" = "0"
Set Variable: "nokta" = false
End On
"M+" düğmesi ekranda yazılı olan rakamı
hafızaya almak içindir. O zaman en başta verdiğimiz "hafiza"
değişkenine "ekran"daki değeri atamamız lazım. Ancak hafıza
her seferinde toplanmak istendiğinde en son "hafiza" değişkeni
ile "ekran" değişkenini toplamak lazım.
On (Release)
Set Variable: "hafiza" = hafiza + ekran
End On
En son olarak hafızadaki değeri ekrana
yazdırıp sıfırlayan "MRC" düğmesine bakalım. "ekran"
değişkenine "hafiza" değişkeninin değerini atamalıyız. "hafiza"
değişkenini sıfırlamalıyız. "islemtamam" değişkenide "true"
yani doğru yapmalıyız. Artık hesap makinamızı kullanabiliriz.
İsterseniz ilave tuşlar koyabilirsiniz. Mesela karesini alma,
karekök... Ama bu işlemler için eşittir işaretine basmamıza
gerek olmadığından ilgili düğmenin actions'ında yapmamız
gerekir.
On (Release)
Set Variable: "ekran" = hafiza
Set Variable: "hafiza" = "0"
Set Variable: "islemtamam" = true
End On
|