Bu sayfadaki yazılar
Sayfanın metni
Sayfa 46
Şimdi sıra geldi ekran kaydırma komutlarına. Daha önce hardware scrolling'in nasıl yapıldığını görmüştük. Aslında ekran içerikleri değiştirilmiyor, ekranın monitörde gösterildiği yer değiştiriliyordu. Bu sefer direkt olarak ekranın içeriği üzerinde oynama yapacağız. Buna software scrolling de denir.
AMOS yorumlayıcısı, 16'ya kadar kaydırma bölgesi tanımlanmasına izin verir. Her bölgeyi ayrı ayrı programlayabilirsiniz. Seçtiğiniz herhangi bir dikdörtgen bölgenin içerikleri yine sizin istediğiniz şekilde kaydırılabilir.
KOMUT: Def scroll KULLANILIŞ: Def scroll n,x1,y1 to x2,y2,dx,dy Bu komut, kaydıracağınız bölgeyi tanımlamak için kullanılır. 'n', bölge numarasıdır. '0' ile '15' arasında değerler alır. 'x1', 'y1', 'x2' ve 'y2' dikdörtgen bölgenin sınırlarını belirler. 'dx' ve 'dy' ise, bu bölgenin ne şekilde kaydırılacağını belirler. dx'e verilen değer pozitif ise, bölge içerisindeki alan o kadar piksel sağa, negatif ise sola doğru kayacaktır. Aynı olay, dikey hareketi tanımlayan 'dy' için de geçerlidir. Burada dikkat edilmesi gereken ve çoğunlukla hata yapılmasına sebep olan olay şudur: Tanımlanan bölgenin yeri kesinlikle değişmez. Sadece bu bölgenin içi hareket eder. Bunu birazdan aşağıda vereceğim örneği çalıştırarak görebilirsiniz.
KOMUT: Scroll KULLANILIŞ: scroll n Bu komut, 'n' numarası ile tanımlanmış olan kaydırma işlemini gerçekleştirir.
ÖRNEK PROGRAM 1: Rem **************************************** Rem ** ** Rem ** AMIGA DÜNYASI ** Rem ** AMOS Scroll Demo ** Rem ** ** Rem ** writtten by ** Rem ** Burak Ozdemir ** Rem** using AMOS ** Rem ** ** Rem** AMOS Copyright 1990 ** Rem ** Mandarin/Jawx ** Rem **************************************** Flash Off Curs Off For 1=1 To 200 Step 10 InkRnd(15) Draw 0,1 To 320,1 Draw 1,0 To 1,200 Next I For 1=1 To 2 X=Rnd(200) Y=Rnd(100) W=Rnd(120) H=Rnd(100) DX=Rnd(4)-2 DY=Rnd(4)-2 Def Scroll I,X,YTo X+W,Y+H,DX,DY Next I For 1=1 To 20 For N=l To2 Scroll N Wait 5 Next N Next I
Tabii AMOS'un ekran komutları bu kadarla kalmıyor. Fakat hepsini bu bölümde bitirmemiz mümkün değil. Ama yine de birkaç komut daha yazabilirim. Bunlardan ilki 'Screen copy' komutu.
KOMUT: Screen copy KULLANILIŞ:
Screen copy e1 to e2 Screen copy e1,x1,y1,x2,y2 to e2,x3,y3[,mod] Bu komut, bir ekranın bir bölümünü başka bir yere taşımak için kullanılır. Komutun birinci kullanılış şekli bir ekranın tamamını diğer bir ekrana kopyalamak içindir. Görüntü, 'e1' ekranından 'e2' ekranına kopyalanır. Bu arada ilk ekrandaki görüntünün de silinmeyeceğini unutmamak gerekir. Eğer bunu yeterli bulmuyorsanız, AMOS'un yaratıcıları daha etkili bir kullanım şeklini de mümkün kılmışlar. Bu sefer ekranın herhangi dikdörtgen bir bölümü diğer bir bölgeye taşınabilir. Üstelik isteğinize bağlı olarak belirtebileceğiniz 'mod' değişkeni ile bunu değişik şekillerde gerçekleştirmeniz mümkün. Ekim sayımızdaki 'Blitter'i tanıyor musunuz?' yazımızı okuduysanız, Blitter'in sadece hafızanın belirli bölümlerini bir yerden diğer bir yere taşımakla kalmayıp, aynı zamanda bunları birleştirebilmeyi ve bunlar üzerinde mantıksal işlemler yapabilmeyi becerdiğini de öğrenmişsinizdir. AMOS, blitter'in tüm bu özelliklerinden faydalanabilir, 'mod' parametresi, blitter'in gerçekleştirebileceği 255 değişik mantıksal işlemden herhangi biri olabilir. Bu konuda henüz çok derinlere girmeyeceğim; çünkü eğer ikili sayı sistemi veya mantıksal devreler ile aranız iyi değilse, kolay kaybolabilirsiniz. Yine de çok kullanılan birkaç modu açıklamakta yarar görüyorum. Bunlardan ilki, 'Replace' modu'dur. Bu mod'da, seçilen bölge aynen kopyalanır. Eğer 'mod' seçeneğini boş bırakmışsanız, otomatik olarak bu seçenek aktif hale geçer. Aynı olay 'mod'=192 iken de geçerlidir. Diğer bir mod, 'Invert' modudur. Bu sefer şeklin tersi kopyalanır. 'Tersi' demekle başaşağı olduğunu söylemek istemiyorum. Mantıksal olarak tersini kastediyorum. Örneğin bir piksele karşılık düşen 'bit pattern' '11011' ise, bu diğer tarafa '00100' şeklinde geçirilir. Bu seçenek için 'mod' değişkeninin değerini, '48' yapmalısınız. Bundan başka en çok kullanılan modlar 'and', 'or' ve 'xor' modlarıdır. Bunlara karşılık düşen değerler ise sırasıyla 128, 224 ve 96'dır. İşte yine bu komutun kullanılışıyla ilgili bir örnek:
ÖRNEK PROGRAM 2: Rem********************************************* Rem********************************************* Rem**** *** Rem**** AMIGA DÜNYASI *** Rem**** *** Rem**** AMOS COPY DEMO *** Rem**** *** Rem**** written by Burak OZDEMİR *** Rem**** ***
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 47
Rem**** using AMOS **** Rem**** **** Rem**** AMOS Copyright 1990 **** Rem**** **** Rem**** Mandarin Software **** Rem**** **** Rem**** **** Rem****************** ************* ************ Screen Open 0,320,20(),32,Lowres Flash Off Load Iff "df0:resim" Rem ****** kopyalanacak yer burada seçilir ******* Repeat Until Mouse Click=l XS=X Screen(0,X Mouse) YS=Y Scrccn((),Y Mouse) Gr Writing 2
Repeat X=X Screen(0,X Mouse) Y=Y Screen(0,Y Mouse) Box XS,YS To X,Y BoxXS,YSToX,Y Until Mouse Click=1 DX=Abs(XS-X) DY=Abs(YS-Y) Screen Open 1,320,200,32,Lowres Get Palette 0
Flash OH For 1=0 To 200 Step 5 Draw 1,0 To 1,200 Draw 0,1 To 320,1 Next I Screen To Front 1 Repeat PX=X Screen(1,X Mouse) PY=YScrecn(l,Y Mouse) Until Mouse Click=l Input "mod= ";M Screen Copy O.XS,YS,XS+DX,YS+DY To 1,PX,PY,M Screen 1 Repeat For 1=0 To I Screen To Front I Wait 50 Next I Until Mouse Click=l
Herhalde bu program gözünüze pek yabancı gelmedi. Bunun sebebi temelde geçen ay yazdığım demo programlarından birine benzemesi. O programda da 'screen copy' komutunu kullanmıştım. Bu seferki program, biraz daha farklı. İlk olarak yine yüklenen resmin neresinin kopyalanacağını belirliyorsunuz. Bu kısımda hiçbir yenilik yok. Bundan sonra yeni bir ekran açılır ve bu ekrana basit bir pattern çizilir. Bunu, değişik kopyalama modlarının birbirinden farkını görmeniz için yaptım. Seçtiğiniz şeklin kopyalanacağı yeri belirlemek için, resmin sol üst köşesinin bulunacağı noktaya mouse'u getirip kliklemeniz yeterli. Bunu yaptıktan sonra program size kopyalama modunu soruyor. Değişik modlar girerek, birbirinden ilginç efektler elde etmeniz mümkün. Her bilgiyi verdikten sonra kopyalama işlemi gerçekleşir (İşlem tamam!). Resimler arasındaki farkı görebilmeniz için her iki ekran da birer saniye ara ile gösterilir. Programı durdurmak için bir süre mouse'un sol tuşuna basmanız yeterli.
'Screen copy' ile kopyaladığınız bölgelerin büyüklüğünü değiştiremezsiniz. Ancak bunu 'zoom' komutuyla yapmanız mümkün.
KOMUT: Zoom KULLANILIŞ: zoom e1,x1,y1,x2,y2 to e2,x3,y3,x4,y4 Bu sefer de 'e1,x1,y1,x2,y2' ve 'e2' parametreleri deminki gibidir. 'x3,y3,x4' ve 'y4' parametreleri şeklin yeni boyutlarını belirler. Şimdi tekrar yukarıdaki gibi bir örnek veriyorum. Programın nasıl çalıştığını herhalde anlayabilirsiniz.
ÖRNEK PROGRAM 3:
Rem******************************************* Rem******************************************* Rem**** **** Rem**** AMIGA DÜNYASI **** Rem**** **** Rem **** AMOS ZOOM DEMO **** Rem**** **** Rem**** written by Burak OZDEMIR **** Rem**** **** Rem**** using AMOS **** Rem**** **** Rem**** AMOS Copyright 1990 **** Rem **** Mandarin Software **** Rem**** **** Rem******************************************* Screen Open (U20.2(X).32.Lowres Flash Off Load Iff "d0:resim" Repeat Until Mouse Click=l XSI=XSercen(0,X Mouse) YSI=Y Sereen(0.Y Mouse) Gr Writing 2 Repeat Xl=XScreen(0,X Mouse) Yl=YScreen(0.Y Mouse) Box XS1,YS1 To Xl,Y1 Box XS1,YSl ToX1,Yl Until Mouse Click=l DXI=Abs(XS1-X1) DYl=Abs(YS1-Y1) Screen Open 1.320.200.32.Lowres Get Palette 0 Flash Off Screen To Front I Screen I Repeat Until Mouse Click=l XS2=XScreen(l.X Mouse) YS2=Y Screen! 1 .Y Mouse) Gr Writing 2 Repeat X2=XScreen(l.X Mouse) Y2=Y Screen( 1 .Y Mouse)