Yansıma Efekti

Yansıma efekti yeni bir efekt olmadığını hepimiz biliyoruz ama etkili ve güzel bir efekt olduğunu kabul ediyorum. Çalıştığım projelerin birinde bu tarz bir efekt istendi, u efekti veren iki sınıf yapısı buldum, ama her ikisinde de farklı sorunlarla karşılaştım. Biri dinamik olarak birden çok efekt oluşturmakta sorun çıkardı. Diğeri de objenin boyu ile eş düzeyde olmayan efekt yapıyordu. Yani sahnedeki movie clibin boyutları 400×300 diyelim, bunu 200×150 düşürüp efekti uyguladığınızda efektin uygulanmasında sorun çıkıyordu çünkü efektin o anki genişlik ve yüksekliği alıyordu, yani orijinal boyutlarını değil. Bunun üzerine yeni bir sınıf oluşturmaya karar verdim. Ve ben sonuçtan memnunum, tabii ilerde bunu biraz daha geliştirebilirim. Kodu ücretsiz olarak kullanabilirsiniz, sınıf yapısını aşağıdan indirip kullanabilirsiniz. Kullanımı ve gerekli kodları da aşağıdaki örnekten alabilirsiniz.


Sınıfın adı Reflection ve oluşturulduğunda ihtiyaç duyduğu tek parametre efekti vermek istediğiniz objenin adı;

  1. import com.enginyoyen.effect.*;
  2. var refEffect:Reflection = new Reflection(image_mc);

Reflection objesi tam olarak 4 adet parametre daha alıyor ama sadece ilki zorunlu parametre. İlk parametre efekti uygulayacağınız movie clibin adı.

İkinci parametre şeffaflık değeri, yansımanın şeffaflık değerini belirliyor ve varsayılan değeri 0.6. Minimum değer 0.0 ve maksimum değer 1.0.

Üçüncü parametre yansıma oranı belirliyor, bu oran efektin dağılma oranını belirliyor. Varsayılan değeri 155 olarak düzenlendi. Minimum değer 0 ve maksimum değer 255 dir.

Son parametre ise efektin normal objeden uzaklığını belirliyor. Varsayılan değeri 0. Bu değer negatif veya pozitif olabilir herhangi bir üst değeri yok. Bunu sizin belirlemeniz gerekiyor.

Tabii sadece ilk parametreyi vermeniz de yeterli, diğer parametrelerin varsayılan değerleri geçerli olacaktır.

  1. import com.enginyoyen.effect.*;
  2. var refEffect:Reflection = new Reflection(image_mc, 0.6, 170, 0);

Eğer kullanıldığınız efekti kaldırmak istiyorsanız, yapmanız gereken removeEffect() metodunu kullanmak;

  1. import com.enginyoyen.effect.*;
  2. refEffect.removeEffect();

Kaynak Kodlar
http://enginyoyen.com/blog/tr/wp-content/uploads/2008/11/reflect.rar

Kolay Gelsin
Engin!

