Plazma sayı 4, sayfa 49

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 49

lda #$00 sta $d017 lda #$£f sta $dül17

yazabiliriz. Ancak daha pratik ve genel bir tanım ile "eor" komutunu kullanarak;

lda #$00 sta: Şdül7 eor sta $d017

Şekil 3.

dememiz daha uygun olacaktır. Elbette ki her satırda $00 değeri vermemiz demek yalnızca sprite'ın en üst satırının uzaması demektir. Dolayısıyla istediğimiz uzunluğa ulaştığı yerde $00 yerine $ff değerini vererek bir sonraki sprite satırının görüntülenmesi sağlanabilir. Nedeni ise $ff'in $ff ile eorlanmasının sonucunun $00 olmasıdır. Kısacası uzama bu noktada sona erecektir. Her satırın uzama miktarını belirlemek için en mantıklı yol bir tablo kullanmaktır. Yani;

Uzatma rutini de temelde aynı mantıkla çözülebilir. Örneğin 5 pixel yüksekliğindeki bir resmi 11 pixele uzatmak istediğimizi varsayalım. Bu durumda yukarıdaki şekil bize her bir satırın kaçar kez tekrar etmesi gerektiğini verecektir. Yani;

ldx #$00 Loop:

lida streteh,x Sta $d017 eor sta $dül17

inx epx #63 bne loop

stretch

!byte EE EE

!byte $00,$00,$££,$00,$00,$££,$00,$00

Yukarıdaki örnek sprite'ı tam 3 kat uzatacaktır.

Şimdi bir düşünelim. Bizim asıl elde etmek istediğimiz efekt ne? Sprite'ların orijinal yüksekliği 21 pixeldir. 21 pixelden başlayarak Şekil 4. Orijinal resim iç ekranın toplam yüksekliği olan 200 pixele kadar bu sprite'ları yumuşak bir şekilde uzatmak oldukça güzel görünecektir. Ancak bu iş için 21 ve 200'de dahil olmak üzere toplam 180 farklı tabloya ihtiyacımız olacak. Bu tabloları nasıl hesaplatacağız? Şimdi bu konuyu inceleyelim.

Uzama tablosu üretme

Eğer bu güne kadar çizgi (line) rutini kodlamışsanız bu problem size yabancı gelmeyecek demektir. Çizgi çekme rutininde ekrandaki A(x1,y1) ve B(x2,y2) noktaları arasında hangi adımlarla ilerlemeniz gerektiği sorusu temel problemi oluşturur. Bu konuda en çok kullanılan yöntemler Bresenham'ın çizgi algoritması ve bu algoritmanın üzerinden geliştirilmiş diğer algoritmalardır.

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