Plazma sayı 4, sayfa 52

Bu sayfadaki yazılar

Sayfanın metni

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.

Klavyeyle gezinmek için ← ve → tuşları.