11.07.2015 Views

Amiga Dunyasi - Sayi 23 (Nisan 1992).pdf - Retro Dergi

Amiga Dunyasi - Sayi 23 (Nisan 1992).pdf - Retro Dergi

Amiga Dunyasi - Sayi 23 (Nisan 1992).pdf - Retro Dergi

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Göze çarpan diğer bir konu da programbaşında ve sonunda iki library fonksiyonukullanmış olmam. Bunlar Execlibrary'sinden Forbid ve Permit. Her ikisininde kullanım şeklini ve amaçlarını buayki <strong>Amiga</strong> ve Assembler köşesinde detaylıolarak açıkladım.Programın CreateSprites altrutini ilksprite datalarının sprite'ın görüntüsünü tanımlayankısmını tüm sprite'lara kopyalamakta.Hemen ardından da 8 sprite'ın adreslericopper listesine yazılmakta. Dilersenizsiz 8 değişik sprite görüntüsü kullanın.Fakat bunun için CreateSprites altrutininilk kısmını silerek her sprite datasınıayn olarak girmeniz gerekmekte. Aynı zamandasprite renklerini de doğru girmenizlazım.Ana döngü içersinde demin de belirttiğimgibi ufak boş bir-döngü ve sprite hareketettirme rutinine bir dallanma (bsrMoveSprites) bulunmakta. MoveSpritesrutinine baktığımızda burada ilk önceSprNo değişkeninin içeriğinin d7register'ine kopyalandığını görmekteyiz.Bu değer o an hareket ettirilecek spritenumarasıdır ve MoveSprite rutinindençıkmadan hemen önce her seferinde birartırılmakta. SprNo, 8 olduğunda da tekrarsıfırlanmakta. Bu şekilde her seferindesadece bir sprite'ı hareket ettirmekteyiz.Tüm 8 sprite'ı da aynı anda hareket ettirmekçok zaman alacaktı. Nedeni de herseferinde sprite y koordinatlarının bir tablodanokunmasından kaynaklanmakta.Dediğim gibi, sprite y koordinatı bir datatablosundan okunmakta. Fakat tüm ykoordinatlarını aynı tablodan okumayakalkıştığımızda tüm 8 sprite'ın y pozisyonlarıaynı olur. Bunu .engellemenin ikiyöntemi var; ilki gayet basit. Her spriteiçin ayrı bir data tablosu çıkarmak. Fakatbu şekilde bir rutin dergimizde fazla yerkaplayacağından dergimizin editörü MahmureAbla, kızarak evime gizlice giripsource disketlerimi formatlayabilir. Buyüzden ben ikinci yöntemi kullanmak zorundakaldım. Bu şekilde siz de yeni birteknik daha görebilirsiniz.Tüm sprite'larımız nasıl olsa sinüzoidalbir hareket yapacaklar. Ben de sadece birsinüs tablosu kullanmaya karar verdim.Fakat bu sinüs tablosunun 8 ayn yerinigösteren 8 ayrı pointer kullanarak hersprite'ın y koordinatının farklı olmasınısağladım. MoveSprites rutininde .de herseferinde sprite numarasına denk düşenpointer'in gösterdiği değer okunmakta.Eğer bu değer $ff'den farklıysa, direktolarak VSTART'a yazılmakta. Bu değere14 (sprite yüksekliği) ekleyerek deVSTOP değerini bulmaktayız. Dğere $ffolduğunda ise sprite numarasına denk düşenpointer'in tekrar sinüs tablosunun başınıgöstermesi sağlanmakta. HSTART,yani sprite'ın yatay koordinatı da her seferinde1 artırılmakta. Rutinin sonunda dakullanılan pointer 1 artırılarak bir sonrakikullanım için hazırlanmakta.Gayet basit, değil mi? Programın açıklamasıda burada bittiğine göre bana artıksadece size hoşçakalın demekten başkabirşey kalmıyor.; >>>>>>>>>>>>>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!