Bu dersimizde minecraft tarzı bir
envanter i gamemaker ile nasıl yaparız onu anlatacağım.Öncelikle bize 4 obje lazım olacak bunlar
envanter,alınacak item,envanterde gözükecek item ve kontrol.Ben örnek uzamasın diye alınacak ve gözükecek itemleri aynı obje kullandım.
Önce mantığını anlatayım sonra kodlara geçeriz.Öncelikle envanterde tutacağımız tüm objeleri arraylarda tutacağız ve bunlara ait bilgiler saklayacağız.Örnek :
0,1=isim 0,1=miktar 0,2=konum gibi her iteme ait bilgileri saklayacağız.bu artırılabilir.Bu işlem içim array bilmeniz şart.
Daha sonra envanter de itemleri yerleştirmek için düzgün çizilmiş bir envanter resmine ihtiyaç var.Ben yukarıda minecraftınkini koydum onu kullanacağım.Düzgün çizilmesi şart çünkü belirli aralıklarla koordinatları hesaplayıp envanter üstüne bastıracağız itemleri.aralıklar uyumsuz olursa sistem iyi olmaz.Şimdi kodlara geçelim.
1-Envanter
create :
for(i=0; i<=42; i+=1){
global.envanter[i,0]="";//isim
global.envanter[i,1]="";//miktar
global.envanter[i,2]="";//konum
}
Burada değişkenleri tek tek yaratmak yerine for ile döngü şeklinde 42 tane array parametresi yarattım.
step :
for(i=0; i<=42; i+=1){
if(global.envanter[i,0]!=""){
if(i<10){
if(global.envanter[i,0]="obj_1"){if(!place_meeting(((x+70)+(i*54))+24,(y+185)+24,obj_1)){instance_create(((x+70)+(i*54))+24,(y+185)+24,obj_1)}}
if(global.envanter[i,0]="obj_2"){if(!place_meeting(((x+70)+(i*54))+24,(y+185)+24,obj_1)){instance_create(((x+70)+(i*54))+24,(y+185)+24,obj_2)}}
if(global.envanter[i,0]="obj_3"){if(!place_meeting(((x+70)+(i*54))+24,(y+185)+24,obj_1)){instance_create(((x+70)+(i*54))+24,(y+185)+24,obj_3)}}
if(global.envanter[i,0]="obj_4"){if(!place_meeting(((x+70)+(i*54))+24,(y+185)+24,obj_1)){instance_create(((x+70)+(i*54))+24,(y+185)+24,obj_4)}}
if(global.envanter[i,0]="obj_5"){if(!place_meeting(((x+70)+(i*54))+24,(y+185)+24,obj_1)){instance_create(((x+70)+(i*54))+24,(y+185)+24,obj_5)}}
if(global.envanter[i,0]="obj_6"){if(!place_meeting(((x+70)+(i*54))+24,(y+185)+24,obj_1)){instance_create(((x+70)+(i*54))+24,(y+185)+24,obj_6)}}
}else{
if(global.envanter[i,0]="obj_1"){if(!place_meeting(((x+15)+(i*54))+24,(y+10)+24,obj_1)){instance_create(((x+15)+(i*54))+24,(y+10)+24,obj_1)}}
if(global.envanter[i,0]="obj_2"){if(!place_meeting(((x+15)+(i*54))+24,(y+10)+24,obj_1)){instance_create(((x+15)+(i*54))+24,(y+10)+24,obj_2)}}
if(global.envanter[i,0]="obj_3"){if(!place_meeting(((x+15)+(i*54))+24,(y+10)+24,obj_1)){instance_create(((x+15)+(i*54))+24,(y+10)+24,obj_3)}}
if(global.envanter[i,0]="obj_4"){if(!place_meeting(((x+15)+(i*54))+24,(y+10)+24,obj_1)){instance_create(((x+15)+(i*54))+24,(y+10)+24,obj_4)}}
if(global.envanter[i,0]="obj_5"){if(!place_meeting(((x+15)+(i*54))+24,(y+10)+24,obj_1)){instance_create(((x+15)+(i*54))+24,(y+10)+24,obj_5)}}
if(global.envanter[i,0]="obj_6"){if(!place_meeting(((x+15)+(i*54))+24,(y+10)+24,obj_1)){instance_create(((x+15)+(i*54))+24,(y+10)+24,obj_6)}}
}
}
}
Stepte ise önce 42 tane alanı sürekli tarayıyoruz.İsimleri boş olanları şeçiyoruz.Önce alta boş yer varmı diye bakıyoruz.Yoksa yukarıda işlem yapıyoruz.1 bölüm boş diyelim.Buraya basacağımız objenin ismini karşılaştırıyoruz.İsim uyarsa orda bu objeden daha önce bastıkmı kontrol ediyoruz.Yoksa buraya bu objeyi basıyoruz.
2-Alınan obje
create :
isim="obj_1";
miktar=3
İsim ve miktarını belirliyoruz.
left pressend :
for(i=0; i<=42; i+=1){
if(isim!=global.envanter[i,0]){
if(global.envanter[i,0]=""){
global.envanter[i,0]=isim;
global.envanter[i,1]=miktar;
global.envanter[i,2]=i;
break;
}
}else{
global.envanter[i,1]+=1;
break;
}
}
instance_destroy();
Bu objeye tıklanırsa 42 bölümü tek tek kontrol ediyoruz.Eğer o objeden varsa miktarını artır diyoruz.Yoksa ilk gelen göze itemi yerleştrip döngüyü bitiriyoruz.
Temel kullanımı bu şekilde verileri arraylarda tutuğumuz sürece değişik işlemleri yaptırabiliriz.Örnek mouse sürükleyip başka göze koyma gibi işlemleri.
Görüntüsü :
İndir : http://ustaderslik.com/dosya/envanter.zip