Amiga Dünyası sayı 21, sayfa 23

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 23

Amiga C'de bu ayki konumuz Sprite'lar. Geçen ay Amiga'da IFF yüklemeden bahsetmiştim. Bu ay da geçen ay olduğu gibi örnekler üzerinde çalışarak Sprite'ları inceleyeceğiz. İlk olarak Sprite'ın tanımı üzerinde biraz duralım. Sprite, Amiga'nızdaki hareket edebilen şekilleri oluşturuyor. Mesela oyunlardaki birçok şekil, genelde sprite olarak tanımlanıyor. Amiga'nızda toplam sekiz adet sprite mevcut. Bu sprite'lar hardware olarak hazırlanmış. Dolayısıyla sprite sayısını artırmamız mümkün değil. Fakat software olarak da blitter yardımıyla sprite benzeri şekiller oluşturabiliyoruz. Bunlara kısaca BOB (Blitter Object) adı veriliyor. Bob'ların sayısı sınırsız olabiliyor. Fakat gene de bazen sekiz adet sprite yetiyor. Aynı zamanda sprite'ların kullanımı da oldukça kolay. Sprite'ların ekran üzerinde hiçbir etkisi yoktur. Mesela bir resmin üzerine yerleştirmiş olduğunuz sprite alttaki resmi etkilemez. Çünkü daha önce de söylediğim gibi, sprite'lar hardware olarak ekrana getirilmektedir. Sprite'ların getirmiş olduğu bazı kısıtlamalar var. Birincisi, sprite'ın eni maksimum 16 piksel (1 WORD) uzunlukta olabilmesi. Ancak boyu sınırsız olabiliyor. İkincisi, bir sprite'ın renk sayısı, maksimum 4 adet olabiliyor. Fakat sprite'ları birleştirerek daha fazla renk ve genişlik elde etmek mümkün. Sprite'lar toplam 16 renk kullanabiliyorlar. Bu 16 rengi ikişer ikişer paylaşmaktalar. Sprite'ların kullandıkları palet numaraları ve sayıları ise şöyle: Sprite Numarası Özel 3

Palet Numaraları 16-17-18-19 4 ve 5 24-25- 6 28-29-30-31 Ayrıca kullanmış olduğunuz mouse, O numaralı sprite'ı oluşturuyor. Sprite'ların bir de öncelik mevcut. İlk sprite en önde olacak şekilde, sprite'lar O'dan 7'ye kadar dizilmiştir. O ve 1'inci sprite'lar birbirleri üzerinden geçişirken, | numaralı sprite O numaralı sprite'in arkasında Yukarıda vermiş olduğumuz listeye göre herhangi bir sprite'ın renginin ayarlanması ise şöyle yapılıyor; Rengini değiştirmek istediğimiz sprite numarası 2 olsun. Buna göre 2 numaralı sprite için paletle oynayarak, SetRGB4A(vp,20,15,0,0): SetRGB4A(vp,21,0,15,0); SetRGB4(vp,22,0,0,15); her paleti istediğimiz gibi ayarlamamız mümkün. Burada vp, ekranın ViewPort structure yapısını: 20-21-22 ve 23 sayıları palet numaralarını ve diğer sayılar da sırasıyle RGB (kırmızı, yeşil, mavi) değerleri oluşturuyor. Eğer 4 numaralı sprite'ın rengini ayarlamak isteseydik, 24-25-26 ve 27 numaralı paletleri ayarlamamız yeterli olacaktı. Şimdi gelelim C'de sprite structure yapılarının kullanımına. Sprite'lar için iki tane yapı değişkenimiz bulunuyor. Bu deği kenlerden birincisine, oluşturduğumuz sprite'ın şeklini ve ilk koordinatını saklıyoruz. Yalnız bu yapı değişkenini ya kendimi hazırlamalıyız, ya da aşağıda vereceğim örnekte olduğu gibi kullanmalıyız:

struct Spritelmage

UWORD posctldata|21; UWORD UWORD reserved|21;

Görüldüğü gibi, yapı değişken ismimiz Spritelmage. Kapsadığı diğer değişkenler ise, (Position Control Data): Sprite'ın ilk andaki konumunu gösteriyor. sprdata|2)|height) (Sprite data): Sprite'ın yüksekliğini gösteriyor. Sprite'ın yüksekliğini istediğimiz gibi ayarlayabiliriz. Vermiş olduğumuz kadar yükseklik verisi girmeyi de unutmamalıyız. Dikkat ettiyseniz, sprdata için iki adet data girişi sağlanıyor. Bunun sebebi, daha önce de söylediğim gibi, sprite'ların 4 renk kullanmasından kaynaklanıyor. 4 renk için 2 bitmap gerektiğini unutmayalım. reserved|2): Bu değişkeni de, ileride sprite'ın kullanımı için boş olarak ayırıyoruz. Sprite hazırlarken kullanacağımız ikinci yapı değişkenimiz ise SimpleSprite. Bu değişken vasıtasıyla sprite'ı istediğimiz gibi ayarlayarak kontrol ediyoruz. Bu değişken include dosyaları içinde sprite.h dosyasında tanımlanıyor. struct SimpleSprite

UWORD *posctldata; UWORD height; UWORD x,y; UWORD num;

posctldata: Spritelmage değişkeninin adresini göstermek için kullanıyoruz. height: Sprite'ın yüksekliği. x,y: Konumu, num: Sprite numarasını belirtiyor. Şu ana kadar, sprite hazırlarken kullanacağımız kontrol yapı değişkenlerini gördük. Şimdi de bir sprite'ın şeklinin nasıl hazırlandığını görelim. İlk olarak sprite'ımızın şeklini ikilik (binary) sistemde bir kağıt üzerinde hazırlayalım. Fakat şeklimizi hazırlarken 4 renk kullanacağımızı unutmayalım. Bu nedenle sprite'ın ilk satırını çizerken iki ayrı datayı arka arkaya vermeliyiz. Bunlardan birincisi ilk bitmap'i, ikincisi ise ikinci bitmap'i oluşturuyor. Bunu bir örnekle inceleyelim; 1111000000000000 — 0xf000 0000000000001111 — 0x000f ilk satır datalarımız bunlar olsun. Dikkat ettiyseniz, binary olarak şeklimizi sağdan sola 16 pixel (16 bitlik — IWORD) olarak hazırladık. Oxf000 ilk satır bitmap'imizi, 0x000f ise ikinci satır bitmap'imizi hex olarak gösteriyor. Buna göre sağdaki ilk pixel'in renk numarası 3 oluyor. Hesabını şöyle yapabilirsiniz: * 0 4 2400 * 0 — 0 -> birinci renk, 201404 200* 1-1 -> ikinci renk, 201 * 14 240 * 0 — 2 renk, 201 * * 1 — 3 -> dördüncü renk için. Daha sonra tablosunu hazırladığımız şeklin verilerini hex olarak Spritelmage yapı değişkenine şöyle tanıtabilirsiniz: struct Spritelmage *Sprlm —

0, 0, 0xf000, 0x000f,

0.0

k Sıra geldi, C'de kullanacağımız sprite komutlarına. İlk olarak ChangeSprite() fonksiyonu üzerinde inceleme yapalım. Kullanımı: ChangeSprite(ViewPort,SpritePtr,SpritelmPtr); Fonksiyonu: SimpleSprite yapı değişkeni üzerinde yapmış olduğumuz değişiklikleri Spritelmage yapı değişkenine aktarır. Parametreleri: ViewPort -> ViewPort structure yapısı.

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