GameMaker Studio MultiPlayer Dersleri - 10 Ateş Etme
UstaDerslik Soru-Cevap Yararlı Araçlar
arama ikon
Diller
Türkçe Türkçe

bilgi UstaDerslik
Bu uyari kutusudur.
Tamam
Anasayfa
İletişim
Üyeler

GameMaker Studio MultiPlayer Dersleri - 10 Ateş Etme

profil
cArleone
BEĞEN(0)
BEĞENME(0)
GÖRÜNTÜLENME(2098)
RAPOR ET
Gamemaker studio da multiplayer serimize devam ediyoruz.Bu derste ateş etmeyi işleyeceğiz.Geçen derste oyuna giren hersi hareket ettirdik.Bu derste de oluşturacağımız merminin herkeste görünmesini sağlayacağız.

Ateş sisteminin mantığı ise şu:
1-Kullanıcı ateş eder.mouse koordinatları ve isimi servera yollarız.
2-Serverda verileri alıp,isime göre x,y verilerini listeden buluruz.Buduğumuz x,y ile mouse verilerini tüm kullanıcılara yollarız.
3-Kullanıcılar veriyi alıp mermiyi çizdirir.

Temel mantık bu şekilde.

İndir : http://ustaderslik.com/dosya/Gamemaker%20Multiplayer-6.zip

Video :


Client GlobalMouseLeft :


buffer_seek(depo,buffer_seek_start,0);
buffer_write(depo,buffer_u8,5);//işlem olarak 5 yolluyoruz.
buffer_write(depo,buffer_string,string(isim));//isimi yolluyoruz.
buffer_write(depo,buffer_u16,mouse_x);//mouse x yolluyoruz.
buffer_write(depo,buffer_u16,mouse_y);//mouse y yolluyoruz.

network_send_packet(socket,depo,buffer_tell(depo));//verileri yolluyoruz.

Client Networking :


var baglanti_tipi=ds_map_find_value(async_load,"type");//gelen veri varsa

switch(baglanti_tipi){
case network_type_data:

var veri_al=ds_map_find_value(async_load,"buffer");//gelen buffırı al
buffer_seek(veri_al,buffer_seek_start,0);
var islem=buffer_read(veri_al,buffer_u8);//işlem idsini alıyoruz.

if(islem=1){//işlem 1 ise
ds_list_clear(oyuncu_verileri);//listeyi temizliyoruz.
var toplam=buffer_read(veri_al,buffer_u8)*3;//3 değer yollandı isim,x,y, o yüzden kullanıcı sayısını 3 ile çarpıyoruz.
for(var i=0;i<toplam;i+=3){//tüm verileri döngüye aldık
ds_list_add(oyuncu_verileri,buffer_read(veri_al,buffer_string));
ds_list_add(oyuncu_verileri,buffer_read(veri_al,buffer_string));
ds_list_add(oyuncu_verileri,buffer_read(veri_al,buffer_string));//verileri listemize yazdırdık.
}
}else if(islem=2){
var xx=buffer_read(veri_al,buffer_u16);
var yy=buffer_read(veri_al,buffer_u16);//x ve y yi aldık
mx=buffer_read(veri_al,buffer_u16);
my=buffer_read(veri_al,buffer_u16);//mouse x ve mouse y yi aldık

instance_create(xx,yy,obj_mermi)
}

break;
}

Server Networking :


var baglanti_tipi=ds_map_find_value(async_load,"type");
//bu network olaylarını yakalayan bir komut.eğer işem var ise aşağıda işlemi yakalayacağız.

switch(baglanti_tipi){
case network_type_connect:

var osocket=ds_map_find_value(async_load,"socket");//oyuncunun socket nosunu al
ds_list_add(oyuncu_sayisi,osocket);//listeye ekle

break;
case network_type_disconnect:

var osocket=ds_map_find_value(async_load,"socket");//oyuncunun socket nosunu al
var arama=ds_list_find_index(oyuncu_sayisi,osocket);//listede ara

if(arama>=0){//eğer var ise
ds_list_delete(oyuncu_sayisi,arama)//listeden sil.
}

break;
case network_type_data:

var veri_al=ds_map_find_value(async_load,"buffer");//tüm verileri paket şeklinde aldık.
buffer_seek(veri_al,buffer_seek_start,0);//verileri içini araştırdık.almaya hazırız.
var islem=buffer_read(veri_al,buffer_u8);//işlem için yolladığımız veri.

if(islem=1){
var isim=buffer_read(veri_al,buffer_string);//isimi aldık.

ds_list_add(oyuncu_isimleri,isim);//isimi listeye ekledik
ds_list_add(oyuncu_verileri,random_range(75,500));//oyuna giren kişiye rasgele bir x veriyoruz.
ds_list_add(oyuncu_verileri,250);//y olarada 250 veriyoruz.

}else if(islem=2){
var isim3=buffer_read(veri_al,buffer_string);//yollanan isimi alıyoruz.
var isim_ara=ds_list_find_index(oyuncu_isimleri,isim3);//listede isimi arıyoruz.
var sil_pos=isim_ara*2;//kullanıcı çıktığında isim listesindeki konumuna göre verilerini buluyoruz.

if(isim_ara>0){//isim varsa
ds_list_delete(oyuncu_isimleri,isim_ara);//isimi listeden siliyoruz.
ds_list_delete(oyuncu_verileri,sil_pos);//x değerini siliyoruz.
ds_list_delete(oyuncu_verileri,sil_pos+1);//y değerini siliyoruz.
}else{
ds_list_delete(oyuncu_isimleri,isim_ara);
ds_list_delete(oyuncu_verileri,isim_ara);
ds_list_delete(oyuncu_verileri,isim_ara+1);
}
}else if(islem=3){
var socket = ds_map_find_value( async_load , "id" );//veri isteği yollayan kişinin idsini alıyoruz
veri_yolla(socket);//verileri yollayacağımız scripte yolluyoruz.
}else if(islem=4){

var tus_isim=buffer_read(veri_al,buffer_string);//isimi aldık
var tus=buffer_read(veri_al,buffer_string);//tuşu aldık

var isim_ara=ds_list_find_index(oyuncu_isimleri,tus_isim);//ismi listede aradık.
var pozisyon=isim_ara*2;//kullanıcı ismine göre verinin listedeki yerini bulmak için.

if(isim_ara>0){
if(tus="W"){//Eğer tuş w ise
var y_pos=ds_list_find_value(oyuncu_verileri,pozisyon+1)-hiz;//verilerde y nün yerini bulduk aldık.daha sonra hızdan çıkardık.
ds_list_replace(oyuncu_verileri,pozisyon+1,y_pos);//veriyi yeni değeri ile değiştirdik
}else if(tus="S"){//Eğer tuş s ise
var y_pos=ds_list_find_value(oyuncu_verileri,pozisyon+1)+hiz;//verilerde y nün yerini bulduk aldık.daha sonra hıza ekledik.
ds_list_replace(oyuncu_verileri,pozisyon+1,y_pos);//veriyi yeni değeri ile değiştirdik
}else if(tus="A"){//Eğer tuş a ise
var x_pos=ds_list_find_value(oyuncu_verileri,pozisyon)-hiz;//verilerde x nün yerini bulduk aldık.daha sonra hızdan çıkardık.
ds_list_replace(oyuncu_verileri,pozisyon,x_pos);//veriyi yeni değeri ile değiştirdik
}else if(tus="D"){//Eğer tuş d ise
var x_pos=ds_list_find_value(oyuncu_verileri,pozisyon)+hiz;//verilerde x nün yerini bulduk aldık.daha sonra hıza ekledik.
ds_list_replace(oyuncu_verileri,pozisyon,x_pos);//veriyi yeni değeri ile değiştirdik
}
}else{
if(tus="W"){//Eğer tuş w ise
var y_pos=ds_list_find_value(oyuncu_verileri,isim_ara+1)-hiz;//verilerde y nün yerini bulduk aldık.daha sonra hızdan çıkardık.
ds_list_replace(oyuncu_verileri,isim_ara+1,y_pos);//veriyi yeni değeri ile değiştirdik
}else if(tus="S"){//Eğer tuş s ise
var y_pos=ds_list_find_value(oyuncu_verileri,isim_ara+1)+hiz;//verilerde y nün yerini bulduk aldık.daha sonra hıza ekledik.
ds_list_replace(oyuncu_verileri,isim_ara+1,y_pos);//veriyi yeni değeri ile değiştirdik
}else if(tus="A"){//Eğer tuş a ise
var x_pos=ds_list_find_value(oyuncu_verileri,isim_ara)-hiz;//verilerde x nün yerini bulduk aldık.daha sonra hızdan çıkardık.
ds_list_replace(oyuncu_verileri,isim_ara,x_pos);//veriyi yeni değeri ile değiştirdik
}else if(tus="D"){//Eğer tuş d ise
var x_pos=ds_list_find_value(oyuncu_verileri,isim_ara)+hiz;//verilerde x nün yerini bulduk aldık.daha sonra hıza ekledik.
ds_list_replace(oyuncu_verileri,isim_ara,x_pos);//veriyi yeni değeri ile değiştirdik
}

}
}else if(islem=5){
var gisim=buffer_read(veri_al,buffer_string);//isimi aldık
var gmx=buffer_read(veri_al,buffer_u16);//mouse x aldık
var gmy=buffer_read(veri_al,buffer_u16);//mouse y aldık

var isim_ara2=ds_list_find_index(oyuncu_isimleri,gisim);//listeden isimi aradık
var pozisyon2=isim_ara2*2;

if(isim_ara2>0){
var gx=ds_list_find_value(oyuncu_verileri,pozisyon2);
var gy=ds_list_find_value(oyuncu_verileri,pozisyon2+1);//x ve y yi aldık
}else{
var gx=ds_list_find_value(oyuncu_verileri,isim_ara2);
var gy=ds_list_find_value(oyuncu_verileri,isim_ara2+1);//x ve y yi aldık
}

for(var i=0;i<ds_list_size(oyuncu_sayisi);i++){//tüm oyuncuları teker teker aldık
var socket=ds_list_find_value(oyuncu_sayisi,i);//socketlerini aldık.

buffer_seek(depo,buffer_seek_start,0);
buffer_write(depo,buffer_u8,2);//işlemi bosu yolladık
buffer_write(depo,buffer_u16,gx);
buffer_write(depo,buffer_u16,gy);//x ve y yolladık
buffer_write(depo,buffer_u16,gmx);
buffer_write(depo,buffer_u16,gmy);//mouse x ve mouse y yolladık

network_send_packet(socket,depo,buffer_tell(depo));//verileri herkese yolladık.

}

}

break;
}




