1 Nisan 1987 Tarihli Commodore Gazetesi Sayfa 25

1 Nisan 1987 tarihli Commodore Gazetesi Sayfa 25
Metin içeriği (otomatik olarak oluşturulmuştur)

ince uzun bir cisim gibi. Eğer aynı za- manda 29. yazmaçın da 5. bit'i | ise, sonuç 5 numaralı sprite'ın iki kat bü- yük görünmesi olacaktır. 23. yazma- çın 5. bit'ini tekrar 0 yaparsak, bu se- fer sprite'ımız sadece yatay yönde uzamış görünecektir. Artık sıra son iki özelliğe geldi: Sprite-sprite ve ekran-sprite önceliği, sprite-sprite ve ekran-sprite çarpışma- ları. Diyelim ki ekranda birden fazla sprite'ınız var ve ekranda da birtakım yazılar yazıyor. Bunlar üstüste gelin- diğinde ne olur? Hangi sprite hangi sprite'ın önüne geçer? Yazılar mı spri- te'ların arkasında kalır, sprite'lar mı yazıların arkasından geçer? Önce sprite'lar arasındaki öncelik ilişkisine bir bakalım. Aslında çok ko- lay. Bildiğiniz gibi sprite'ları 0-7 ara- sı numaralarla çağırıyorduk. Buna gö- re, daha küçük numaraya sahip spri- te'ın diğerlerine göre üstünlüğü var- dır. Örneğin 3 ve 6 numara üstüste ge- lirse, 3 numara 6 numarayı örtecek- tir. Ancak üstlerine bir de 0 numara gelirse, o hepsinin üstünü kapatacak- tır. Ekran karakterleriyle olan öncelik durumuna gelince... Bunun için de bir yazmaç ayrılmış durumda. Sprite- sprite ilişkisinde olduğu gibi önceden saptanmış bir durum yok. 27 numa- rali VIC yazmaçının her bir bit'i bir sprite'ı temsil eder. Eğer bir bit 0 ise (ki bilgisayar açıldığındaki durum bu- dur), o bit'in temsil ettiği sprite ekran- daki her karakterin üzerinde buluna- caktır. Eğer bit'in değeri | olursa, bu sefer sprite ekrandaki yazı, grafik ve her türlü şeklin arkasına saklanacak- tır. İşte bu özelliği kullanarak üç boyut- lu izlenimini veren programlar hazır- layabilirsiniz. Piyasadaki birçok oyun programı bu özelliği sonuna kadar kullanır. Örneğin bir sprite, ekranın bir kısmındayken karakterlerin üstün- de görünür, bir başka kısmında da ona ait bit program tarafından | ya- pılınca, grafiklerin altından geçer. Ha- yal gücünün sonu yok... Hazır söz oyunlardan açılmışken, son sprite özelliğine geçelim. Sprite'- lar ve ekran arasında ortaya çıkacak temasların veya çarpışmaların algıla- namaması, C64'ün sonu olurdu her- halde. Ancak durum bunun tam ter- si. VIC'in 30 ve 31 numaralı iki yaz- maçı bu işlemi gerçekleştiriyor. 30 nu- maralı yazmaç, sprite-sprite çar- pışmasından sorumlu. Gene her bir bit'in bir sprite'ı temsil ettiğini söyle- meye gerek yok sanırız... Neyse, bir örnek verelim. Diyelim ki, ekranda 3 ve 5 numaralı sprite'lar birbirine değ- di. Bu durumda 30. yazmaçın 3 ve 5 numaralı bit'leri 1 halini alacaktır (7000101000) ve bu değerini silinince- ye kadar koruyacaktır. DİKKAT! Eğer ekranda sprite'lar çarpıştıktan sonra birbirlerinden ayrılırlarsa, 30. yazmaçın değeri kendiliğinden sıfır- lanmayacaktır. Programın önceden varolmuş bir çarpışmayı, çarpışma bittikten sonra da algılayabilmesi için değerini koruyacaktır. Ancak POKE 53248 4 30,0 ile silinebilecektir. 31 numaralı yazmaç da buna ben- zer bir işlem görür. Eğer sprite, ekran- daki yazı veya grafiklerden birine de- ğerse, ona ait bit 1 değerini alır ve program onu sıfırlayıncaya kadar 1 değerini korur. Artık sıra geldi bunca bilgiyi pra- tikte kullanmaya. Daha önce de be- lirttiğimiz gibi, dizayn işlemlerini ev- velki sayılarımızda verdiğimiz sprite editörlerinden biriyle yapabilirsiniz. Diğer programlama işlemlerini de, mümkün olduğunca iki örnek prog- ramda toparlamaya çalıştık. Grafik olarak hiçbir iddiamız olmadığını ve göreceğiniz sprite'ların daha kabiliyet- li arkadaşlar tarafından çok daha gü- zel çizilebileceğini itiraf ediyoruz. Biz daha çok hangi komutların nasıl kul- lanılacağını esprili bir hava içinde sun- maya çalıştık. Birinci programımız animasyona (çizgi film efekti), ikinci programımız da çokrenkli durumda sprite-sprite çarpışmasına küçük birer örnek teşkil ediyor. Şimdi satır satır açıklamalarına geçelim. SPRITE DEMO 1i 10: VIC'in temel adresi bir değişke- ne yükleniyor. Bu, tüm grafik ve spri- te işlemleriyle uğraşan programların en başında yapılan standart bir işlem. 20: Çerçeve ve ekran renkleri siyaha dönüştürülüp, ekranda görünen her- hangi bir sprite varsa kapatılıyor ve ekran biliniyor. 30: 13 numaralı blok ilk sprite'ımız için kullanılacak. 40: İlk sprite'ın DATA'ları okunu- yor. 50:70: İlk sprite'ın DATA'ları. 80: İkinci sprite ise 14. blokta. 90-120: İkinci sprite'ın DATA okun- ması ve DATA'ları. 130: Bir numaralı sprite göstergeçi, 13. bloku gösterecek duruma getirili- yor. 140: 6 numaralı sprite'ın Y koordinatı belirleniyor. 150: 6 numaralı sprite'ın X koordinatı belirleniyor. 160: X-koordinatlarının 9. bit'leri si- liniyor. 170: 6 numaralı sprite'ın rengi belir- leniyor. 180: Tüm sprite'lar ekran karakterle- rinin önünde görünecek. 190: Tüm sprite'lar tekrenkli. 200: 6 numaralı sprite'ın Y yönünde iki kat büyük gösterilmesi sağlanıyor. 210: 6 numaralı sprite'ın X yönünde de iki kat büyük gösterilmesi sağlanı- yor. 220-230: Ekranda yeşil renkli bir yol oluşturuluyor. 240: Ve 6 numaralı sprite görünür hale getiriliyor. 250: Sprite'ın hareket hızı, 3-23 arası bir sayı olarak saptanıyor. 260: Sprite'ın rengi öncelikle beyaz olacak. 270: Sprite'ın 1-400 koordinatları ara- sında verilen hızla hareketini ve de- vamlı renk değiştirmesini sağlayacak işlemler başlıyor. 280-290: Sprite'ın renk kodu belli bir oranda artırılıyor. Eğer 16 olmuşsa tekrar 1'e döndürülüyor. Burada F-—16 yerine F 7 16'da konulabilir. 300: 6 numaralı sprite'ın rengi değiş- tiriliyor. : 310: 6 numaralı sprite, 14. bloktaki di- zayna sahip olacak şekilde göstergeç değiştiriliyor. 320-400: Sprite'ın X-koordinatı 9. bit'ine göre hesaplanıp gerekli yerle- re yazılıyor. Bir süre beklendikten sonra, sprite göstergeçi değiştirilip X-

Bu sayıdan diğer sayfalar: