nedir
Dosya:cs16full_v7.exe 278857 KB 15.11.2004 00:00:00
Dosya:cs16patch_full-v13.zip 20600 KB 15.11.2004 00:00:00
Dosya:cs16patch_full_V19.exe 17084 KB 15.11.2004 00:00:00

PS(First Person Shooter) olarak bilinen karakterin gözünden çevreye baktığımız oyun tarzında, bir türlü içinden çıkılamayan “En iyi kaç fps’de oynanır?” sorusuna artık bir cevap bulmanın zamanı geldi diyorum. Bu yazıda bildiğim ölçüde nacizane birtakım fikirler öne sürüp, görüşlerimi sizlerle paylaşacağım.Öncelikle kendim 1998 yılında ’de henüz 56K dial-up bağlantısı varken, 250 ping ile sanane.com sunucularında Quake2 oynayarak yarı profesyonel anlamda FPS camiasına katıldım. O dönemde zaten bir elin parmakları kadar, wolfenstein, doom, shadow warrior, duke nukem quake gibi FPS oyunları vardı ki sanırım hepsini de saydım. (:

Aradan yıllar geçti görüyorum ki FPS oyunları dünyayı kasıp kavuruyor. En büyük ödüllü turnuvalar, en geniş organizasyonlar kısaca en büyük profesyonel oyuncu kitlesi hala FPS oyunlarında… Bu dalda önce Half-Life sonra da -Strike oyun dünyasına öyle bir dalış yaptı ki, dönemin tartışmasız en kral oyunu olan Quake resmen kenara itildi o tarihten sonra sadece müdavimleri tarafından teke tek veya takım oyunları olarak oynandı, hala az da olsa oynanmakta. Artık yeni kral oldu orta, lise öğrencilerinin hatta üniversiteye hazırlanan gençlerin bile okul çıkışı koşa koşa internet cafelere akın ettiğini devasa bir kitleyi kendi ekseninde tutmayı başardı. Gerçi halen birçok yerde 1.x’ler ısrarla oynanmakta, ona da bir anlam veremiyorum ama saygı duyuyorum tabiki…
FPS oyunlarının ülkemizdeki gelişim sürecine kısaca değindikten sonra gelelim şu meşhur kafa kurcalayan teknik konuya…

doom_2_first_person_shoot_game-wince.jpgBütün PC oyunlarında saniye başına gösterilen kare sayısı denilen bir kavram vardır monitör aynı çizgi sayfalarını hızlıca çevirerek hareket oluşturmak gibi bu karelerini peşpeşe oynatır bize hareketli bir görüntü sunar. Peki görüntünün akıcı olması için saniyede kaç fps(frame per second: bunu oyun türü olan FPS ile ışmasın diye ufak yazacağım) görmek gerekir? Teorik olarak insan gözünün 30 fps’nin üstünü layamadığı yönünde deli saçması bir inanış vardır ki aslında böyle birşey bana göre söz konusu bile değildir.

İnsan gözünün görüntüleri tam olarak ladığı hala bütün detaylarıyla çözülememiş olsa da askeri araştırmalar için yapılan deneylerde, jet pilotlarının 1/200 saniyeden daha kısa sürede sadece jeti lamakla kalmayıp ne tür bir jet olduğunu da anladıkları tespit edilmiştir. Bu gözümüzün yetenekleri kapasite limiti hakkında net bir fikir veriyor.

enemy-territory-wince.jpgİnsanların aklını ıştıran asıl mesele şu; kimi oyun 30 fps ile gayet akıcıyken kimi oyun 60 fps ile kasılıyor gibi gelebiliyor. İşte bu durumun sebebi oyunların yapıldığı grafik motorlarının yapısal olarak büyük farklılıklar göstermesidir. Örneğin Double Triple Buffer diye iki kavram vardır. Bunlara genel olarak görüntüde titremeyi önleyici mekanizmalar da denebilir. Oyundaki kareler bir slide show misali peşpeşe hızlıca görüntülenmek istendiğinde, geçişlerde tamamen kaybolup yenisi geleceğinden görüntüde bir titreme varmış gibi lanır. Bunu engellemek için de buffer kullanılır. Önceki kareler buffer’a kaydedilir yeni kare geldiğinde eskisi görüntüden kalkmadan yenisi üzerine bindirilerek görüntülenir. Bunu bir nevi, paint’te bir resmin üzerine başka bir resmi yapıştırmak gibi düşünebiliriz. Double-buffer kendinden önceki iki kareyi, Triple-buffer ise üç kareyi hafızasında tutar aralarda çok pürüzsüz bir geçiş sağlarlar. Oyundaki fps miktarı çok yüksekse, kareler düzensizce üst üste biner görüntüde yırtılma dediğimiz olayla şılaşırız. Bunu engellemek için de oyunu monitörün dikey tarama frekansına uygun bir fps miktarına sınırlar veya VSync olarak bilinen dikey senkronizasyonu açarak, donanımsal olarak oyunu monitörün dikey tarama değerine limitleriz.

halo-3-1032-wince.jpgDemek ki, oyunun grafik motorunda kullanılan filtrelemeler görüntü akıcılığı için çok önemlidir bu filtreleri kullanan oyunlarda 150 hatta daha üstü fps değerlerini bile hissedebiliriz. Günümüzde ise filtreleme yöntemleri daha değişik bir hal almıştır. Artık yeni çıkan hemen her oyunda kullanılan bir olgu vardır ki o da; “motion blur”. Bence olayın en can alıcı noktası bu motion blur denilen olay. Bu efekti kullanan oyun olsun, olsun kesinlikle hiç kırıksız yani kusursuz bir akıcılıkla görüntülenecektir. Çünkü bu yöntem, kareler arasındaki geçişleri uzatarak bize sanki bir rüzgar etkisinde gibi savrulan hızlıca akan bir görüntü sunar. İşte bu yöntemi kullanan bir oyun 25 fps ile de olsa bunu kullanmayan bir oyunun 200 fps’deki akıcılığına denk bir görüntü sunabilir. Tabi bu kullanılan motion blur efektinin yoğunluğuna da bağlı ama sonuçta akıcılık yönünden oyuna çok büyük katkı yaptığını hiçkimse inkar edemez. Motion blur oyunlarda kenar bölgelerde en yoğun şekilde kullanılır. Çünkü zaten bize bir oyunun takılıyo gibi gelmesinin nedeni namlunun ucundaki bölge değil, çevrenin sağa sola bakarken veya ilerlerken ki akıcı olmayan hareketidir. Motion blur da bu geçişleri yumuşatarak kusursuz bir hareket gibi sunabiliyor. Fakat bu tarz FPS oyunları pro-gamerlara yani işin ustalarına pek gelmez, çünkü çok hızlı hareket ederken görüntüdeki blur efekti iyice kendini hissettirmeye başlar bulanıklıktan dolayı rakibi seçmek büyük oranda zorlaşır. Bu nedenle motion blur yarışlarında daha çok işe yarıyor bence. FPS oyunlarında da çok büyük etkisi var ama yukarıda belirttiğim gibi oyunun eğlencelik olmasından başka bir getirisi olmuyor. Bu efekti kapatıp oynarken de; oyunda zaten motion blurla akıcılığın rahatlıkla sağlanması buna bağlı olarak da fazla optimize edilmeye gerek duyulmadığından, son derece atlamalı-takılmalı bir FPS oyununa tabi oluyoruz.

Kendi görüşüm motion blur efektinin; yerinde yeteri kadar kullanıldığında çok lı olduğu fakat yine de 200 fps’de oynanılan bir FPS oyunundaki hazzı asla vermeyeceğidir. Herkese bol fps’li oyunlar dilerim…

bilgiustam.com

1. EDİTÖRÜNÜN TANITIMI.:

Bir doküman, filminizin karelerini, katmanlarını sahnelerini içeren bir Timeline’dan (zaman çizelgesi); filminizin gösterildiği bir stage’den (sahne ) her yandan stage’’in ötesine uzanan, ancak filmin son oynatılırken görülebilir karede görünmeyen çalışma alanından (work area)’dan oluşur.

Şekil 1

1.1. Tımelıne Hakkında

filminizi bir gibi düşünürseniz, timeline etkileşimli içindekiler dizini olabilir: her sahne (scene) bir , her kare(frame) bir sayfa gibidir. İçindekiler listesinde 10 ü işaretlediğinizi kitabın o ün ilk sayfasını açmak üzere çevrildiğini hayal edin. Flash2da timeline’da bir kareye tıkadığınızda doküman pencerenizde o kare görünür. Tabi ki bir filmi bir kitaptan çok daha fazla karmaşıktır. Her sayfası, bir birinin üstüne yerleştirilmiş çok sayıda şeffaf kağıttan oluşabilir. Flaş bu şeffaf kağıtları katman (layer) adını verdiği şeyler olarak izler. İçindekiler dizini içinde hareket ederken, tüm hareket halinde gözükür görünmeyen bir el sayfaları çevirir.

Timeline ışık bir organizasyondur. Animasyonlarınızı oluştururken onu yoğun olarak kullanacaksınız.

1.2. Tımelıne Gezintisi

Timeline, filminize ait eksiksiz bir kayıttır. Filminizi oluşturan her sahne, kare katmanı temsil eder. Kareler, kronolojik sırayla görülür. Timline’da herhangi bir kareye tıklamanız, sizi doğrudan o kareye götürür stage’de içeriğini gösterir

ŞEKİL 2 : Timline

1.3. Stage Hakkında

Stage, bir filmini oluşturan tüm grafiksel öğeleri içeren alandır. Bunu filminizi oynatacağınız gibi düşünün. Bir sinema salonun da perde o sinema alanı içinde satın alabildiği herhangi bir boyda olabilir. ’ta, perdenizin büyüklüğünü, rengini diğer parametrelerini kontrol edebilir, bunların tümünü her filimde değiştirebilirsiniz.

Stage’in boyunu büyüklüğünü Movie Properties ( Özellikleri) iletişim kutusunu kontrol edebilirsiniz.

1.4. Araç Çubuğu Hakkında

’ın çizim larını animasyon için nesneleri oluşturup düzenlemekte kullanacağınız diğer ları içerir. ’ta araç çubuğunu sbitleye bilir herhangi bir anda hangi ların görüleceği üzerinde daha fazla denetim sahibi olabilirsiniz.

2. MENÜLERİN TANITIMI.:

editöründe yer alan menüler bizim sıkça kullanacağımız lardandır.İşte şimdi bu menüleri manın tam zamanı ;

2.1. FILE MENÜSÜ :

New : Yeni bir dosya açmaya yarar.

Open : Önceden yapılmış dosyaları açmaya yarar.

Open as Library… : Önceden tasarlanmış projelerde kullanılan kütüphaneleri yeni projelerde de kullanmaya yarar.

Close : O anki projeyi kapatır.

Save : Projeyi saklamaya yarar.

Import : Projelerimize her hangi bir formatta yapılmış bir dosyası, daha önceden tasarlanmış bir projeyi,mov dosyalarını vb … projeleri kendi projenizde kullanmaya yarar.

Export Movie …. : yapımı için kullanılır.

Export İmage …. : Yapımı için kullanılır.

Publish Settings : Burada projemizin görüntüsü için ayar yapmamızı sağlar.

Publish Preview : Yapılan ayarları test etmemizi sağlar.

Publish………….. : projemizi çalıştırır swf dosyası haline getirir.

Page Setup…….. : Sayfa ayarları yapmamıza yarar.

Print Priview…..: Yazıcıdan çıkaracağımız Belgenin ön izlenimini verir.

Print……………….: Yazıcıya gönderme işlemine yarar.

Asistans………….: Çizgilerinizi düzenleştirmede,monitörünüzün çözünürlüğünü ayarlamada size yardımcı olur.

2.2. EDIT MENÜSÜ:

Edit menüsü yaptığımız bir işlemi geri almada, kesip, kopyalama vs. gibi işlemleri yaptığımız kısımdır.

Undo…: Yanlışlıkla yapılan işlemi geri almamıza yarar.

Redo…: Yapılan işlemi bir ileri alma işlemine yarar.

Cut…..: İşaretlenmiş kısmı kesmeye yarar.

Copy..: İşaretlenen kısmı kopyalamaya yarar.

Paste..: Daha önceden copy veya cut işlemleri ile yapılmış işlemi yapıştırmaya yarar.

Paste in Place: Pano’nun içeriğini dosyanıza yapıştırır orijinal dosyaya bir bağlantı oluşturur.

Paste Special.: İletişim kutusunda göreceğiniz seçenekler, panonun içeriğine göre farklılık gösterir.

Clear..: Yapıştırılan belgeyi silmeye yarar.

Duplicate.: İşaretlenmiş kısmın ikizinden yapmaya yarar.

Select All..: Sayfada olan seçeneklerin hepsini işaretlemeye yarar.

Deselect All……: İşaretlenmiş kısmın hepsini iptal etmeye yarar.

Copy Frames…: Timline’da yer alan çerçevelerin (oynatım göstergesi) kopyalanmasını sağlar.

Paste Frames…: İşaretlenen kısmı yapıştırmamıza yarar.

2.3. VIEW MENÜSÜ…:

ımızın görüntüsünü ayarlamaya yarar.

Goto…: İstenilen satıra gitmemize yarar.

Outlines: Çizilen karakterlerin dış çizgilerini verir.

Fast…: Outlines dan çıkmaya yarar.

Anatialias.: Görünümde analitikliğini sağlar.

Timeline…: Timline’ın görünüp görünmemesini sağlar.

Workarea.: Çalışma alanının görünüp görünmemesini sağlar.

Rules………: Cetvelini görünüp görünmemesini sağlar.

Grid……….: Scene yardımcı çizgilerin konulmasını sağlar.

Snap………: Çizim yaparken bir çizgi ile diğer çizgiyi kolaylıkla birleştirmeye yarar.

2.4. INSERT MENÜSÜ :

Yaptığımız işlemlerde ençok kulandığımız layer, frame, movie symbolleri üretmemizi sağlar.

Convert To symbol.: İşaretli olan symbol’den aynı özelliklere sahip başka bir symbol oluşturur.

New Symbol..: Yeni buton ,movie grafik sahneleri açmak için kullanılır.

Layer…:

Yeni layer açmak için

Motion Guide..: Motion Guide oluşturur.

Frame…: Frame Oluşturur

Delete Frame..: Oluşturulan frame’i silmeye yarar.

Keyframe…: Boş KeyFrame açar.

Blank Keyframe: Özel bir keyframe açar.

Clear Keyframe: Keyframe’leri temizlemeye yarar.

Creat Motion Tween: Hareketi için kullanılır.

Scene..: Yeni Sahne oluşturur.

Remove Scene: Oluşturulan sahneyi siler.

2.5. MODIFY MENÜSÜ:

Bir Proje oluştururken kullandığımız tüm ların özelliklerini değiştire bileceğimiz bölümdür.

Frame….: Frame ayarlarını yapmaya yarar.

Layer……: Layer ayarlarını yapmaya yarar.

Scene……: Sahne ayarlarını yapmaya yarar.

Movie…..: İşletim hızını çalışma sayfasının ayarları buradan .

Font……..: Kullanılacak fontun seçimine yarar.

Paragraph..:Yazının hangi çerçeve de olacağını

Paragraf aralığını belirler.

Style………: Yazının hangi formatta yazılacağını belirlememize yarar.

Kerning….: İstenilen belgeyi veya Sahneyi siler.

Transform….: İstenilen belgeyi veya

şekli döndürmemize yönünü değiştirmemize yarar.

Arrange..: İstenilen yazının veya şeklin Önde Veya arkada olmasına verilen yerdir.

Curves….: Çizilen çizgilerin yumuşak mı? yoksa kesin çizgili mi? Olacağının ayarlarını yapar.

Frames…: Frameler de yer alan bilgileri ters çevirmeye yarar.

Aling……..: Yazının veya şeklin nerede olacağının ayarlamalarını yapar.

Group……: Farklı şekilleri tek parçaymış gibi göstermek için kullanılır. Onları bir araya toplar.

Ungroup..: Aynı şekilmiş gibi görünen parçaları ayırmaya yarar.

2.6. CONTROL MENÜSÜ :

Yapmış olduğumuz hareketli resmin oynatımının ayarlamasının yapılmasını sağlar.

Play..: Hareketli sahnemizin oynatılmasına yarar.

Rewind..: Bir oynatım sahnesinde en baş frame dönmeye yarar.

Step Forward..: adım adım ileriye götürür.

Step backward..: Adım adım geriye gelmemize yarar.

Test Movie..: Yaptığımız ’i test etmeye yarar.

Test Scene..: Yapılan sahneyi test etmeye yarar.

Loop Playback..: İşletilen harekelerin hiç durmadan devam etmesine yarar.

Play all Scenes..: Bütün sahnelerin oynatılmasına yarar.

Enable Frame Actions : Kare eylemlerini aktifleştirir.

Enable buttons…: Düğmeleri etkinleştirir.

Mute Sounds…: Kullanılan bütün dosyalarını kapatır.

2.7. LIBRARIES MENÜSÜ.:

ının içinde hazır bulunan bizim kullanmamız için yapılmış örnekler.

Buttons………………: Hazır buton örnekleri bulunmaktadır.

Button-Advanced.: Hazır ileri buton örnekleri bulunmaktadır.

Graphics…….: Grafik önekleri yer alır.

Movie Clips..: Haraketli klipler örnekleri yer alır.

Sounds……….: örnekleri yer alır.

2.8. WINDOW MENÜSÜ.:

New Window…: Yeni pencere açmamıza yarar.

Arrange All……: Bütün pencereleri tek pencerede gösterir.

Cascade………..: Pencereleri küçülterek ard arda sıralar.

Toolbar………..: Araç Kutusunun ayarlanmasına yarar.

Inspector……….: Scenelerin müfettişliğini denetlemesini yapar onlar hakkında bilgi verir.

Controller………: Kontrol tablosunun çıkmasına yarar.

Colars……: ayarlaması yapmaya yarar.

Output……: Çıkışta verilerin alınmasına yarar.

Library…..: Kendi çalıştığımız penceredeki kullandığımız buton, movie vs. burada saklar.

2.9. YARDIM MENÜSÜ.:

Bu menü de hakkında bilmediğiniz yanlarını dersler halinde görerek öğrenebilirsiniz. Tabi ki ingilizce bilenler için.

3. BIRDEN FAZLA KATMAN ÜZERİNDEKİ NESNELER BU KATMANLARIN KULLANILMASI

Nesneleri üst üste bindirerek bir üçüncü boyut yanılsaması .Bir Katman da (Layer) sembolleri üst üste yığarak oluştururuz.Ancak filmimizde daha fazla öğe kullandığımız için bir tek katman öğelerin yığılma sırasını denetleyemez izlemek güçleşir.Katmanlar bu işi kontrol ederler.

3.1. Timeline Katmanı :

3.1.1. Yeni Bir Katman Eklemek :

Insert menüsünden layer’ı seçin.Ya da timeline’da Add Layer düğmesine basarak yeni bir katman elde ederiz.Timeline da bir katman seçin. ,her zaman yeni katmanı seçili olanın üstüne ekler.

3.1.2. Bir Katmanı Silmek :

Timeline da silinecek katman seçilir. Çöp tenekesi sembolüne basılarak silme işlemi . Bir den fazla katmanı silmek içinde Ctrl tuşuna basılı tutarak silmek istediklerimizi seçip çöp tenekesi sembolüne tıklayarak silme işlemi sona erer.

3.1.3. Katmanların özellik ayarları :

Modify menüsünden Layer’ı seçelim.Layer Properties iletişim kutusu açılır.Burada katmanın ayarlarıyla oynama yapabiliriz.

İpucu :

Katmanların bağlam menüsü, Timeline’ daki düğmelerle ulaşamayacağınız bazı seçenekler sağlar

3.1.4. Kılavuz (Guide) Katmanlar :

İki tip kılavuz katman vardır.Bunlar:

Guide (kılavuz) motion guide (hareket kılavuzu) Şeklindedir.

Guide türünde her hangi bir içerik bulunabilir. , bu tip kılavuzları son, üretilen filme katmaz.Ancak hareket kılavuzları bir nesnenin, son filmin bir parçasıdır.

3.1.5. Maske Katmanı Yaratmak :

Altlarındaki katmanlardaki nesnelerin kesin bir şekilde göstermenizi veya gizlemenizi sağlayan özel katmanlardır.Bir maske katmanı pencereli bir zarf gibidir.Bu zarfın içinde sayılarla dolu pek çok kağıt bulunabilir,ancak dışarıdan sadece isim adresin görüldüğü küçük bir pencereye sahip boş bir alan görülür.Maske katmanı pencereli zarftır,bağlı veya maskelenmiş katmanlar da zarfın içindeki kağıtlardır.

3.1.6. Maske Katmanı Oluşturmak :

Timeline da Add düğmesiyle yeni bir katman oluşturalım.Daha sonra modify menüsünden layer ‘ı seçerek layer properties iletişim kutusunu açalım.Bu rada type kısmına maskı seçip enterleyin.İşlem tamamlanmıştır.

3.1.7. Katmanları Maskeye Bağlamak :

Timeline da kelemek istediğimiz alan seçilir.Modify menüsünden layer ‘ı seçerek layer properties iletişim kutusu açılır.Type kısmında masked seçilir ok tuşuna basılır.

İpucu :

Belirli bir katman için bir maske yaratmak bu katmanı maskeye tek adımda bağlamak için bağlam menüsünü kullanın.Maskelemek istediğimiz katmana Ctrl tuşuna basılı tutarak tıklayın.Açılan menüden Mask’ı seçin., seçilen katmanın üstüne olarak bir maske katmanı ekler.

İpucu :

Timeline’ı kullanarak Dikey olarak sabitlemeniz, çok sayıda katmana aynı anda erişebilmemizi sağlar.

İpucu :

Proje görüntüsünü ayarlarken ; Show Frame (kareyi göster) Show All (tümünü göster) modlarını seçebiliriz.

4. ADIM ADIM ANİMASYON YAPIMI..:

4.1. Tımeline (Zaman çizgisi) :

Yandaki şekilde görüldüğü gibi timeline filmimizin hazırlanıp oynatıldığı karelerden oluşan alandır. Bir çizgi filmi düşünün bunun göz yansımasını çizmek için her kareye ayrı ayrı çizerek bunları belli bir zaman aralığında ard arda göstererek hareketlendirebiliriz.İşte buradaki mantıkta aynıdır. Her kareye aynı resmin varyanslarını yerleştirerek hareketlendirebiliriz.

4.2. Stage :

Stage , bir filmini oluşturan tüm grafiksel öğeleri içeren alandır. Stage’nin gerekli ayarlarını yapabilmek için menüden Modify / Movie’yi seçeriz. Aşağıdaki şekilde de gözüktüğü gibi move properties araç kutusu açılır. Stage’nin boyutunu dimesions kutucuğuna pixell cinsinden ayarlayabiliriz.Frame Rate ‘ye atayacağımız değer ile her karenin oynatma hızını belirleriz.En ideal olanı dir. Grid spacing değeri Stagemiz de kullanacağımız gridin boyutunu belirler.Default olarak bu değer 18 dir.Grid, stagemizi eşit ölçülerde karelere bölen çizgilerdir.Grid çizgiler, sahnemize grafikleri düzgün yerleştirmemizi ayrıca ölçülü grafik çizmemizi sağlar.Grid’i menüden View / Grid seçerek ulaşabiliriz. İlgili kutucuğa tıklarsak bir paleti açılır oradan dilediğimizi seçebiliri veya RGB/HEXI olarak mlayabiliriz.

4.3. Kare Kare Animasyon:

Kare kare animasyon, bilgisayardan önceki zamanlarda kullanılan geleneksel animasyon şekliydi.Canlı aksiyon filmleri aslında bir kare kare animasyon şeklidir. kamerası, oldukça fazla çekerek hareketi aktarır.Animasyonlar, bir hareketin farklı aşamalarında nesnelerin çizimlerini göstererek hareketi taklit ederler.

‘ta farklı içeriği farklı karelere yerleştirerek kare kare animasyonlar hazırlayabiliriz., yeni içeriği içeren karelere (keyframe) anahtar kare adının verir.

4.4. Tımelıne ‘ın Kullanılması:

Bütün İşlemlerimizi gerçekleştirdiğimiz alandır.Projelerimizde tamamen timelineları kullanırız.

Bir katmanı ilk kez oluşturduğumuzda timeline’da gördüğümüz kareler olan ana kareler (protoframe) , filminizde yaratacağımız kareler için yer tutucudur. , varsayılan durumda her katmanın ilk karesini anahtar kare (keyframe) olarak mlanır. Her filmde en az bir karenin bulunması gerekir.Daha sonraki karelere içerik eklemek için, anahtar kareler eklememiz gerekir.

anahtar karelerin oluşturulması için insert blank keyframe , tümüyle boş bir anahtar kare mlar insert Keyframe o kamandaki bir önceki anahtar karenin içeriğinin kopyasına sahip bir anahtar kare mlar. insert Blank Keyframe komutunu, Stage ‘in içeriğini tümüyle değiştirmek istediğimizde kullanmalıyız. Insert Keyframe ‘i, önceki anahtar karenin içeriğini kopyalamak istediğimiz zaman kullanırız.

İpucu :

Genellikle , menü çubuğuna gitmek yerine , Timeline daki bir kareye Ctrl ile sağ tıklayarak karenin bağlam menüsünü açabiliriz.

İpucu :

Bazı kısa yol tuşları ıyla keyframelleri oluşturabilir düzenleyebiliriz.

Bunlar ;

F5 : Boş bir keyframe açar.

F6 : KeyFrame açar.Önceden keyframe varsa aynısını buraya kopyalar.

F7 : İşaretli bir KeyFrame açar.

Shift+F5 : Keyframe’i siler.

Shift+F6 : Keyframe’i temizler.

Ctrl+Alt+C : Kopyasını alır.

Ctrl+Alt+V : Yapıştırır.

4.5. Animasyonların Yumuşatılması:

Kabaca yaptığımız animasyonlar çok hızlı hareket etmektedir.Bunu önlemek gerekir.Bu işlemi yapabilmek için daha fazla keyframe eklememiz gerekir. Keyframeleri eklerken nesnemizin konumun da hafifçe değiştirmemiz lazımdır.

4.6. Animasyona Keyframeler :

Bir önceki paragraf da anlattığım olayları yapmak için gerekir.İlk kare seçelim.Daha sonra menüden insert / Frame tıklayalım.Bu olayı birkaç kez tekrarlayalım.Her tekrarlamamızda yeni dolu kareler oluşacaktır. Dikkat edersek işaretli olan karenin aynı özelliklere sahiptir.

4.7. Onion Skin (Soğan Zarı) Modu:

4.0’ın bu özelliği ile oluşturduğumuz animasyonun tüm karelerindeki nesnelerin durumunu görmemizi sağlar.Ancak komşu karelerin içeriğini donuk renkte tel kafes konumunda görürüz.Onion Skin timelinenın hemen alt kısmında bulunur.Aşağıdaki şekilde gösterilmiştir.

İpucu :

Donuk renkteki komşu kareleri kesinlikle düzenleyemeyiz.

4.8. Onion Skin Outlines Modu:

Timeline durum çubuğunda onion skin outlines düğmesine tıklayarak kullanıma açılır.Onion skin işaretçilerinin arasında kalan tüm karelerin içeriği , dış hatlar şeklinde gösterilir. Dış hat nesnelerinini düzenleyemeyiz.

4.9. Edit Multiple Frames Modu:

Bu modda skin işaretçilerinin belirttiği karelerdeki tüm nesneleri görebilir düzenleyebiliriz.Bu hareketli bir nesnenin tüm anahtar karelerde aynı anda taşınabilmesini sağlar.

Bu modda bir seçim dikdörtgenini kullanarak onion skin işaretçilerin arasındaki karelerin herhangi birindeki nesneleri seçebiliriz.Ayrıca burada hareketli bir nesnenin yerini tamamen değiştirebiliriz.

Onion skin Edit Multiple Onion Skin Outlines Edit Multiple

Kullanımı Kulnanımı

4.10. Yapılan Animasyonların Test Edilmesi:

Control menüsünden play menusunu seçerek yaptığımız animasyonu test etmemiz mümkündür.

5. MOTION TWEEN İLE ANİMASYON.:

Kare kare animasyonun iki ana dezavantajı bulunmaktadır. Bunlardan birincisi yoğun emek harcanması, ikincisi de dosya boyutlarının büyük olmasıdır. ara doldurma kareleri ile her iki problemi hafifletmiştir.

Bir nesneye TWEEN (ara doldurma) uygulamak için , o nesnede bir dizi artımlı değişiklikler oluşturur.Bu değişikler yeterince basittir , bu sayede bunların tümünü matematiksel olarak mlayabilir. iki tipte TWEEN gerçekleştirir.Bunlar MOTION (hareket) SHAPE (şekil) ‘dir

4.0 Motion tween’deki adımları kolaylaştıran Create motion Tween (Hareket için ara doldurma oluştur) komutunu sunar. CMT komutu Tween dizisinin başında sonunda birer anahtar kareye almamızı sembolleri kullanmamızı sağlar.

5.1. Motion Tween Shape Tween:

Motıon Tween (hareket için ara doldurma) veya shape tween (şekil için ara doldurma ) arasında seçim yapmanın anahtarı kendinize bu değişimi bir iletişim kutusu veya denetçi (inspector) penceresiyle yapıp yapmayacağını sormaktadır. Bu sorunun cevabı evetse , değişikliği Motion Tween ile yapabilir. Cevap hayırsa , (değişiklik vektörel bir nesnenin şeklinin yeniden çizilmesi gerekiyorsa) , Flas’ın Shape Tween’i kullanması gerekir.

Motion Shape Tween arasındaki bir diğer önemli fark , motion tween ‘in sadece gruplar veya semboller üzerinde kullanılmasıdır.Shape tween , sadece düzenlenebilir şekillerde kullanılabilir.Bazen motion veya shape tween kullanarak aynı etkiyi elde edebiliriz.

5.2. Motion Tween’e Bir Örnek:

Yeni bir dosyası oluşturalım bir isim verelim.

Timelineda birinci kareyi seçelim.Oval aracını kullanarak line color yani çizgi olmayan stagemizin yani sahnemizin üst tarafına bir yuvarlak çizelim.Eğer yuvarlağın topa benzemesini istersek fill color yani doldurma rengi olarak radyant kullanırız.

Timelineda birinci kare seçili iken insert menüsünden create motion tween’i seçelim.

stagedeki nesnelerden bir sembol oluşturur bu sembolde o filmde yaratılan tween nesnelerinin sayısına bağlı olarak varsayılan bir isim verir. Örneğimizde 1 top kullandığımıza göre tween1 ismini verelim.Bu ismi sonra sağ tıklayarak değiştirebiliriz.

Şimdi timelinede 5.kareyi seçelim insert / frame komutunu tıklayalım. 2.kareden 5. kareye kadar kesik çizgiler içeren kareler ekler.Bunun anlamı şudur:Bu karelerin bir motion tween içermek üzere ayarlandığını ancak ın ara doldurma işlemini tamamlayamadığını belirtir.Burada animasyonumuzun sonunda topun nerede bulunacağını belirten anahtar kareyi eklememiz gerekir.

5. karede topumuz aşağıya doğru tıklayacağına göre topu bir miktar aşağıya taşıyalım. Bu işlemden sonra timeline 1. 5. kareler arasında bir okun belirdiğini görürüz.yani5.karede eksik olan anahtar karemizin tamamlandığı anlamını verir.

Şimdide 10.kareyi seçelim insert / Frame komutunu verelim. 5 . maddeden itibaren aynı şeyleri tekrarlayalım.10. karede iken topu bu kez yukarıya doğru taşıyalım.10. karemizdeki eksik olan anahtar karemizi de böylelikle tamamlamış olduk .Artık Control menüsünden Play veya Ctrl+Enter tuşu ile filmimizi keyifle seyredebiliriz.

5.2.1. Tween Özelliğinin Ayarlanması:

Çalışan bir motion tween elde etmek için üç şeye ihtiyacımız olacak.Bir grup veya bir sembol içeren bir başlangıç anahtar karesi .Motion Tween olarak mlanmış ara doldurma kareleri değişiklik uyguladığımız aynı grubu veya sembolü içeren bir bitiş karesi.

5.2.2. Frame Properties İletişim Kutusunu Kullanarak MOTION TWEEN mlamak:

Yeni bir doküman açalım.Timeline 1. kareyi seçelim oraya bir içi dolu bir top çizelim.

Topu seçip Modify menüsünden GRUP komutunu seçelim.

timeline 5.kareyi seçelim insert / Keyframe komutunu tıklayalım.

Timelinede 10.kareyi seçelim insert / Keyframe komutunu seçelim.

5. kareyi seçelim topu sahnenin alt tarafına doğru sürükleyelim.Şimdide 10. kareyi seçelim topu sahnenin üst tarafına doğru sürükleyelim.

1.kareyi çift tıklayalım.Bu eylemden sonra Frame Properties iletişim kutusu açılır.Bu kutudan tweening kulakçığına tıklayalım.

Tweening menüsünden motion’u seçelim.Motion Tween parametreleri görülür.Daha sonrada tamamı tıklayalım. 1. 5. karelerde motion tween yaratır.

Şimdide 5. kareyi seçelim 6. adımda işlemi aynen tekrar edelim.Bu işlemden sonra 5. 10. kareler arasında da sıçrayan topumuzun ikinci yarısı olan tween oluşturulur.

5.3. Efeklerinin Canlandırılması:

Tweening , sadece bir nesnenin sahnedeki yerini değiştirmekten ibaret değildir.Bir nesnenin rengine de Tween değişimleri uygulayabiliriz.

Yeni bir dosyası oluşturalım.

Timelinede 1. kareyi seçilim sahnede bir sembol yada gruplanmış bir nesne yerleştirelim.

Timelinede 5. kareyi seçelim insert / Keyframe komutunu çalıştıralım.

1. kareyi veya onunla ilişkili ara doldurma karelerinden herhangi birimi (yani 2’den +’e kadar olan kareler) seçin. Menüden İnsert / Create Motion Tween’i seçelim. , Nesneyi üç geçerli adımda yeniden renklendirir.Her ara doldurma karesinde bir adım kullanılır.

5.4. Boyu Değişen Nesnelerin Canlandırılması:

Yeni bir dosyası oluşturalım.

Timelinede 1. kareyi seçelim sahnede bir nesne oluşturalım.

1.kare seçiliyken İnsert / Create Motion Tween ‘i seçelim.Bu şekilde nesnemizi bir sembole dönüştürür.

Timelinede 5. kareyi seçelim insert / Keyframe komutu ile bir anahtarkare ekleyelim.5. karedeyken, scale aracı ile nesnemizin boyunu biraz büyütelim.

Timelinede 1. veya onunla ilişkili karelerden (2-3-4) birine çift tıklayalım.Frame properties iletişim kutusundan tweening kulakçığına tıklayalım.Görünen motion tweening parametrelerinden tween scaling’i seçerek ok’e tıklayalım.Bu eylemden sonra 1.kareden 5.kareye kadar nesnemizin boyunu eşit olarak artırır veya azaltır.

Şimdide nesnemizi küçültelim. Timeline 10. kareyi insert / Keyframe komutunu çalıştırır.10. karede iken scale aracı ile nesnemizin boyunu küçültelim.bir önceki adımı tekrarlayalım.

5.5. Nesnelerin Döndürülmesi:

5.5.1 - Bir Nesneyi 360 Dereceden Az Döndürmek:

Yeni bir dosyası açalım.

Timelinede 1. karede iken bir nesne oluşturalım.

Eğer yeni bir nesne oluşturduysak nesnemizi seçelim modify / group veya insert / Conwert To Symbol ‘ü tıklayalım.Motion Tween’leri sadece gruplanmış veya sembolleri kullanarak yaratabileceğimizi unutmayalım.

Timelinede 5.kareyi seçelim insert/ Keyframe yapalım.5.kare seçiliyken nesnemize ROTATE aracı ile 90 derece sağa döndürelim.

Timelinede 1. kare veya onunla ilişkili olan 2-3-4. karelerden birini seçelim çift tıklayalım. Bu işlemden sonra açılan frame properties iletişim kutusundan tweening kulakçığına tıklayalım.Açılan menüden motion’u seçelim.Burada dönüş için ’a bir yön vermeliyiz.

AUTOMATIC : Nesneyi en az hareket gerektiren yönde döndürmesini sağlar.

CLOCKWISE : Nesne saat yönünde döner.

COUNTERCLOCKWISE : Nesne saat yönünün tersine döner.

ClockWise’ ı seçerek entere basalaım.

5.5.2 – Bir Nesneyi Çevirmek:

Rotate açılır menüsünden clockwise’i seçelim.Times kutusuna 1 değerini girelim.Buraya gireceğimiz değer ’ın nesneye ara doldurmayı uygulayacağını belirler.

5.6. Tween Hızının Değiştirilmesi:

Frame Properties iletişim kutusunda EASE IN / EASE OUT kaydırma çubuklarını kullanarak bir animasyonun bir tween serisinin başında sonundaki hızını değiştirebiliriz.

Easing kaydırma çubuğunu sola , in kelimesine doğru sürüklenmesi halinde easing alanına negatif bir değer girer.Ease in animasyonun yavaş başlamasını sona doğru hızlanmasını sağlar.Easing alanına girilecek değer –1 ile –100 arasında değişir.Hızlı başlayıp sonra yavaşlaması içinde in yerine out kullanılır.

6. KARMASIK ANİMASYON:

Önceki bölümlerde nesneleri düzenlemeyi bir tek layer üzerinde tek tek hareketlendirmeyi anlattım.

6.1. Scene (Sahneler) Hakkında :

Şimdiye kadar timeline üzerinde fazla işlem tım.Ama da bir hazırladığınızı düşünürsek ,yüzlerce kare üzerinde işlem yapmamız gerekecektir.Bu da baya zor bir iştir.Oysa scene yani sahneler ile çalışmak hem kolay hem de filmimize tam anlamıyla hakim olmamızı sağlar.Her sahne kendi içinde bir gibidir.Tabi sahne hazırlamak da zor bir iştir.

sahneleri oynatmak için komutlarımızı bekler. 4.0’ın SCENE ISNPECTOR penceresi, filmimizde hangi sahnelerin bulunduğunu görmemizi yeni sahneler oluşturmamızı sağlar.

Filmimiz karmaşıklaştıkça , layer eklememiz gerekir.Seçil layer kareler üzerinde düzenleme işlemleri yapabiliriz.

6.2. Çok Sayıda Motion Tween Kullanılması:

Daha önceki bölümlerde ki gibi layerlar da bir nesneye motion tween uygulayabilir.Çok sayıda nesneye aynı anda motion tween uygulayabilmek için, her nesneyi ayrı bir layer’a yerleştirmemiz gerekir.Tüm nesnelerin doğru zamanda doğru yerde olduğundan emin olmak için ,onion skin edit multiple frame modlarını kullanabiliriz.

7. BUTON YAPIMI.:

7.1. Basit Bir Rollover Düğmesinin Yapılması :

bir düğmenin dört karesini Up ,Over, Down Hit şeklinde etiketler. UP durumunda , statik, kullanılmayan bir düğme gibi görünen nesne oluşturulur. OVER durumunda ise imleç düğmenin üzerine geldiğinde nesnenin görüneceği durumu oluştururuz. Genellikle , izleyiciye farenin canlı bir düğme üzerinde olduğunu bildirmek için bir tür görsel değişime gerek duyarız. DOWN durumunda ise ; birisi düğmenin üzerine tıkladığında nesnenin görüneceğini olutururuz. HİT karesi adı verilen dördüncü frame alanı ise ; düğmenin sınırını mlayan bir nesne oluşturur.Bu karedeki herhangi bir düz grafiksel alan, fare hareketlerinin düğmeyi tetiklediği yer haline getirir.

7.2. Düğme Sembolü Oluşturmak:

İnsert memnüsünden New Symbol ‘ü seçelim veya Ctrl+F8 tuşlarına basarakta yeni bir sembol oluşturabiliriz.Symbol properties iletişim kutusu görülür. Açılan metin kutusuna bir isim girmemiz lazım.Daha sonra buton sekmesine tıklayalım.Artık yeni bir buton’a sahibiz.

Burada önceki başlıkta anlattığım gibi 4 yer bulunmakta.Bunlara gerekli şekilleri çizelim.Artık kütüphanemize butonumuzu aktarmış olduk. İstediğimiz yerde kütüphaneden çağırıp kullanabiliriz.

İpucu :

Bir web sitesinde tutarlı bir görünüm sağlamak için , bir düğme grubunu tekrar tekrar kullanmak isteyebiliriz. Hatta sadece ufak değişiklerle, düğmeleri çok sayıda projede tekrar tekrar kullanabiliriz.

İpucu :

Bir düğmenin up,down over karelerini görmek için , o düğmeyi library penceresinden seçerek önizleme penceresinden Play düğmesine de basabiliriz. önizleme penceresinden her kareyi sırasıyla gösterir.

İpucu :

Hazırladığımız bir butonu Control menüsün den Enable Buttons seçeneğini seçerek aktif hale getirebiliriz. Böylece butonumuzu önceden çalıştığını test imkanımız olur.

7.3. Hareketli Bir Düğme Oluşturmak:

Önceki anlattığım aşamalarda düğmeler, kullanıcı onlarla etkileşime girdiğinde değişmeler bize göre hareketli gibidir. ayrıca tümüyle hareketli düğmeler oluşturmamızı sağlar.bu ilemi sağlamamızın püf noktası düğmemizin karelerine kısa kısa filmler eklemektir.

7.4. Bir rollover düğmesini canlandırmak için gereken adımlar :

İnsert menüsünden New symbol seçilir.

Symbol properties menüsünde butonumuza bir isim veririlir.

Buton seçeneği işaretlenerek Onaylanır.

Düğmenin Timeline’da up,over down karelerini seçelim.

İnsert frame’i seçelim., düğmenin up,over down karelerini boş anahtar kareler oluşturur.

Timeline ’da up karesini seçelim bir Movei clip sembolü oluşturalım veya mevcut filmlerin birinden ithal edelim.

Timeline ‘da over karesini seçelim bir move clip sembolü oluşturalım.

Timeline ‘da down karesini seçelim.Bir move clip sembolü oluşturalım veya mevcut olanları kullanalım.

Timeline ‘da hit karesini seçip üç düğme durumunun tüm düğme alanlarını kaplayan bir grafik oluşturalım

Pencerenin sol üst köşesinden geçen sahnenin adına tıklayarak düzenleme moduna geri dönelim. Atık kullanıma hazırlanmış olur.

7.5. Düğme Eylemlerinin Eklenmesi:

1. 2. karelerinde anahtar kareler bulunan bir oluşturalım.

Text aracını kullanarak bir metin ekleyelim

Her kareye bir stop eylemi ekleyelim.

Timeline ‘da 1.kareyi seçelim.

Bir düğme oluşturalım.

Stage ‘de düğme sembolünün bir örneğini çıkartalım düğmeyi seçelim.

Modify menüsünden İnstance seçelim. İnstance properties iletişim kutusu açılır.

Actions sekmesine tıklayalım

Add açılır menüsünden goto bibi bir eylem seçelim.

;

On (Release)

GoTo and Stop (1)

End On

Eylemlerini oluşturur.

Bu şekilde diğer eylemleri de ekleye bilir butonla ilişkilendirebiliriz.

7.6. Olaylarla ilgili Bazı Parametreler :

Press: İmleç bir düğmenin üzerindeyken hit alanı içindeyken bir tıklama eyleminin düğmeye basma kısmını belirtir.

Release: Bir tıklamada tuşun geri geldiği yeri belirtir.

Releas Outside: Kullanıcı düğme alanını içine tıkladığında, düğmenin tuşunu basılı tuttuğunda fareyi tuşunu bırakmadan aktif hale alanın dışına sürüklediğinde ortaya çı.

Roll Over: İmlecin düğme alanını içine girmesidir.

Roll Out: İmlecin düğme alanından çıkmasıdır.

Drag Over: Aktif düğme alanını içinde farenin tuşuna basılı tuttuğunda, imleci düğme alanının dışına çıkardığında imleci tekrar düğme alanına getirdiğinde ortaya çı.

Drag Out: Drag Over ‘ın tersidir.

Press: düğmesi mevcutken,kullanıcının belirtilen tuşa basmasıyla ortaya çıkan eylemdir.

WEB SAYFALARININ TAM GÖSTERİLMESİ.:

Yeni bir sayfa açarak ilk frame’e stop action’ı koyun. Bu frame’e bir buton koyun butonun üzerine çift tıklayın. Açılan ekranda “Actions” u seçin.

+ butonuna basarak Get URL yi listeden seçin. Yanda açılan kutuya aşağıdakileri yazın:

:openfullscreen()

 File>Publish butonuna tıklayın. and ı seçerek publish butonuna tıklayın. Bu işlem yaptığınız swf yi içeren bir dökümanı oluşturacak.

dökümanını bir editör ile açın aşağıdaki satırları ekleyin

<?xml version="1.0" encoding="iso-8859-9"?>

<config>

<item>

<name>databasename</name>

<data><![CDATA[turbulance]]></data>

</item>

<item>

<name>username</name>

<data><![CDATA[eternity]]></data>

</item>

<item>

<name>password</name>

<data><![CDATA[8f10d078b2799206cfe914b32cc6a5e9]]></data>

</item>

<item>

<name>dbtype</name>

<data><![CDATA[mysql]]></data>

</item>

</config>

Gördüğünüz gibi son derece basit yapıda bir XML dosyası kullanacağız. <item> etiketleri arasına dosyada bulunmasını istediğimiz kayıtlar bulunuyor. Her kayıdın ismi <name> etiketi içerisinde, verisi ise <data> etiketi içerisinde yer alıyor. Dosyadaki <![CDATA[****]]> bölümleri gözünüzü korkutmasın. Bu blok sayesinde yazdığımız string içerisindeki < > gibi karakterlerin gözardı edilmesini sağlıyoruz.

Şimdi geldik işin asıl büyülü kısmına ;) ile bu tip konfigürasyon dosyalarını okuyabilmeli, güncelleyebilmeli veya sıfırdan yaratabilmeliyiz. Bunun için Config isimli bir class yazacağız. XML dosyalarını parse etmek için bildiğiniz gibi iki aytı API var. Bizim için hız önemli olduğu için SAX (Simple API for XML) kullanacağız. İşte class'ımız:

