AMOS THE CREATOR

Merhaba arkadaşlar. Bu ayki yazımızda AMOS'un "Sprite" komutlarını göreceğiz. Ama bundan önce Sprite'lar hakkında genel bazı bilgiler vereceğim. Amiga'nın en önemli yeteneklerinden biri de Sprite'lardır. AMOS hem hardware Sprite'ları hem de software Sprite'larını programlarınızda kolayca kullanabilmenizi sağlar. İlk olarak bunların ne olduğuna bakalım:

Hardware Sprite'ları, ekranda birbirlerinden bağımsız olarak gösterilebilen görüntülerdir. Bunlara örnek olarak Mouse'u verebiliriz.

Bunlar hem üzerlerinden geçtikleri yerleri bozmazlar, hem de son derece hızlı hareket ederler. Ayrıca hafızada çok az yer tutarlar. Bu yüzden oyun programlarının yazılımında ilk sırayı alırlar.

Her Sprite, 16 pixel genişliğindedir. Yüksekliği ise 255 pixel'e kadar çıkabilir. Amiga'nın hardware'i en fazla sekiz tane üç renkli veya dört tane onbeş renkli Sprite kullanmanıza izin verir. Sıfır numaralı renk her zaman için saydamdır. İlk bakışta bu miktar pek o kadar iyi değilmiş gibi gözükebilir, ama AMOS'un programlama teknikleriyle bu miktar fazlaca yükseltilebilir. Şimdi teker teker Sprite komutlarını incelemeye başlayalım.

KOMUT: Sprite KULLANILIŞ: Sprite n,x,y,g Bu komut, seçilen Sprite'ı ekranda göstermek için kullanılır. Burada 'n' Sprite numarasıdır. 'x' ve 'y' ise Sprite'ın gözükeceği koordinatlardır. Bu koordinatlar normal ekran koordinatları olmayıp, özel hardware koordinatlarıdır. Bunları normal ekran koordinatlarına çevirmeyi daha sonra göreceğiz. Burada karşımıza yeni bir kavram çıkıyor. O da Sprite'ın üzerinde 'Hot Spot' adıyla alınan bir nokta. Bu noktanın yeri, verilen koordinatlara göre belirlenir ve Sprite oraya yerleştirilir. Burası sanki Sprite'ları tuttuğu-

BURAK ÖZDEMİR muz yerdir. Genelde Sprite'ın sol üst köşesinde bulunur. Fakat bunun da yerini değiştirmek mümkündür. Neyse yakında bunu daha dikkatli inceleyeceğiz. Şimdi gelelim 'g' parametresine... Bu parametre, sprite bilgisinin alınacağı şekil numarasını belirler. Şekiller hafıza bankasının Sprite'lar için ayrılmış özel bir bölgesinde saklanır. Yukarıdaki parametrelerden x, y ve g yazılmayabilir; fakat yine de uygun yerlere virgül koymanız gereklidir.

Aşağıda bu komuta basit bir örnek var. Burada diskten hafızaya alınan bir Sprite'ı, Mouse ile hareket ettiriyorsunuz. Mouse'un herhangi bir tuşuna basınca da program bitiyor.

Rem ******************************** 
Rem** 
AMIGA DÜNYASI 
** 
Rem ** 
AMOS Demo Program 
** 
Rem ** 
Modified from 
** 
Rem ** 
the AMOS Manual 
** 
Rem ** 
By 
** 
Rem ** 
Burak Özdemir 
** 
Rem ** 
AMOS Copyright 1990 
** 
Rem ** 
Mandarin/Jawx 
** 
Rem ******************************** 
Load"AMOS_DATA:Sprites/Octopus.abk" 
Get Sprite Palette 
Curs Off: Cls : Paper 0 
Locate 0,0 : Centre "Hardware sprites Demo " 
Do 
For S=0 To 5 
Sprite S+9,X Mouse+S*32,Y Mouse+S*32,l 
NextS 
Wait Vbl 
If Mouse Key>0 Then Exit 
Loop 
Şimdi de deminki programın biraz daha değişiğini veriyorum. 
Burada matematiksel bir yöntemle Sprite'ın hareketini değiştir-
dim. Bakalım nasıl bulacaksınız.
Rem ******************************** 
Rem** 
AMIGA DÜNYASI 
** 
Rem **         AMOS Demo Program         ** 
Rem ** 
Written By 
** 
Rem ** 
Burak Özdemir 
** 
Rem**       AMOS Copyright 1990 
** 
Rem ** 
Mandarin/Jawx 
** 
Rem ******************************** 
A#=-0.9599999 
B#=1.6 
C#=-0.4 
X1#=X Mouse 
Y1#=Y Mouse 
IX1#=X1 
IY1#=Y1 
Load "amos__data:Sprites/Octopus.abk" 
Get Sprite Palette
Curs Off: Cls : Paper 0 : Locate 0,0 
Centre "Hardwvare sprites Demo "
Do 
IX#=X Mouse 
IY#=Y Mouse 
X#=A#*X1#+B#*IX#+C#*IX1# 
Y#=A#*Y1#+B#*IY#+C#*IY1# 
Sprite 1X#+5O.Y#+5O,1 
IX1#=IX# 
IY1#=IY# 
X1#=IX# 
Y1#=IY# 
Wait2 
If Mouse Key>0 Then Exit 
Loop 
Yukarıdaki programın ilk üç satırını şu şekilde değiştirirseniz, 
sonuç daha ilginç olur:

