15.01.2015 Views

Amiga Dunyasi - Sayi 19 (Aralik 1991).pdf - Retro Dergi

Amiga Dunyasi - Sayi 19 (Aralik 1991).pdf - Retro Dergi

Amiga Dunyasi - Sayi 19 (Aralik 1991).pdf - Retro Dergi

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

gerekiyor. Aksi takdirde, mesela bizim programımızda scroll sırasında<br />

bir titreme oluşuyor. Çünkü tarama tamamlanmadan yapılan<br />

bir kaydırma işlemi, senkron bozukluğuna sebep olabiliyor.<br />

Bu nedenle bu tür komutların özellikle başına WaitTOF komutunu<br />

yerleştirmek bozuklukları engelleyebiliyor.<br />

Bir sonraki satırdaki ScrollRaster, isminden de anlaşılacağı<br />

gibi. herhangi bir yöne, herhangi bir bloğu kaydırmaya yarıyor.<br />

Oldukça kullanışlı bir komut. Biz de zaten kullandık! Ayrıca bu<br />

komut, işlemlerini blitter yardımıyla yapıyor. Kullanımı şöyle:<br />

struct RastPort *rastport;<br />

int dx,dy,minx,miny,maxx,maxy;<br />

ScrollRaster(rastport,dx,dy.minx,miny,maxx,maxy);<br />

Burada dx ve dy kaydırılacak olan yönün, pixel olarak kaydırma<br />

miktarını belirtiyor. dx pozitif bir sayı ise, sola, negatif ise sağa<br />

kaydırmaya sebep oluyor.dy pozitif bir sayı ise yukarı, negatif<br />

ise aşağı kaydırmayı sağlıyor. Aynı anda hem sağa yada sola veya<br />

herhangi bir yönde scroll yapılabiliyor. Kullanımda dikkat<br />

edilecek konu, ekran rastport değişkeninin doğru verilmesi. Aksi<br />

taktirde programınız **crash** edebilir.<br />

Evet, sıra geldi ClipBlit fonksiyonuna. Bu fonksiyon (ya da komut)<br />

<strong>Amiga</strong>'nın başlıca grafik komutlarından. Yaptığı işlem, hafızanın<br />

belirli bir bloğunu başka bir bloğa taşımak. Bu işlemi yaparken<br />

de blitter cipini kullanır. Eğer bu blok ekran olursa, yaptığımız<br />

işlemler de ekranda görülüyor. <strong>Amiga</strong> oyun ve demolarında<br />

bu tür blok taşımaları çok kullanılır. Mesela bir oyundaki arka<br />

plan resimleri bu fonksiyon ile ekrana getirilir ve kaydırılır. Şimdi<br />

bu komutun kullanımını inceleyelim:<br />

ClipBlit(rastport 1 .x 1 ,y 1 ,rastport2,x2,y2,dx,dy,minterm);<br />

xl ve yi, 1. bloğun başlangıcını; x2 ve y2, 2. bloğun başlangıcını<br />

belirtir. 1. blok kaynak, 2. blok ise hedeftir. dx ve dy ise taşınacak<br />

olan bloğun genişliğini belirtir, rastport 1 ve rastport2 blokları<br />

temsil eder. rastport'lar aynı bloğu temsil edebilir. Bizim<br />

programımızda da böyle kullanılmıştır. Yani kaynak ve hedef aynı<br />

rastport'tan (bizim programımızdaki ekran'dan) alınmıştır.<br />

minterm ise, yerleştirmenin mantığını gösterir. 0xc0 kaynak<br />

bloğu hedef bloğa aynen taşır, minterm OR, AND. XOR ya da<br />

INVERT olabilir, minterm'lerin başlıcaları şunlardır:<br />

mode minterm( decimal)<br />

invert 48<br />

and 128<br />

of 224<br />

xor 96<br />

replace <strong>19</strong>2<br />

Biz programımızda replace modunu yani hex olarak 0xc0 (decimal<br />

olarak <strong>19</strong>2) minterm'ini kullandık.<br />

Ana program kısmımız burada bitiyor. Daha sonra screen ve<br />

hbrary'lerimiz kapanarak programdan çıkılıyor. Programı.<br />

CC +L prog.c<br />

ile compile;<br />

LN prog.o -lc32<br />

ile link edin. prog yazarak çalıştırın. Hoşlanacağınızdan eminim.<br />

Şimdi de bu ayki yeni örneğimiz:<br />

I* <strong>Amiga</strong> <strong>Dunyasi</strong> */<br />

/* Program : Cenker Ozkurt */<br />

#include <br />

#include <br />

#include <br />

#include <br />

struct NewScreen ns={<br />

0,0,320,200,2,0,1,0,CUSTOMSCREEN,0,0.0.0 };<br />

struct RastPort *rp;<br />

struct Screen *scr;<br />

struct GfxBase *GfxBase;<br />

struct IntuitionBase *IntuitionBase;<br />

struct RastPort rpx;<br />

struct BitMap bmx;<br />

int x,y;<br />

DERLEYİCİLER<br />

UBYTE*m=0xbfe001;<br />

main()<br />

{<br />

IntuitionBase=(struct IntuitionBase *) OpenLibrary ("intuition.<br />

library",0);<br />

if(IntuitionBase==NULL) {<br />

printf("intuition library error!\n");<br />

return(0);<br />

}<br />

GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0);<br />

if(GfxBase==NULL) {<br />

printf("graphics library error!\n");<br />

CloseLibrary(IntuitionBase);<br />

return(0);<br />

}<br />

scr=(struct Screen *)OpenScreen(&ns);<br />

if(scr==NULL) {<br />

printf("screen error!\n");<br />

CIoseLibrary(GfxBase);<br />

CloseLibrary(IntuitionBase);<br />

return(0);<br />

}<br />

rp=&scr->RastPort;<br />

InitBitMap(&bmx,2,64,20);<br />

bmx.Planes[0]=AllocMem( 160,MEMF_CHIPIMEMF_CLEAR);<br />

if(bmx.Planes[0]==NULL) {<br />

printf("memory 7\n");<br />

CloseLibrary(GfxBase);<br />

CloseLibrary(IntuitionBase);<br />

return(0);<br />

}<br />

bmx. Planes[1]=AllocMem( 160,MEMF_CHIPIMEMF_CLEAR);<br />

if(bmx.Planes[0]==NULL) {<br />

printf("memory 7\n");<br />

FreeMem(bmx.Planes[0], 160);<br />

CloseLibrary(GfxBase);<br />

CloseLibrary(IntuitionBase);<br />

return(0);<br />

}<br />

InitRastPort(&rpx);<br />

rpx.BitMap=&bmx;<br />

DrawEllipse(&rpx,32,10,30,8);<br />

for(x=0;x

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

Saved successfully!

Ooh no, something went wrong!