class Config

{

var $tag; // Bulunduğumuz tag

var $; // sayısı

var $file; // Konfigürasyon dosyası

var $itemData = array(); // Verilerin tutulacağı array

var $encoding; // XML dosyasında kullanılacak olak karakter seti

/**

* Class constructor'i. Bu classa ait herhangi bir obje oluşturmak için kullanacağımız

* class metodu.

*

* @param $encoding XML dosyasında kullanılacak olak karakter seti

*/

function Config($encoding = 'iso-8859-9')

{

// Başlangıç verileri

$this->encoding = $encoding;

$this->tag = "";

$this-> = 0;

}

/**

* için kullanılacak XML dosyasını belirleyen metod.

*

* @param $file Dosya adı

*/

function setFile($file) {

$this->file = $file;

}

/**

* Bu metod 'nin SAX API'si olan EXPAT için gereklidir.

* Bu metodu kullanarak XML parser herhangi bir açılış etiketine rastladığında ne yapacağını

* belirleyebiliriz.

*

* @param $parser Parser handle

* @param $name Parser'ın şılaştığı etiket ismi

* @param $attributes etikete ait özellikler

*/

function startElementHandler($parser, $name, $attributes)

{

// Şuanda üzerinde çalıştığımız etiket ismini hafızaya al

$this->tag = $name;

}

/**

* Bu metod 'nin SAX API'si olan EXPAT için gereklidir.

* Bu metodu kullanarak XML parser herhangi bir kapanış etiketine rastladığında ne yapacağını

* belirleyebiliriz.

*

* @param $parser Parser handle

* @param $name Parser'ın şılaştığı etiket ismi

*/

function endElementHandler($parser, $name)

{

// Hafızadaki etiket ismini temizle.

$this->tag = "";

// Eğer etiket adı ITEM ise sayacını bir arttır.

if ($name == "ITEM")

{

$this->++;

}

}

/**

* Bu metod 'nin SAX API'si olan EXPAT için gereklidir.

* Bu metodu kullanarak XML parser herhangi bir veri bloğuna geldiğinde ne yapacağını

* belirleyebiliriz.

*

* @param $parser Parser handle

* @param $data Açılış kapanış etiketleri arasında yer alan veri

*/

function characterDataHandler($parser, $data)

{

// Okunan veriyi temizle

$data = trim(htmlspecialchars($data));

// Eğer üzerinde çalıştığımız etiket NAME ise

if ($this->tag == "NAME")

{

// itemData array'ine isim kaydını gir

$this->itemData[$this->][0] .= $data;

} elseif ($this->tag == "DATA") {

// Eğer üzerinde çalıştığımız etiket DATA ise

// itemData array'ine veri kaydını gir

$this->itemData[$this->][1] .= $data;

}

}

/**

* Bu metod belirtilen dosyanın XML parser tarafından parse edilmesini sağlar

*/

function parseXml()

{

// Parser'ı oluştur

$this->xmlParser = xml_parser_create();

// Obje referansını gir (Bu xml parser'ı bir class içinde kullandığımız için gerekli)

xml_set_object($this->xmlParser, $this);

// Parser'a ait bazı özellikleri belirle

// Büyük küçük karakter ayrımı yapmaması için:

xml_parser_set_option($this->xmlParser, XML_OPTION_CASE_FOLDING, TRUE);

// White Space olarak tabir edilen boşluk, satırsonu karakteri gibi karakterleri gözardı

// etmesi için:

xml_parser_set_option($this->xmlParser, XML_OPTION_SKIP_WHITE, TRUE);

// Daha önceden mladığımız metodların XML parser tarafından kullanılması için mladığımız

// bu fonksiyonları bildiriyoruz.

xml_set_element_handler($this->xmlParser, "startElementHandler",

"endElementHandler");

xml_set_character_data_handler($this->xmlParser, "characterDataHandler");

// Dosyayı oku

if (!($fp = fopen($this->file, "r")))

{

die($this->file . " dosyası okunamadı");

}

// Parse etmeye başla

while ($data = fread($fp, 2048))

{

if (!xml_parse($this->xmlParser, $data, feof($fp)))

{

die("Şu meydana geldi: " .

xml_error_string(xml_get_error_code($this->xmlParser)));

}

}

// Parser'ı yoket

xml_parser_free($this->xmlParser);

}

/**

* Varsayılan karakter seti olarak kullandığımız iso-8859-9 karakter setinden

* başka bir karakter seti kullanmak için bu metodu çağıracağız.

*

* @param $encoding Geçerli kılınacak karakter seti

*/

function setEncoding($encoding) {

$this->encoding = $encoding;

}

/**

* Konfigürasyon verileri içerisinde isme göre arama yapabilmemizi sağlayan

* metod. İsmini verdiğimiz veriyi bize döndürür.

*

* @param $name Arama yapılacak olan ismi

*/

function getByName($name) {

foreach ($this->itemData as $item) {

// Eğer verilen isim ile ismi tutuyor ise kayda ait veriyi döndür.

if ($name == $item[0]) return $item[1];

}

// Eğer bu satıra erişilmiş ise bulunamamış demektir. False döndür.

return false;

}

/**

* Konfigürasyon verileri içerisinde kaydın bulunduğu sıra biliniyorsa bu method

* ile daha hızlı erişim sağlanabilir. Bu method ismine göre arama yapma

* ihtiyacı duymadığı için daha hızlı çalışmaktadır.

*

* @param $id Verisi görüntülenecek kayda ait id numarası. Dosyadaki ilk kaydın numarası 0 olacak şekilde.

*/

function getById($id) {

if(isset($this->itemData[$id])) {

// Eğer verilen id'ye göre bir var ise verisini döndür.

return $this->itemData[$id][1];

} else {

// bulunamadı ise false döndür.

return false;

}

}

/**

* Konfigürasyon verileri içerisindeki herhangi bir kaydı güncellemek için

* ismine göre arama yaparak kullanabileceğimiz method.

*

* @param $name ismi

* @param $data Kayıda ait yeni veri

*/

function setByName($name, $data) {

$i = 0; // Kayıtlar arasında arama yaparken kullanacağımız sayaç

foreach($this->itemData as $item) {

// Eğer verilen ismi ile şuan geçerli ismi tutuyor ise

// döngüden çık, tutmuyor ise sayacı bir arttır.

if($name == $item[0]) break;

else $i++;

}

// Sayaç hala 0 ise ilk kayıdın (id'si gerçekten 0 olan) ismi verilen isimden

// farklı ise false döndür.

if($i == 0 && $this->itemData[0][0] != $name) {

return false;

} else {

// Eğer yukarıdaki şartlar gerçekleşmedi ise bulundu demektir.

// Kayıda ait veriyi güncelle

$this->itemData[$i][1] = $data;

return true;

}

}

/**

* Id'si verilen kayda ait veriyi günceller

*

* @param $id id'si

* @param $data Kayıda ait yeni veri

*/

function setById($id, $data) {

// Verilen id'de bir var mı kontrol et.

if(isset($this->itemData[$id])) {

// var ise verisini güncelle.

$this->itemData[$id][1] = $data;

return true;

} else {

// yok ise false döndür.

return false;

}

}

/**

* Yeni bir konfigürasyon kaydı ekler.

*

* @param $name adı

* @param $data Kayıda ait veri

*/

function addField($name, $data) {

// Şuandaki sayısına göre yeni bir elemanı itemData

// arrayine ekle.

$this->itemData[$this->][0] .= $name;

$this->itemData[$this->][1] .= $data;

// sayacını arttır.

$this->++;

}

/**

* Mevcut verilerini dosyaya yazar.

*/

function saveXml() {

// XML dosyasını string olarak oluştur

$xmlData = "<?xml version="1.0" encoding="" . $this->encoding . ""?>n";

$xmlData .= "<config>n";

foreach ($this->itemData as $item) {

$xmlData .= " <item>n";

$xmlData .= " <name>".$item[0]."</name>n";

$xmlData .= " <data><![CDATA[".$item[1]."]]></data>n";

$xmlData .= " </item>n";

}

$xmlData .= "</config>";

if (!$fp = fopen ($this->file, "w")){

die("Dosyaya yazılamadı. Dosya üzerindeki yetkilerinizi kontrol ediniz.");

} else {

// Oluşturulan stringi dosyaya yaz.

fwrite($fp, $xmlData);

fclose($fp);

return true;

}

}

// Class sonu

}