denemeturu
denemeturu 3 Yıl Önce Cevaplandı
Oh be bende bu dersi bekliyordum : )
Bu kodlarla skill yapabilirmiyiz mesela 1e basinca buz 2ye basınca ateş atsa?
cArleone
cArleone 3 Yıl Önce Cevaplandı
Ek parametre olarak bir tip olarak gönder.kullanıcılarda tip kontrolü yap ona göre mermi bastır.yani yapılır.
denemeturu
denemeturu 3 Yıl Önce Cevaplandı
ins bundan sonra can sistemi veya chat gelir : )
KazorLe
KazorLe 3 Yıl Önce Cevaplandı
Ben İndirdim 2 tane Klasör çıktı nasıl Örneğe bakıcam
cArleone
cArleone 3 Yıl Önce Cevaplandı
@KazorLe gamemaker studionun v2 üzeri bir sürümü lazım.
KazorLe
KazorLe 3 Yıl Önce Cevaplandı
v2? eğer bi linkini verirsen sevinirim
cArleone
cArleone 3 Yıl Önce Cevaplandı
https://www.yoyogames.com/studio/buy burdan indirebilir veya satın alabilirsin.
KazorLe
KazorLe 3 Yıl Önce Cevaplandı
Satın alabilirsin Demişsin İlla Paraylamı Alacağım? yoksa demoda varmı
cArleone
cArleone 3 Yıl Önce Cevaplandı
Var attığım link de mevcut ücretsiz sürümü.



Kod
Kalın
Vurgu
Resim
Video
Url
CEVAPLA
Tüm Hakları Saklıdır. ©Arleone 2013-2014 UstaDerslik






Giriş
Şifremi Unuttum...
Şifre Talep
  Kuralları Kabul Ediyorum.
Kaydol