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
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