?>

Yukarıda gördüğünüz class'ın çalışma mantığını anlayabilmeniz için kodu okumanız aslında yeterli, eklediğim comment'ler ile kodun açıklayıcı olmasına çalıştım. Ama parse edilen dosyadan okunan bilgilerin bir veriyapısı içerisinde tutulduğunu anlatmak istiyorum, böylece kod içerisinde kullanılan bazı metodların çalışma prensiplerini daha rahat anlayabilirsiniz. Class içerisindeki itemData array'inin örnek olarak verdiğim XML dosyası parse edildikten sonra bir hal aldığını anlamak için 'nin var_dump() fonksiyonundan yararlanabiliriz.

array(4) {

[0]=>

array(2) {

[0]=>

string() "databasename"

[1]=>

string(10) "turbulance"

}

[1]=>

array(2) {

[0]=>

string(8) "username"

[1]=>

string(8) "eternity"

}

[2]=>

array(2) {

[0]=>

string(8) "password"

[1]=>

string(32) "8f10d078b2799206cfe914b32cc6a5e9"

}

[3]=>

array(2) {

[0]=>

string(6) "dbtype"

[1]=>

string(5) "mysql"

}

}

Peki bu class'ı kullanacağız ? Aşağıdaki örnek kodu inceleyelim:

