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ı.
Sayfa 22
Başlangıç karesini
Bitiş karesini gösterir. End Frame Si: olarak son karedeki büyük! gösterir. Hinge: Start Frame: Başlangıç karesinin numarasını gösterir. End Frame: gösterir. Hinge Object: Özel efekt objesinin ismini gösterir. FIX: Özel bir efektin nereden başlayıp nerede biteceğini belirleyerek nasıl bir işlemi ne şartlarla yapılacağını sağlar. Light Source için Actor: Start Frame: Işığın hangi kareden başladığını gösterir. End Frame: Işığın hangi karede bittiğini gösterir. Spherical, Cylindrical, Conical, Cast Shadow, Diminish intensity: Işık özellikleri. Red Intensity, Green İntensity, Blue In- Renk özellikleri Transition Frame Cout: Geçişme yapıhp yapılamıyacağına karar verebilirsiniz.
Bitiş karesinin numarasını
Action penceresi oldukça detaylı değil mi? Neyse biz Object menünün kalan seçeneklerine devam edelim.. Transformation: Sadece sayılarla, yani kesin ölçülerle çalışmak istediğimizde kullanmamız gereken komuttur. Herhangi bir obje seçildikten sonra, Transformation komutunu — kullanabiliriz. — Karşımıza Transformation Reguester penceresi çıkar. Bu pencere de Detail menüdekinin aynısıdır. SnapShot: İstenilen karedeki objeyi kaydetmede kullanılır. Önce obje, sonra da komut seçildiğinde, Object Filename (Save) — penceresi çıkar. Disks'ten Drawer'ı seçip kaydedeceğimiz yeri bulduktan sonra, File kısmına da ismini yazıp seçilen objeyi, obje olarak kaydedebilirsiniz. Position Bar: Pozisyonları sabitlemede kullanılır. Alignment Bar:
Dönüş açılarını sabitlemede kullanılır. Size Bar: Büyüklüğü sabitlemede kulla- Show Path Length: Seçilen yolun uzunluğunu verir. MODE MEN! Pick Groups: geçmemizi sağlar. Edit Path: Yol üzerinde edit yapmayı sağlar. MENÜSÜ: Home, Select Next, Select Prev: Detail menüsünde de incelediğimiz gibi yüklenen objenin arasından ilk olarak yüklenen objeyi, seçili objeden bir sonrakini ve seçili objeden bir öncekini seçmek için kullanılır. Pick Select, UnPick Select, UnPick Last, Find By Name ve Find Reguester'da Detail menüsünde açıklanmıştı. PATH MENÜSÜ: Dosyalara erişilecek yolu ayarlama ilgili menüdür. Save Path: Yapılan yolu kaydetmede kullanılır. Split Segment: sağlar. Delete Point: Seçilen noktayı siler. FRAME MENÜSÜ:
Normal group moduna
Yola nokta eklemeyi
Animasyon karelerine daha hızlı ve rahat ulaşmamızı sağlayan menüdür. First: İlk kareye gitmemizi sağlar. Last: Son kareye gitmek için kullanılır. Next: Bir kare ile gitmeyi sağlar. Prev:Bir kare geri gitmeyi sağlar. Goto: İstenilen kareye kare numarası yazılarak gidilmesini sağlar. ANIMATE MENÜSÜ: Bu Animate menüsü sadece sonucun nasıl olduğunu görmede yardımcı olarak kullanılır. Eğer bu şekilde kaydedilirse, gerçek animasyon da aynen o şekilde çıkacaktır. Make: Bu komut kareleri hazırlanmış animasyonu gösterilebilecek hale getirir. Free Ram: Hafızada bulunan deneme animasyonun lerek hafızada yer açar. Play Once: Make komutu ile hazırlanmiş animasyonu bir kez gösterir. Komut seçildikten sonra sol köşede Animation Controller penceresi ile karşılaşılır. Bu pencerede; Stop: İstenilen karede animasyonu durdurmayı sağlar. Step: Animasyon karemizin bir ileri gitmesini sağlar. Play: Komple animasyonumuzu görmemizi sağlar. Back: Animasyon karemizin bir ileri gitmesini sağlar. Slow...Fast: Siyah kısmın içindeki beyaz çizgi ile animasyonumuzun hızını ayarlayabiliriz. Rewind: İlk kareye (yani sifira) gitmemizi sağlar. Ouit: Çıkış için kullanılır. Play Loop: Play Once komutu ile aynı işi yapar. Fakat animasyonu sürekli olarak gösterir. Komut seçildikten sonra, sol tarafta Animation Controller penceresi ile karşılaşılır. İşlem ve sonuç olarak Play Once komutunun kontrol penceresiyle aynı işi yapar. Play Big: Animasyonu büyük ekranda görmenizi sağlar. Komut işaretlendikten sonra seçilmiş anlamına gelir. Play Once veya Play Loop komutlarından biri seçildiğinde de işleme girer. Big ekranında Animation Screen penceresinden çıkmak için sağ üstte bulunan kutucuğu kullanmak gerekir. Böylece tekrar Animation Controller penceresine girebiliriz ve Ouit diyerek tamamen çıkabiliriz. Yazımız boyunca sayfalarda gördüğünüz harika çizimlerin sahibi, dergimiz okuru ORKUN PEKŞEN e teşekkür ederken bir isteğini zevkle yerine getiriyoruz. Orkun, ray-tracing ile uğraşan arkadaşlarla yazışmak istiyor. İşte adresi: Halk Sok. 1372, 06410 SIHHİYE/ANKARA. Bu açıklamadan sonra artık her arkadaşımın iyi animasyon yapacağına eminim. Eğer program hakkında sorularınız olursa bana yazmayı unutmayın. IMAGINE'in yeni versiyonları çıkarsa, size onlar hakkında da bilgi vereceğiz. Bu arada yaptıklarınızı dergiye kullanılması için gönderebilirsiniz. Sizlere bol animasyonlu ve Imagine'li günler dilerim. Tekrar buluşmak üzere hoşçakalın.