AMOS THE CREATOR
Retro bilgisayar
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...