<?

// Öncelikle class'ımızı include edelim.

require_once('confmanager.');

// Yeni bir conf nesnesi yaratalım.

$conf = new Config();

// Nesnemizin kullanacağı konfigürasyon dosyasy adını belirleyelim

// Burada dosyanın tam yolunu vermemiz gerekiyor.

$conf->setFile('config1.xml');

// Dosyaya kaydedeceğimiz konfigürasyon verilerini girelim.

$conf->addField("databasename", "turbulance");

$conf->addField("username", "eternity");

$conf->addField("password", md5("deneme"));

$conf->addField("dbtype", "mysql");

// Oluşturduğumuz verileri dosyaya yazalım.

$conf->saveXml();

?>

Yukarıdaki kodu kullanarak bir konfigürasyon dosyası oluşturduk. İnanmıyorsanız gidin bakın :P.. Şimdi ise oluşturduğumuz bu dosyayı kullanacağız ona bir bakalım…

<?

// Öncelikle class'ımızı include edelim.

require_once('confmanager.');

// Yeni bir conf nesnesi yaratalım.

$conf = new Config();

// Nesnemizin kullanacağı konfigürasyon dosyasy adını belirleyelim

// Burada dosyanın tam yolunu vermemiz gerekiyor.

$conf->setFile('config1.xml');