A#=0.9499994 B#=-0.6 C#=0.6299989 Gelecek ay, bunun gibi matematiksel hilelerden daha çok bahsedeceğim. Ayrıca bir de sürprizim olacak....

Şimdi komut açıklamalarına devam edelim: KOMUT: Get Sprite palette KULLANILIŞ: Get Sprite palette [m] Bu komut ile Sprite'lar için kullanılan renkler, o anki ekran için de kullanılır, 'm' parametresi ile bu renklerin sadece bir kısmının alınması sağlanır. Örneğin m=%0000000000111111 ile ilk 6 renk bu paletten alınır. Bu arada sprite'ların renkleri renk tablosunun 16 ile 32. kütükleri arasından alınır. Her Sprite'a karşılık düşen renk numaraları şöyledir:

Sprite Renk numarası 0/1 17/18/19 2/3 21/22/23 4/5 25/26/27 6/7 29/30/31 16, 20, 24 ve 28 numaralı renkler saydam kabul edilir. KOMUT: Get Sprite KULLANILIŞ: Get Sprite [e,]x1,y1 to x2,y2 Bu komut ile ekranın herhangi bir bölgesindeki şekli Sprite bankasına alabilirsiniz. Burada 'x1', 'y1', 'x2' ve 'y2' parametreleri, ekran koordinatlarını; 'e' ise ekran numarasını belirler. Eğer

'e' belirtilmemişse, o zaman o an aktif olan ekran kullanılır, 'g'

yine resim numarasıdır. 
Aşağıdaki örnekte bu komutların ikisi de kullanılmış. 
Rem ******************************** 
Rem** 
AMIGA DÜNYASI 
** 
Rem **         AMOS Demo Program         ** 
Rem ** 
Modified from 
** 
Rem** 
the AMOS Manual 
** 
Rem ** 
By 
Rem ** 
Burak Özdemir 
** 
Rem **        AMOS Copyright 1990 
Rem ** 
Mandarin/Jawx 
** 
Rem ******************************** 
MAKE_OBJECT 
Flash Off: Get Sprite Palette 
Curs Off: Cls 0 : Paper 0 
Locate 0,0 : Centre "Hardware sprite Demo " 
Hide 
Do 
Wait Vbl 
X=X Mouse : Y=Y Mouse 
For SX=0 To 3 
Sprite SX+9,SX*32+X,Y,1 
Next SX 
If Mouse Key>0 Then Exit 
Loop 
Procedure MAKE_OBJECT 
Cls 0
Polygon 8,0 To 16,16 To 0,16 To 8.0 
Polygon0,16To0,0To4,4To 12.4 To 16.0 To 16.16 To 0.16 
Get Sprite 1,0,0 To 16,16 End Proc 
KOMUT: 
x Sprite 
KULLANILIŞ: 
x Sprite(n) 
Bu komutla, numarası verilen Sprite'm x eksenine göre hard- 
ware koordinatını bulabilirsiniz. 
KOMUT: 
y Sprite 
KULLANILIŞ: 
y Sprite(n) 
Bu komut da deminki gibidir, ama y koordinatı için geçerlidir. 
Rem ******************************** 
Rem ** 
AMIGA DÜNYASI 
** 
Rem ** 
AMOS Demo Program 
** 
Rem ** 
Modified from 
** 
Rem ** 
the AMOS Manual 
** 
Rem ** 
B_y 
** 
Rem ** 
Burak Özdemir 
** 
Rem ** 
AMOS Copyright 1990 
** 
Rem ** 
Mandarin/Jawx 
** 
Rem ******************************** 
Load"AMOS_DATA:Sprites/Octopus.abk" 
Get Sprite Palette Curs Off : Cls 0 : Paper 0 
Hide 
Locate 0,0 : Print "X kordinati = "; 
Locate 0,1 : Print "Y kordinati = "; 
Do 
Sprite 9,X Mouse,Y Mouse, 1 
Locate 20,0 : Print X Sprite(9);" "; 
Locate 20,1 : Print Y Sprite(9);" "; 
Wait Vbl 
If Mouse Key>0 Then Exit 
Loop 
Son olarak da, bir AMAL programı veriyorum. Bu konudan daha 
pek bahsetmedik, ama yine de kolay anlaşılır bir örnek.  
   Rem ********************************
Rem** 
AMIGA DÜNYASI 
** 
Rem ** 
AMOS Demo Program 
** 
Rem ** 
Modified from 
** 
Rem ** 
the AMOS Manual 
** 
Rem ** 
By 
** 
Rem ** 
Burak Özdemir 
** 
Rem** 
AMOS Copyright 1990 
** 
Rem ** 
Mandarin/Jawx 
** 
Rem ******************************** 
Flash Off : Hide : Curs Off 
Screen Hide 0 : View 
MAKE_OBJECT 
Hide 
Cls 0 
Locate 0,0 : Paper 0 
Centre "Patlamayi hareket ettirin" 
Sprite 9,X Mouse,Y Mouse, 1 
Amal 9,"Loop:For R0=l To 16:Let A=R0;Next R0;Jump Loop" 
Amal On 
Screen Show 
Do 
Sprite 9,X Mouse,Y Mouse, 1 : Wait Vbl 
If Mouse Key>0 Then Exit 
Loop 
Procedure MAKE_OBJECT 
ForS=l To 15 
Cls 0,0,0 To 32,32 
Circle 16,16,S*2 
Get Sprite S,0,0To 32,32 
Next S 
End Proc

Bu aylık bu kadar. Tekrar görüşmek üzere...