Bu sayfadaki yazılar
Sayfanın metni
Sayfa 25
SPRITE DEMO | 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 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'in 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 , 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-
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 24
Peki bu kadar bilgiyi nasıl kullanacağız? Sprite tanımlamamızı yaptık, kullanacağımız blokları saptadık, gerekli hazırlıkları yaptık ve 63 byte'lık bilgimizi saptadığımız bloklara yerleştirdik. Şimdi ne olacak? 11. sayımızda, sprite göstergeçlerinden bahsetmiştik. Bunlar 2040-2047 arası adreslerde bulunmaktaydı. Örneğin, 15 numaralı bloka (960-1022) bir tanımlama yerleştirdiniz. Ve diyelim ki, 2 ve 6 numaralı sprite'ların bu tanımlama ile belirttiğiniz görüntüye sahip olmasını istediniz. Yapacağınız işlem şu olacaktır:
POKE 20404-2,15 POKE
Kolay, değil mi? Bu yöntemin çok güzel bir özelliği var. Diyelim ki, 14 numaralı blokta da bir tanımlama var. Siz, POKE 2040,14 dediğiniz anda sprite'ınızın görüntüsü değişecektir. Böylece değişik dizaynlar arasında gidip bir tür çizgi film efekti yaratabilirsiniz. SPRITE DEMO 1 programımızda bu özelliği kullandık. Şimdi sıra geldi sprite'ı ekrana çıkartmaya. Bununla ilgili yazmaçın 21 numaralı yazmaç olduğunu 10. sayımızdan biliyoruz. Bu yazmaçın her bir bit'i, bir sprite'a karşılık gelir ve eğer bir bit'in değeri 1 ise, o sprite görünür durumda demektir. Örneğin 2 ve 5 numaralı sprite'lar açılacaksa, POKE 53269,36 komutu verilmelidir. Ancak bu komutu verir vermez sprite'ı ekranda göremeyebilirsiniz. Çünkü sprite'ınız ekranın görünür kısmının dışında olabilir. Demek ki, sıra geldi sprite'ın ekrandaki pozisyonunu değiştirmeye. Sprite'ımızı ekranda X ve Y yönünde belirleyeceğimiz koordinatlar ile yerleştirebiliriz. X-koordinatları için 0-511, Y-koordinatları içinse 0-255 parçası olan görünür ekranı birarada göstermekte ve görünür ekranın köşelerinin sprite koordinatı olarak hangi değerlere karşılık geldiğini belirtmektedir:
bir sprite'ın 9 numaralı X-koordinatı bit'ini temsil eder. Bir örnek verelim: Diyelim ki, sprite'ımızın X-koordinatı 345. 255'ten büyük olduğu için, 16. yazmaçın gerekli bit'i 9. sayımız-
1 ! GÖRÜNÜR EKRAN ! 1 1 arası değerler alabilir. Ekranın görünen kısmının 320*200 nokta olduğunu düşünürsek, sprite hareket alanının görünen ekrandan daha büyük olduğunu kolayca anlarız. Aşağıdaki çizim, sprite hareket alanı ve onun bir
Gene 10. sayımızdaki listemizde göreceğiniz gibi, her sprite'a ait X ve Y koordinatlarını belirleyen yazmaçlar vardır. Y-koordinatları 0-255 arasında olduğuna göre sorun yok. Ancak 0-511 arası X-koordinatlarını göstermek için 1 byte — 8 bit yeterli olmamaktadır. İhtiyaç duyulan 8. bit ise, VIC'in 16 numaralı yazmaçında yeralmaktadır. Bu yazmaçın her bir bit'i, da gördüğümüz yakılacak ve o sprite'a ait X-koordinatı yazmaçına 345-256 = 89 değeri konacaktır. Bir ufak noktayı daha belirtelim. Bir sprite'ı ekranda pozisyonlarken verdiğiniz koordinatlar, o sprite'ın sol üst köşesinin ekranda geleceği koordinattır. Dolayısıyla, sağ alt köşesinin koordinatları, X yönünde 24 nokta, Y yönünde de 21 nokta eklenerek bulunabilecektir. Ancak bu son hesap, normal boyutta gösterilen sprite'lar için geçerli. Normal olmayan boyutlar da ne demek?!
Şimdi sıra geldi bu özelliğe: Sprite'ımızı genişletip daraltmaya. VIC'in 23 ve 29 numaralı yazmaçlarını kullanarak, X ve Y yönlerinde sprite'ın genişliğini normal ile iki katı arasında değiştirebiliyoruz. Daha önce gördüğümüz çokrenklilik, X-yönü 9. bit'i gibi özellikleri kontrol eden yazmaçlar gibi 23 ve 29 numaralı yazmaçların da yapısı, her bir bit bir sprite'ı temsil edecek şekildedir. Örneğin 23. yazmaçın 5. bit'i 1 ise, 5 numaralı sprite Y yönünde iki kat daha büyük görünecektir. Tıpkı ince uzun bir cisim gibi. Eğer aynı zamanda 29. yazmaçın da 5. bit'i 1 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 sefer 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ışmaları. Diyelim ki ekranda birden fazla sprite'ınız var ve ekranda da birtakım yazılar yazıyor. Bunlar üstüste gelindiğinde ne olur? Hangi sprite hangi sprite'ın önüne geçer? Yazılar mı sprite'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 kolay. Bildiğiniz gibi sprite'ları 0-7 arası numaralarla çağırıyorduk. Buna göre, daha küçük numaraya sahip sprite'ın diğerlerine göre üstünlüğü vardır. Örneğin 3 ve 6 numara üstüste gelirse, 3 numara 6 numarayı örtecektir. Ancak üstlerine bir de 0 numara gelirse, o hepsinin üstünü kapatacaktı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 numaralı VIC yazmaçının her bir bit'i bir sprite'ı temsil eder. Eğer bir bit 0 ise (ki bilgisayar açıldığındaki durum budur), o bit'in temsil ettiği sprite ekrandaki her karakterin üzerinde bulunacaktır. Eğer bit'in değeri 1 olursa, bu sefer sprite ekrandaki yazı, grafik ve her türlü şeklin arkasına saklanacaktır. İşte bu özelliği kullanarak üç boyutlu izlenimini veren programlar hazırlayabilirsiniz. Piyasadaki birçok oyun programı bu özelliği sonuna kadar kullanır. Örneğin bir sprite, ekranın bir kısmındayken karakterlerin üstünde görünür, bir başka kısmında da ona ait bit program tarafından 1 yapılınca, grafiklerin altından geçer. Hayal 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ılanamaması, C64'ün sonu olurdu herhalde. Ancak durum bunun tam tersi. VIC'in 30 ve 31 numaralı iki yazmaçı bu işlemi gerçekleştiriyor. 30 numaralı yazmaç, sprite-sprite çarpışmasından sorumlu. Gene her bir bit'in bir sprite'ı temsil ettiğini söylemeye 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 (0000101000) ve bu değerini silininceye 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ırlanmayacaktır. Programın önceden varolmuş bir çarpışmayı, çarpışma bittikten sonra da algılayabilmesi için değerini koruyacaktır. Ancak POKE 53278,0 ile silinebilecektir. 31 numaralı yazmaç da buna benzer bir işlem görür. Eğer sprite, ekrandaki 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 pratikte kullanmaya. Daha önce de belirttiğimiz gibi, dizayn işlemlerini evvelki sayılarımızda verdiğimiz sprite editörlerinden biriyle yapabilirsiniz. Diğer programlama işlemlerini de, mümkün olduğunca iki örnek programda toparlamaya çalıştık. Grafik olarak hiçbir iddiamız olmadığını ve göreceğiniz sprite'ların daha kabiliyetli arkadaşlar tarafından çok daha güzel çizilebileceğini itiraf ediyoruz. Biz daha çok hangi komutların nasıl kullanılacağını esprili bir hava içinde sunmaya ç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.