// Dosyayı parse edelim verileri alalım

$conf->parseXml();

// Örneğin dbtype isimli konfigürasyon verisini almak istersek

$dbType = $conf->getByName('dbtype');

echo "Veritabanı tipi $dbType<br />n";

// Ya da ikinci sırada olduğun bildiğimiz username verisini almak için

// Dikkat ilk kaydın indexi 0 2. kaydın 1…

$userName = $conf->getById(1);

echo "Kullanıcı adı $userName<br />n";

// Şimdi içerisindeki password verisini değiştirelim

$conf->setByName('password', md5('yenisifre'));

// Hatta yeni bir daha ekleyelim

$conf->addField('siteName', 'infinity');

// Oluşturduğumuz verileri dosyaya yazalım.

$conf->saveXml();

?>

Evet bu makaledeki uygulama ile nesne tabanlı olarak EXPAT ile xml dosyalarını parse edebileceğinizi bu verileri kullanmanın ne kadar kolay olduğunu görmüş oldunuz. Yukarıdaki uygulama tabii ki mükemmel değil, eksiklerini olabilecek hatalarını gidermek size kalmış.

kaynak: ordan burdan

<?

/* RSS v1.1

By Richard James Kendall

Bugs to richard@richardjameskendall.com

Free to use, please acknowledge me

Place the URL of an RSS feed in the $file variable.

The $rss_channel array will be filled with data from the feed,

every RSS feed is different by by and large it should contain:

Array {

[TITLE] = feed title

[DESCRIPTION] = feed description

[LINK] = link to their website

[IMAGE] = Array {

[URL] = url of image

[DESCRIPTION] = alt text of image

}

[ITEMS] = Array {

[0] = Array {

[TITLE] = item title

[DESCRIPTION] = item description

[LINK = a link to the story

}

.

.

.

}

}

By default it retrives the Reuters Oddly Enough RSS feed. The data is put into the array

structure so you can format the information as you see fit.

*/

