Bu sayfadaki yazılar
Sayfanın metni
Sayfa 53
Aslında çapraz geliştirme kapsamlı bir konu ve anlatılabilecek çok fazla ileri düzey konu var. Örneğin Commodore 64 üzerinde bir vektör şehri yaratmak ya da basit bir video göstericisi programlamak. Ancak şu anki durumda bu son verdiğim örneğin bile Türkiye'de çok sınırlı bir kesime hitap edeceğini düşünüyorum. Dolayısıyla da daha ileri düzey konulara el atmak yerine, yeni bir yazı dizisine başlamak ve yalnızca çapraz geliştirmeye dayanan konularla sınırlı kalmamak bana daha uygun geliyor.
Özellikle bu son bölümü okuyan kişiler bu yazıyı biraz eksik bulabilirler. Evet, bazı kavramlar yeterince detaylı açıklanmıyor ancak bu yazının eksikliği değil, aksine fazlalığından kaynaklanıyor. Bu yazıda çapraz geliştirmeyle doğrudan ilgili kısımlar lineer interpolasyon hesapları ve sinüs hesapları. Bunun haricindeki kısımlar fazladan ve biraz da mecburiyetten anlatılmış bölümler. Aslında yan border açmayla ilgili kısma da bir cycle hesaplayıcı eklemeyi düşündüm ancak bunun da şu an için kafa karıştırmaktan daha öteye gitmeyeceği kanısına vardım.
Özetlemek gerekirse "Yan Border Açma", "FLD", "$d017 Stretch", "Yumuşak Renk Değiştirme" konuları fazladan açıklanmış konulardır. Amaç, diğer dokümanlardan okuyup öğreneceğinizi varsaydığım bu konuları buradaki örnekle bağdaştırabilmenizi kolaylaştırmaktır.
Bu bölümün yazının son bölümü olması, Test Platformu - Bölüm 5'in olmayacağı anlamına gelse de, zamanla bana gelecek talepler doğrultusunda böyle bir devam bölümünün olma ihtimali de var. Yalnızca Plazma'da her sayı devam eden seri burada sona eriyor. Belki ileriki sayılarda yeni bir Test Platformu ile yeniden karşınıza çıkabilirim. Şimdi eğer hala denemediyseniz "stretch.prg" dosyasını emülatörden çalıştırın ve mini şovu izleyin emir (at) akaydin (nokta) com
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 52
inx lda flash,x sta $d02b inx lda flaşh;x sta $d02a inx lda flash,x sta $d029 inx lda flash,x sta $d028 inx lida flash,x sta $d027
kodu bu şekilde kullanacak olursak spritelar tablodan peş peşe renkler okuyarak sıralı bir geçiş yaparlar. Bu sayede hem renk parlaması hem de renk kayması efektlerini bir arada kullanmış oluruz. Şimdi gelin bu uzun kodu ACME'nin özelliklerini kullanarak daha kısa ifade edelim.
ldx flashCounter
i,8 1 lif i ls 1 1 inx
) l1da flash;x sta $d0271418-i )
Buradaki "lif" bloğunun amacı ilk seferde "inx" koymayıp, ondan sonraki tekrarlarda bu komutu aralara eklemek. Programın çıktısı birebir yukarıdaki açık örnekte olduğu gibi olacaktır.
Sinüs hareket tablosu
Uzama efektini eğer tek tek adımlarla ilerletecek olursak çok lineer bir görüntü elde ederiz. Uzamaya biraz hareket katmak maksadıyla güzel bir sinüs tablosu oluşturmamız lazım. Ancak bu defa bu tabloyu da aynı renk tablosunda olduğu gibi arada biraz sabit bir değerde bekleyecek şekilde oluşturacağız. Bildiğiniz gibi normalde tablolarımızın uzunluğunu 256 bytelık seçeriz. Bu sayede bir bytelık bir sayacı sürekli arttırarak tablonun üzerinde kolaylıkla hareket ederiz ve başa dönmek için ekstra bir işlem yapmamıza gerek kalmaz. Yine 256 bytelık bir tablo kullanacağız. Ancak bu defa sinüs genişliğimiz 200 olacak. Geri kalan 56 byte ise sabit bir değerde olacak. Burada çözmemiz gereken problem sinüs tablosunun başladığı ve bittiği değerin bu 56 bytelık sabit değere eşit olması.
Bir diğer problem ise tek bir sinüs'ün efekte istenilen oranda hareket katmaması. Harmonik hareketi biraz daha hoş göstermek için sinüs * cosinüs gibi bir formül kullanabiliriz. Dikkat etmemiz gereken tek şey formüldeki tüm bileşenlerin periyodik sonuçlar vermesidir.
Sprite yüksekliği 21 ile 200 arası değişeceğine göre sinüs tablomuz da bu değer aralığında olmalı. Sabit bekleyeceği değeri 21 seçersek sinüs tablomuz 21'den başlayıp yine 21'de bitmelidir. Yani uzama efekti sprite'ın orijinal yüksekliğinden başlayacak ve bir süre bekledikten sonra gerçekleşecek. Sonra yine orijinal yüksekliğe geri dönecek.
Bu probleme örnek bir çözüm aşağıdadır.
sinus.htm
<script> forl(i - O; ( a - 1l1 *t Math.floor(89.9 *Math.sin((i4*50)/100*Math.PI));
i < 200; i*44)
if(i 0) document .write(","); document.writela);
) </script>
Bu scriptin çıktısını programımıza şu şekilde eklememiz gerekiyor.
sinus 56,21
!byte <sinus.htm'in ciktisini buraya kopyala>
Yukarıda Anlatılanların Bir Araya Gelmesiyle Oluşan "stretch.prg" Programının Çıktısı
Şekil 6.
Programın kaynak kodunu (stretch.a) ve çalıştırılabilir dosyasını (stretch.prg) disk magazin'in paketinin içerisinde bulabilirsiniz. Ayrıca "extra" klasörünün içerisinde yukarıda örneklenen kodları da bulmanız mümkündür.
Kaynak kodun içerisinde yukarıda anlatılanlara ek bazı bölümler de bulacaksınız. Hiç endişe etmeyin kodların tamamının açıklamaları yanlarında yer alıyor. Ancak elbette ki hiç Commodore 64 temeli olmayan biri için bunlar da yeterli olmayacaktır. Bu örneği tamamen anlayabilmek için özellikle VIC konusunda kendinizi geliştirmeniz şart. Bunun için Türkçe kaynak olarak size Nightlord'un yazdığı ve yakında sitesinden yayınlayacağı "C64 Grafik Programlama" serisini takip etmenizi tavsiye ederim. Link: http://www.nightnetwork.org/
Son Söz
Böylece "Test Platformu" serisinin sonuna gelmiş bulunuyoruz.