14 Responses to “Yansıma Efekti”

  1. Kemal Faruk Durhat ( faruk86 ) 30 November 2008 at 01:16 #

    Hocam çok güzel ve kullanımı açısından kullanışlı bi sınıf ama bence kodların sürekliliğini sağlasanız daha harika olur die düşünüyorum yani hedef clip imizde hareket uyguladığımızda gölgede de bağımlı hareket olmasını demek istiyorum.. Fakat bu anlamda hakikaten çok güzel bi sınıf yinede.. Teşekkürler.

    Kolay gelsin..

  2. Engin Yöyen 30 November 2008 at 11:10 #

    Merhaba Kemal,
    kodların sürekliliğinden kastın video benzeri bir objenin içeriği değiştiğinde yansımanındamı değişmesi?

  3. Kemal Faruk Durhat (faruk86) 30 November 2008 at 20:23 #

    Evet hocam mesela dediğiniz gibi.. Yada kendisinde tween bulunan mc gibi..

  4. baybora ören 3 December 2008 at 00:50 #

    Merhaba, minik bir bug. Efekti kaldır düğmesine iki kere tıklandığında hata alınıyor.

  5. Engin Yöyen 3 December 2008 at 02:08 #

    Merhaba Baybora,
    Aslında ikinci seder tıkladığında aldığın hatanın sebebi obje içerisinde başka bir obje bulunmaması. Yani mantık şu şekilde sahneden bir obje kaldırmak istiyorsun, objeyiyi kaldırmak için removeChild() metodunu kullanıyoruz. Eğer obje sahnede ise bu metodla kaldırırsın değilse, aldığın hatanın aynısını alırsın.Yani bunu kodu yazarken kontrol etmen yada kontrol altına alman gerekiyor.Ama sorunu çözmek için bir yol buldum.
    İkinci versiyona bir kaç özellik daha eklemiş olurum, bunuda hal edicem.
    Geri dönüş için teşekkürler

  6. Şahin Yeşilyurt 10 December 2008 at 03:05 #

    Selamın aleyküm Ben daha yeni başladım da, rar’ın içindeki Reflection.as dosyasını nereye atacam acaba

  7. Engin Yöyen 10 December 2008 at 03:40 #

    Merhaba Şahin,
    rar dosyası içerisindeki com adlı klasörün tamamını efekti kullanacağın fla dosyasının yanına koyman gerekiyor. Daha sonra ise yukardaki kodları kullanman yeterli.

  8. Şahin Yeşilyurt 12 December 2008 at 20:13 #

    saol engin

  9. Cannur Daşkıran 10 March 2009 at 09:09 #

    İnanılmaz bir ders. Çok teşekkür ederim hem yavaş yavaş ActionScript 3.0′a da göz alışıklığım başlıyor, iyiki varsınız hocam.

  10. seyfx 9 December 2009 at 15:55 #

    iyi günler engin bey, imageLoader adlı resim yükleyen ve MovieClip ten türeyen bi tane sınıfım var..
    Örneğin :

    var il:imageLoader= new imageLoader(”resim.jpg”,”POST”)
    addChild(il)

    şeklinde resmi yüklüyorum ve sizin sınıfınıza şu şekilde bu imageloader örneğini parametre olarak gönderiyorum:

    var ref:Reflection = new Reflection(il,0.5,160,0)

    burda tip zorlaması şeklinde hata alıyorum ve şu şekilde yapıyorum :

    var ref:reflection = new reflection(MovieClip(il),0.5,160,0)

    bu seferde, ArgumentError: Error #2015: Geçersiz BitmapData. şeklinde hata alıyorum…Bu olayı nasıl gerçekleştirebilirim..yadım edrseniz sevinirim..
    saygılar

  11. seyfx 9 December 2009 at 16:58 #

    engin bey hatta şu şekilde de yaptım :

    var resim:MovieClip = il as MovieClip;
    var ref:reflection = new reflection(resim,0.5,160,0)

    yine ArgumentError: Error #2015: Geçersiz BitmapData hatasını aldım…

    Bunun sebebi nedir acaba?

  12. uzunefe 14 December 2009 at 11:34 #

    hocam rar dosyasına ulaşamıyorum. tekrar upload edebilirmisiniz. sizinde dediğiniz gibi interneten yansıma için başka classlar buldum ama dinamik bir gallery oluşturmak istedim her seferinde hata alıyorum. birde sizin yazmış olduğunuz class denemek istiyorum. şimdiden teşekkürler.

  13. Engin Yöyen 14 December 2009 at 21:16 #

    @uzunefe
    dosya şu anda ftpde yüklü, istersen tekrar dene.
    Kolay gelsin

  14. Engin Yöyen 14 December 2009 at 22:41 #

    @seyfx
    resmi yüklediğin kodu gönderirsen eğer hatayı düzeltebiliriz.


Leave a Reply