set_time_limit(0);

$file = "rss ";

$rss_channel = array();
$currently_writing = "";

$main = "";

$item_counter = 0;

function startElement($parser, $name, $attrs) {

global $rss_channel, $currently_writing, $main;

switch($name) {

case "RSS":

case "RDF:RDF":

case "ITEMS":

$currently_writing = "";

break;

case "CHANNEL":

$main = "CHANNEL";

break;

case "IMAGE":

$main = "IMAGE";

$rss_channel["IMAGE"] = array();

break;

case "ITEM":

$main = "ITEMS";

break;

default:

$currently_writing = $name;

break;

}

}

function endElement($parser, $name) {

global $rss_channel, $currently_writing, $item_counter;

$currently_writing = "";

if ($name == "ITEM") {

$item_counter++;

}

}

function characterData($parser, $data) {

global $rss_channel, $currently_writing, $main, $item_counter;

if ($currently_writing != "") {

switch($main) {

case "CHANNEL":

if (isset($rss_channel[$currently_writing])) {

$rss_channel[$currently_writing] .= $data;

} else {

$rss_channel[$currently_writing] = $data;

}

break;

case "IMAGE":

if (isset($rss_channel[$main][$currently_writing])) {

$rss_channel[$main][$currently_writing] .= $data;

} else {

$rss_channel[$main][$currently_writing] = $data;

}

break;

case "ITEMS":

if (isset($rss_channel[$main][$item_counter][$currently_writing])) {

$rss_channel[$main][$item_counter][$currently_writing] .= $data;

} else {

//print ("rss_channel[$main][$item_counter][$currently_writing] = $data<br>");

$rss_channel[$main][$item_counter][$currently_writing] = $data;

}

break;

}

}

}

$xml_parser = xml_parser_create();

xml_set_element_handler($xml_parser, "startElement", "endElement");

xml_set_character_data_handler($xml_parser, "characterData");

if (!($fp = fopen($file, "r"))) {

die("could not open XML input");

}

while ($data = fread($fp, 4096)) {

if (!xml_parse($xml_parser, $data, feof($fp))) {

die(sprintf("XML error: %s at line %d",

xml_error_string(xml_get_error_code($xml_parser)),

xml_get_current_line_number($xml_parser)));

}

}

xml_parser_free($xml_parser);

// output as

print ("<><head><title> RSS </title></head><body>");

if (isset($rss_channel["IMAGE"])) {

print ("<a href="" . $rss_channel["LINK"] . "" target="_blank"><img border="0" src="" . $rss_channel["IMAGE"]["URL"] . "" align="middle" alt="" . $rss_channel["IMAGE"]["TITLE"] . ""></a> <font size="5">" . $rss_channel["TITLE"] . "</font><br><br>");

} else {

print ("<font size="5">" . $rss_channel["TITLE"] . "</font><br><br>");

}

print ("<i>" . $rss_channel["DESCRIPTION"] . "</i><br><br>");

if (isset($rss_channel["ITEMS"])) {

if (count($rss_channel["ITEMS"]) > 0) {

for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) {

print ("
<table width="100%" border="1"><tr><td width="100%"><a href="" . $rss_channel["ITEMS"][$i]["LINK"] . "" target="_blank"><h2>" . $rss_channel["ITEMS"][$i]["TITLE"] . "</h2></a></b>");

print ("<i>" . html_entity_decode($rss_channel["ITEMS"][$i]["DESCRIPTION"]) . "</i>");

print ("</td></tr></table><br>");

}

} else {

print ("<b>There are no articles in this feed.</b>");

}

}

print ("</body></>");

?>

kaynak: ordan burdan

Arkadaşına Öner : http://rapidshare.com/files/77005394…ellafriend.zip
imageshak.us tarzı Upload : http://rapidshare.com/files/76550547/resim2.rar
Ajax Destekli Dosya Upload : http://rapidshare.com/files/76549044…ader_5.3.6.zip
Dosya Upload : http://rapidshare.com/files/76548238/upload_class.zip
Adam Asmaca Oyunu : http://rapidshare.com/files/76544363/hangman.zip
Webmail (e- servisi): http://rapidshare.com/files/76349145/webmail.zip
Hız Testi : http://rapidshare.com/files/76349091…meter-0.72.zip
: http://rapidshare.com/files/76349059…log_v1.3.1.zip
Sayfa Sayaç : http://rapidshare.com/files/76349058…nter-2.5.3.zip
Quiz : http://rapidshare.com/files/76347835/iquiz.zip
Upload : http://rapidshare.com/files/76346900/dodoupload.zip
Strike 1.6 “sı olan varsa, kapışma partisine bekliyorum

server:
cs45.servegame.com:27015

servera hakim durumdayız, istediğiniz map açılır.

Tüm SS kullanıcıları davetlidir.

haydeeee

Sosyal Yer İmi (Social Bookmarks) Nedir?

Display.template.Dosyasını Açın (Önce Yedegini Alın)


bul

Code:
// Show "« Last Edit: Time by Person »" if this post was edited.

Üstüne Ekle:

Code:
// Aşağıdaki Kodları Değiştirmeyiniz. Do no Edit..!!!
// Başlangıç Social Bookmarks Web 2.0 Sosyal Yer imi  by mersindost  www.simplemachines.org www.dizi24.com
echo "
<div align="left">
  <table border="0" cellspacing="1" width="30%" id="AutoNumber1" height="1">
    <tr>
      <td width="8%" valign="top" height="1" align="left">
      <!--  -->
<a target="_blank" href="http://www..com/bookmarks/mark?op=edit&bkmk=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], "&title=Remember This "><img border="0" src="" ,$settings["images_url"], "/.png" width="16" height="16" alt=" Ekle" /></a></td>
      <td width="7%" valign="top" height="1" align="left">
      <!--  -->
<a target="_blank" href="http://myweb2.search..com/myresults/bookmarklet?u=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], " "><img border="0"  src="" ,$settings["images_url"], "/.png" width="16" height="16" alt=" Ekle" /></a></td>
      <td width="7%" valign="top" height="1" align="left">
      <!-- MsnLive -->
<a target="_blank" href="https://favorites..com/quickadd.aspx?url=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], " "><img border="0"  src="" ,$settings["images_url"], "/.png" width="16" height="16" alt=" Ekle" /></a></td>
      <td width="7%" valign="top" height="1" align="left">
      <!--NetSpace -->
<a target="_blank" href="http://www.netscape.com/submit/?U=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], " "><img border="0"  src="" ,$settings["images_url"], "/netspace.png" width="16" height="16" alt="Netspace Ekle" /></a></td>
      <td width="7%" valign="top" height="1" align="left">
      <!--Ask.com -->
<a target="_blank" href="http://mystuff.ask.com/mysearch/QuickWebSave?v=2.0&amp;t=webpages&amp;title=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], " "><img border="0"  src="" ,$settings["images_url"], "/ask.png" width="16" height="16" alt="Ask Ekle" /></a></td>
      <td width="7%" valign="top" height="1" align="left">
      <!-- Clesto -->
<a href="http://clesto.com/submit.?phase=2&url=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], " " target="_blank">
      <img src="" ,$settings["images_url"], "/clesto.png" alt="Clesto Ekle" border="0" width="16" height="16" /></a> </td>
      <td width="8%" valign="top" height="1" align="left">
      <!-- Digg -->
<a href="http://digg.com/submit?phase=2&url=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], " " target="_blank">
      <img src="" ,$settings["images_url"], "/digg.png" alt="Digg Ekle" border="0" width="16" height="16" /></a> </td>
      <td width="7%" valign="top" height="1" align="left">
      <!-- Reddit -->
<a href="http://reddit.com/submit?url=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], " " target="_blank">
      <img src="" ,$settings["images_url"], "/reddit.png" alt="Reddit Ekle" border="0" width="16" height="16" /></a> </td>
      <td width="7%" valign="top" height="1" align="left">
      <!-- Furl -->
<a href="http://www.furl.net/storeIt.jsp?u=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], " " target="_blank">
      <img src="  " ,$settings["images_url"], "/furl.png" alt="Furl Ekle" border="0" width="16" height="16" /></a></td>
      <td width="7%" valign="top" height="1" align="left">
      <!-- Dec icio us -->
<a href="http://del.icio.us/post?url=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], "" target="_blank">
      <img  src="" ,$settings["images_url"], "/delicious.png" alt="Del.icio.us Ekle" border="0" width="16" height="16" /></a> </td>
      <td width="7%" valign="top" height="1" align="left">
      <!-- Jeqq -->
<a href="http://jeqq.com/submit.?phase=2&url=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], "" target="_blank">
      <img src=" " ,$settings["images_url"], "/jeqq.png" alt="Submit to Jeqq" border="0" width="16" height="16" /></a> </td>
      <td width="7%" valign="top" height="1" align="left">
      <!-- Spurl -->
<a href="http://www.spurl.net/spurl.?url=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], "" target="_blank">
      <img src="" ,$settings["images_url"], "/spurl.png" alt="Spurl Ekle" border="0" width="16" height="16" /></a>  </td>
      <td width="7%" valign="top" height="1" align="left">
      <!-- Technorati -->
<a target="_blank" href="http://technorati.com/faves/?add=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], ""><img border="0" src="" ,$settings["images_url"], "/technorati.png"  width="16" height="16" alt="Technorati Ekle" /></a></td>
      <td width="7%" valign="top" height="1" align="left">
      <!-- Newsvine -->
<a target="_blank" href="http://www.newsvine.com/_wine/save?popoff=0&u=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg=", $message["id"], "&h=Remember This "><img border="0" src="" ,$settings["images_url"], "/newsvine.png" width="16" height="16" alt="Newsvine Ekle" /></a></td>
      <td width="7%" valign="top" height="1" align="left">
      <!-- Simpy -->
<a target="_blank" href="http://simpy.com/simpy/LinkAdd.do?note=Remember This &href=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], ""><img border="0"src="" ,$settings["images_url"], "/simpy.png" width="16" height="16" alt="Simpy Ekle" /></a></td>
      <td width="7%" valign="top" height="1" align="left">
      <!-- Blinklist -->
<a target="_blank" href="http://www.blinklist.com/index.?Action=Blink/addblink.&Url=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], "&Title=Remember This "><img border="0" src="" ,$settings["images_url"], "/blinklis.png" width="16" height="16" alt="BlinkList Ekle" /></a></td>
      <td width="7%" valign="top" height="1" align="left">
      <!-- Shadows -->
<a target="_blank" href="http://www.shadows.com/features/tcr.htm?url=", $scripturl, "/topic,",$context["current_topic"], ".", $message[""], ";msg", $message["id"], "&title=Remember This "><img border="0"  src="" ,$settings["images_url"], "/shadows.png" width="16" height="16" alt="Shadows Ekle" /></a></td>
    </tr>
  </table>
</div>";
// Social Bookmarks Web 2.0 Sosyal Yer imi  by mersindost  www.simplemachines.org www.dizi24.com

Ekteki Dosyada Bulunan resimleri images Klasörüne Yükleyiniz
demo

http://uploaded.to/?id=1lbm0h
(ç)alıntıdır