OYUN YAPIMI, NEDENLERİ VE OYUN YAPIMINA GENEL BİR BAKIŞ

Oyunlar (Özellikle bilgisayar oyunları) günümüzde çok büyük piyasaya sahip bir sektördür. Oyun tasarımcıları da bu nedenle bir şirkette bir süre çalışıp yeterli deneyime sahip olduğunu düşününce birkaç kişilik bir grup halinde çalıştıkları şirketten ayrılıp kendi şirketlerini kurarlar. Çünkü bu devasa sektörde onlar da söz sahibi olmak isterler. Bir oyunda çoğu kişinin bakmadığı “Credits” kısmında listenin başlarında gelmek, bu sektörde isimlerini duyurmak isterler.

En basit haliyle oyun sektörü bugün bu durumda… Bu sektörü daha da açarsak popülerleşmiş oyunların çekilen filmleri, oyundaki kahramanların çeşitli mağazalarda satılan modelleri, araçların maketleri de bu sektörün gelir kaynaklarındandır. Kısacası bu sektörde iyiyseniz cebiniz de rahat eder kendinizde.

Herhalde oyun yapımının avantajları az da olsa anlaşılmıştır. Peki bu sektörde yer almak istiyorsak ne yapmalıyız?

***Öncelikle mesleğiniz, ya da olmak istediğiniz meslek çok önemli. Bu konuda başta Yazılım Mühendisliği olmak üzere, Bilgisayar Mühendisliği de bu sektörde çalışmak isteyenler için büyük avantajlar sağlar. Bu dallarda mesleğiniz gereği, özellikle Yazılım Mühendisliği nde olmak üzere, yazılım öğrenirsiniz. Şu an en basitinden; bilgisayar oyunlarında görülen karakter hareketlerinin klavye tuşlarına bağlı olarak(Ya da oyun kolunda basılan bir tuşa bağlı olarak) gerçekleşmesi, yapay zeka(Bu çok önemli. Oyunda oyuncunun aldığı zevk büyük ölçüde yapay zekanın gelişmişliğine bağlıdır.),oyunda varsa saatin işlemesi, oyun sırasında görev almak, arabanın hareket ettirilmesi vb. her şey yazılımla alakalıdır. Yazılımsız bir oyun YOK piyasada. Ancak bu yazılım da kendi içinde çok ama çok çeşitli dillere ayrılır. Ancak işin iyi yanı bu dillerden sadece iki, üçünü dahi bilseniz bu işte iyi bir yere sahip olursunuz. Peki hangi yazılım dillerini öğrenmek gerek? Öncelikle oyun motorlarının pek çoğunda (Oyun motorları da kapsamlı bir konu olduğu için o hususa başka bir konuda değineceğim. Ancak şimdilik bu konuda bilmenize gerek yok.) kullanılan yazılım dilleri C++ ve C ikilisidir. Bir oyunda hazır bir oyun motoru kullanıyorsanız genelde bu ikilisi yeterli olur. Ancak bir oyun motorunu geliştirmek istiyorsanız burada devreye .NET, ileri düzey DirectX bilgileri girer. Ancak şu an bunlara gerek yok çünkü her şeyin bir sırası var. Bazı oyun motorları C# kullanır ki bu dil C ve C++ dillerinden epey farklıdır. Bunun yanında kimi oyun motorları da var ki bunlar Delphi, Python gibi diller kullanır. Kimisi de direk bunları kullanmaz ve bu tip dillerden(Daha çok C,C++,C#) türemiş, daha sade ve sırf kendi motorlarında kullanılabilen kendi programlama dillerini kullanırlar. Neyse ki bu dilleri öğrenmek eğer C,C++,C# biliyorsanız çok kolaydır.

Eğer yazılıma başlamak istiyorsanız bu konuda C ve C++ ı öncelikle öğrenmenizi şiddetle tavsiye ediyorum. Zaten C++, C dilinden türemiş olduğu için ikisinden birini öğrenince diğerini bilmek çok rahattır. Ardından isterseniz C# a geçiş yapabilirsiniz.

***Tamam, bir oyun yazılımsız olmaz. Ancak oyunda görsellik olmayınca yazılımın da bir faydası olmaz. Öncelikle şunu belirtmeliyim ki oyun yapımı için çok çeşitli bilgiler gerekir ki genelde sadece bir insanın bunları öğrenmesi zordur. Bu yüzden de oyun yapımı bir takım işidir. Hobi olarak oyun yapımına atılacaklar için başta tek kişi olmak hemen hemen hiç sorun olmaz. Çünkü ilk oyunlar genelde çok küçük çaplı oyunlar olduğu için tek bir kişinin bu oyunun tüm işlerini yetiştirmesi zor olmaz. Ancak özellikle 3 boyutlu oyunlara geçiş yapılınca iş iyice zorlaşır ve bir ekibe ihtiyaç duyulur. Bu hususu da belirtmiş olalım.

Şu an bir oyunu açtığımızda ne görürüz? Görsel olan pek çok şey.. Saçma sapan olan ya da olmayan pek çok şey görürüz ve hepsi de birer görsel öğedir. Bunların hiçbiri kendiliğinden oluşmamıştır. Hepsinin bir tasarımcısı ve boyayıcısı vardır ve sırf boyamak bile(Doku eklemek) şu an çok büyük oyun firmalarında ayrı kişilerin yer aldığı bir koldur. Yani bir modeli yapmakla ona renklerle can vermek tamamen ayrı ayrı güç işlerdir ve iyi bir model de çok zahmetlidir. Şunu da belirteyim ki bir modelci modelini(Oyundaki her şey ama her şey) ne kadar iyi ve ne kadar en ince ayrıntıya dikkat ederek yapsın, eğer model doku bakımından özen gösterilmeden boyanırsa kesinlikle o emeklerin hiçbir değeri kalmaz. Çünkü o doku oyunda oyuncunun gözüne çok kötü gözükür ve oyuncuyu oyundan soğutabilir. Bu doku işlemini de boyamak derken karıştırmayalım. Modelleri boyamak için boyayıcılar Paint ile araba çizer gibi bir şeyler yapmaya çalışmazlar. Yani en azından gerçekçi modeller için. Boyayıcılar modellere koyacakları dokuları önce düşünürler sonra en uygun olacak olana karar verip o dokuya uygun gerçek hayatta çekilmiş dijital fotoğraflardan yararlanırlar. Bu fotoğrafları da çoğu zaman kendileri çekerler ki bu yüzden modele doku ekleyen kişi sırf bu işte uzmanlaşmak istiyorsa fotoğrafçılıkta iyi olmalı ve elinde de kaliteli bir makine olmalıdır. Ancak bu dokuların modele yerleştirilmesi de farklı bir şeydir. Ne yazık ki bu konuda benim de bilgim bu kadar 🙂 .

Bir modelci ve dokucu uyum içinde çalışıp işinin hakkını verirse ortaya gerçekten çok kaliteli eserler çıkar ki bunlara en güzel verebileceğim örnekler The Elder Scrolls 4: Oblivion’daki şahane ev, silah modelleri, GTA 4’deki insanlar, arabalar, ya da kaliteli bir uzay simülasyonu oyunundaki herhangi bir şey olabilir(Abartmıyorum, bu konuda en iyiler özellikle Online olan ve oyunda uzay aracı kullandığımız oyunlardan çıkıyor bence.. ((Bkz. ‘Taikodom’,’Jumpgate Evolution’))). Kısacası bir oyunun (Özellikle de 3 boyutlu oyunun) en önemli bir diğer unsuru da modelleme ve dokulamadır.

Bu iş 2 boyutlu oyunlara geçince ise değişir(Genelde hobi amaçlı tek kişinin yaptığı oyunlar.). Bu oyunlarda model; bir çizim, dokulama da bu çizimin herhangi bir resim işleme programında boyanması olduğu için iş çok daha basitleşir. Ancak 2 boyutlu oyunlarda da eğer özen gösterilirse şaheserler ortaya konulabiliyor(Oyundaki grafiklerden bahsediyorum.). Özen gösterilmiş bir 2 boyutlu oyun da bazen eğlence bakımından 3 boyutlu oyunları aratmıyor. Tabi işe yapılan oyunun özellikleri, oyun motoru da giriyor ama grafikler olmadan bunların anlamı yok. Peki 2 boyutlu grafikler, modeller nasıl yapılabilir? Öncelikle bu konuda kendinizi geliştirmek istiyorsanız gerçekten zorlanabilirsiniz. Bu konuda küçük çaplı, ücretsiz bir oyun tasarlamak için Photoshop, Paint.Net(Favorim) gibi programlar yeterli olurken eğer çok kaliteli çalışmalar yapmak istiyorsanız burada devreye özel çizim aletleri girer. Bu çizim aletleri aynı tablet bilgisayarlar gibi olup bilgisayar değil, sadece bir çizim aletidir ve elinizdeki dijital kalemle ekrana çizdiklerinizi aynen bilgisayara aktarır bu da mouse’yi değil de elinizi kullandığınız için çok daha rahat olur ve kaliteli eserler ortaya çıkar. Ancak maliyeti de ona göre çoktur. Zaten bu aletleri evlere almak da saçma olduğu için ben ya tablet bilgisayar, ya da az önce dediğim gibi bir resim işleme programı kullanmanızı tavsiye ederim(Ama paranız varsa tablet bilgisayar iyi iş görür.).

***Artık kalan en önemli husus da sesler. Bir oyunda sesler olmadan zevk almak mümkün değil. Gerçekten bu böyle. Birisi biz oyun oynarken sesinden rahatsız olup kısmamızı isteyince neden çok az kısarız da azar işitiriz yani? Ya da bir odada biri çok önemli bir telefon görüşmesi yapacaksa ve oyunun sesini tamamen kapatmamız gerekmişse o görüşme bitince neden hemen hoparlöre saldırırız? Sanırım anlaşıldı 🙂 . Bu konuda da bilgi vermek isterdim ama ne yazık ki veremiyorum çünkü ben de bir şey bilmiyorum sayılır. Ben de kendi oyunlarımda hazır sesler kullanıyorum. Ancak bunu sorun etmeye gerek yok çünkü böyle yapan çok ama çok kişi var. Ama eğer profesyonelce bir projeyse bu oyun projesi; kesinlikle kendi müzikleri, sesleri, diyalogları olur ki bu da ekstradan giderdir ama iyi yanı eğer oyun tutarsa oyunun müzikleri SoundTrack adında CD’ler halinde satışa sunulabilir. Ayrıca orijinal müzikler oyuncuların da ilgisini çeker. Bu konuda eğer kendinizi geliştirmek istiyorsanız özellikle küçük oyunlar için tasarlayabileceğiniz MIDI formatlı ses dosyaları oluşturmaya yarayan pek çok ücretsiz program bulabilirsiniz ki bu programların kimisi paralı programlardan bile daha iyi olabiliyor. Bunun yanında ulaşabileceğiniz bir stüdyo ve çalmayı iyi bildiğiniz bir çalgı aleti varsa, ve müzik konusunda iyi başka arkadaşlarınız da varsa anlaşıp beraber stüdyoda gerçek ses kaydı yaparak(Daha çok müzikler) çok daha kaliteli sesler ortaya koyabilirsiniz.

Evet bu yazının sonuna geldik. Sabırla okuduğunuz için teşekkür ederim. Umarım oyun yapımı konusunda bir miktar da olsa sözel bilgi kazanmış olursunuz. Artık siz de bu konuda gerçek, teknik bilgi sahibi olmak istiyorsanız lütfen gelecek diğer yazılarıma göz atmayı unutmayın.

yorum
  1. hasan dedi ki:

    güzel paylaşım teşekkür ederiz

  2. yasirkula dedi ki:

    hasan :

    güzel paylaşım teşekkür ederiz

    Yorum için teşekkürler, devamını getirmeye çalışıyorum paylaşımların.

  3. Ahmet dedi ki:

    Dün Kemal AKAY’ın yazmış olduğu DİRECTX ile Oyun Programlama isimli kitabı aldım.Yazılımı da öğrenmek istiyorum fakat tasarıma daha çok merakım var… Hangisi önde gelir acaba yani daha üst rütbe daha iyidir 🙂 Hani oyun oynarken insan merak edip ”Lan nasıl yapıyolar şunu yaa” 🙂 dediyse onda bi merak uyandırmıştır zaten… Ama oyuna bakarken tasarım daha çok ilgi çekiyo (yani yazılımla karakter v.b şeylerin nasıl ileri-geri veya nasıl zıpladığı oyuncuya şaşırtıcı gelmiyo hani… 🙂 ) Patlamalar,dokular,efendime söyliyim karakterlerin ölme biçimleri daha çok göze çarpıyo.Velasrıkelam 😀 Yapay zeka programcısı mı yoksa Grafik programcısı mı? ÖNERİNİZ…?

  4. yasirkula dedi ki:

    Bence çok güzel açıklamalar yapmışsın, ayrıca bana danışmak istemene de teşekkür ederim 😀
    Şimdi, dediğin gibi yazılımla ilgili oyuna eklediğin zıplama vs. oyunculara ilginç gelmiyor pek, ama onlar olmadan bir aksiyon oyunu vb. genelde çok iyi olmaz. (İstisnalar yok değil: Dead Space oyununda zıplama yok ama oyun iyi tuttu.) Benim gördüğüm; genelde insanlar bir oyunda önce grafiklere bakıyor. Oynanış felan başta hiç umursamıyorlar. Ama oyunu uzun soluklu oynayıp beğenmeleri için oynadıktan sonra oyunun yazılımsal olarak sunduğu özellikler ön plana çıkıyor bu sefer.
    Sana şöyle söyleyeyim, eğer gelecekle ilgili bir oyun tasarım grubunda olmak gibi planın varsa tek bir konuya yoğunlaş ve o da seveceğin bir şey olsun. Sen modellemeyi daha çok seviyorsun heralde. Onun için benim bildiğim; modellemeciler en az 2 güçlü modelleme programını bilen ve yenilerine de kısa sürede aşina olabilen, yenilikçi tasarımları olan ve kendilerine çizim olarak çeşitli açılardan sunulan 2 boyutlu bir modeli aynen 3 boyuta taşıyabilen insanlar. Bunlar başta gözünü korkutabilir ama kolay bir modelleme programından başlarsan (Google Sketchup 6 TR) aslında işin zevkli olduğunu görürsün.
    Eğer sen yazılımcı olacaksan işin daha kolay bence. Senin meşhur programlama dillerini bilmen sana verilecek görevleri yapman için gerekli en önemli şey. Onun haricinde bir oyun motorunun yazılım diline aşina olabilmelisin (Ama zaten meşhur dilleri bilince başka dillere alışmak kolay oluyor.). Ayrıca oyun tasarlamasan bile, duyduğuma göre sırf Sun firmasının Java dilini bile bilenler yazılım sektöründe (Türkiye dahil) iş bulabiliyorlarmış.
    Sen tek başına oyun yapacaksan da tercihim yazılım öğrenmen yönünde. Tek başına oyun yapmaksa gerçekten zor(2 boyutlu bile olsa.).
    Eğer bir oyuna mod tasarlamak ilgini çekiyorsa (Mount Blade gibi…) modelleme yapman senin için daha rahat olabilir. Burada önemli olan yaratıcılığını kullanarak yeni bir şeyler tasarlamak.
    Çook uzattım sanırım, kusura bakma 🙂 Benim sana tavsiyem başta herkesin yaptığı gibi Game Maker programıyla oyun tasarımına başla, ancak görsellikle ilgili birşeyler yapmaya çok çalışma; sen daha çok oyunlarının yazılımıyla ilgilen. Program için gerekli dersleri sitemden, oyunyapim.com’dan vb. pek çok Türkçe kaynaktan da bulabilirsin. Game Maker’da yazılımsal olarak kendini geliştirdikten sonra oyun yapımı sana zevkli gelecektir(bence) ve gerçek oyun tasarım dillerine (C türevleri vb.) biraz daha çabuk alışabilirsin.
    Biliyorum, konu çok saptı değişik yerlere ama sorduğun soruya kimse kesin cevap veremez diyorum, hangi tarafı seçeceğin tamamen senin zevkine ve becerine bağlı 🙂 Burada saydıklarım çerez niyetine aklında bulunsun 😀

  5. Ahmet dedi ki:

    Pekâlâ yazılıma dönüyorum o halde 😀 Bazıları zor diyolar bu C++ gibi dillere,fakat ne demiş Victor Hugo;”Beklenen gün gelecekse çekilen çile kutsaldır.” 🙂 Teşekkürler ilginiz için,sitenize en kısa zamanda göz atıcam…

  6. Ahmet dedi ki:

    http://www.oyunyapim.com‘a üye olamıyorum davetiye kodu istiyo… 😦

  7. yasirkula dedi ki:

    Ahmet :

    http://www.oyunyapim.com‘a üye olamıyorum davetiye kodu istiyo… :(

    http://www.oyunyapim.com/forum/davetiye-istekleri-f-53.html adresine girip yeni bir konu aç ve oradaki hazır davetiye şablonuna uygun cevapları girip konuyu yayınla. Kısa sürede davetiye yollarlar diye düşünüyorum.

  8. TARKAN dedi ki:

    BİR SÜREDİR TAKİP EDİYORUM BURAYI ÇOK İŞİME YARDI
    BEN 40 DAN SONRA BUNLARA BAŞLAMAYA KARAR VERMİŞ BİRİYİM
    HİÇ BİR DİL BİLMİYORUM AMA BU GEÇEN 2 AYDA ( HEVESLİMİYİM NEYİM) ÇOK ŞEY ÖGRENDİM..
    TEŞEKKÜRLER

  9. TARKAN dedi ki:

    BİRDE ÜSTADIM 3 ŞEY SORMAK İSTİYORUM CEVAPLARSAN SEVİNİRİM
    1-ÖRNEK VEREREK SORACAĞIM:
    KARAKTERİMİZ 100 YAŞAM PUANI VAR VE ÇEŞİTLİ OBJELERE ÇARPIP YAŞAM PUANINI SIFIRLIYOR. SIFIRLAYINCA 1 CANI GİDİYOR VE 3 CANI GİDİNCE OYUN BAŞA ALIYOR BUNU NASIL YAPARIZ ????
    2-ODA DEĞİŞTİRMEDEN SÜREKLİ ROOM’UN DEVAM ETMESİNİ NASIL YAPARIZ??
    3-OYUN SONUNUNA VEYA 3 CANI BİTTİĞİNDE OYNAYANIN SKORUNU EKRANA NASIL YAZDIRABİLİRİZ??

    ARA SIRA BU TİP SORULAR SORMAMDA SAKINCA YOKTUR UMARIM…
    ŞİMDİDEN TEŞEKKÜR EDERİM…

    • yasirkula dedi ki:

      Yorumunuz için teşekkürler, bana soru sormanızın hiçbir sakıncası yok.

      1- Karakterin Create eventine sağdaki “score” sekmesinden “Set Health” aksiyonunu sürükleyin ve değerini 100 yapın. Ardından “Set Lives” aksiyonunu sürükleyip değerini 3 yapın.
      Canın gitmesi için Collision eventinde Set Health aksiyonunu sürükleyin ve değerini -1 yapıp “Relative”yi işaretleyin. Ancak bu yöntem canı çok hızlı sıfırlar, bunun önüne geçmek için bir alarm eventi ve kullanıcı tanımlı bir değişkene ihtiyaç var. Bunu anlatmıyorum şimdi, Game Maker’ı ne kadar bildiğinizi bilmiyorum çünkü 🙂
      Karaktere “Other” sekmesinden No More Health eventi ekleyin ve içerisine bir “Set Lives” aksiyonu sürükleyip değerini -1 yapın ve “Relative”yi işaretleyin. Böylece yaşam puanı bitince bir can gidecek.
      Son olarak karaktere “Other” sekmesinden No More Lives eventi ekleyip içine main2 sekmesinden Restart Game aksiyonunu sürükleyin. Böylece canlar bitince oyuna restart atılacak.
      2- Bu soruyu anlayamadım, siz elle ayarlamadıkça zaten oyunda room kendiliğinden değişmez.
      3- Ekrana skor yazdırmak için hazır bir aksiyon mevcut. “score” sekmesinden Show Highscore aksiyonunu No More Lives eventi içerisine atmanız yeterli. Ancak bu aksiyonun oyuna restart atan aksiyonun ÜZERİNDE olması lâzım yoksa yüksek skor gözükmez.

  10. tarkan dedi ki:

    çok teşekkür ederim cevapların için…

    ikinci soruyu ben anlatamadım muhtemelen.. (sorun bende) 🙂
    yani tek bir room yapıp (scroling gibi) oyun baştan sona devam etsin oda geçişleri olmasın yada ( odalar arasındaki geçişi oynayan kişi anlamasın).
    eğer böyle bir özellik yoksa.. bir room’ un maksimum ne kadar genişletebiliriz( ayrıca nasıl)….

    ayrıca yine bir kaç sorum olacak cevaplarsan uzun bir süre (senin sınavların bitene kadar :)…)
    soru sormayacam…
    şimdiden bana katlandığın için teşekkürler..

    1- player asansöre biniyor.. onunla birlikte aşağı yukarı hareket etmesini nasıl yaparız ve sağa sola giden bir platformun üzerinde yine platformla birlikte player’ında birlikte hareket etmesini nasıl yaparız ( ben yaptığım pek başarılı değil asansör playerla birlikte çıkıyor hatta iniyor ama tekrar 2. kez çıkmıyor sağa sola da gidi yor ama platform yön değiştirdiğinde (sağa yada sola geçiş yaptığında ) player orada kalıyor)
    2-playeri yüzünü sağa sola döndürmek için nette böyle bir kod buldum
    //SAGA SOLA DÖDÜRME
    if keyboard_check_pressed(vk_left){image_xscale=-1;}
    if keyboard_check_pressed(vk_right){image_xscale=1;}
    //END
    ama dönüşlerde 32*32 (bir kare kayıyor) player dönerken örneğin bir solid objenin yanında durduğunda ve yönü (yüzü) sola bakarken , yönünü sağa çevirdiğimde solid objenin içine giriyor..
    3-player nasıl ateş edeceğini anlatırmısın….
    4-oyun içerisinde bir objeyi oyun esnasında görünür yapabilirmiyiz örneğin:çilek objesine çarptığı an anahtar objesi görünür olsun
    5- son olarak yine örnekle soracağım..
    oda geçişlerinde oyuncunun bazı görevleri yerine getirmesini istiyorum mesala 5 altın toplamış olsun veya 300 puana ulaşmış olsun veya 3 düşman öldürmüş olsun veya bir anahtarı bulmasını istiyorum bu eylemler gerçekleşmeden kapı aktif olmasın… ( daha ilgici bir kaç görevi yaptıktan sonra kapı aktif olsun mesala yukarıdaki tüm olayları gerçekleştirdikten sonra … :)))

    son bir ricam olacak geniş bir zamanında.. actions tuşlarının ne işe yaradığını içine yazdığımız değerlerin neleri etkilediğini gibi ( yani menü eğitim) videosu hazırlarsan çok makbule geçer..

    biraz uzun oldu kusura bakma sınavların bitinceye kadar soru sormayacağım dediğim için biraz abarttım :))

    teşekkürler….

    • yasirkula dedi ki:

      Bu sorularınıza haftasonu cevap yazmaya çalışacağım çünkü o zamana kadar bilgisayara bakmam mümkün değil 🙂

    • yasirkula dedi ki:

      1- Bunun çeşitli yolları olabilir, ancak ben bahsettiğiniz konuda çok iyi olmadığımdan bu asansör işiyle ilgili çok iyi bir yöntem söyleyemeyeceğim ancak yatay giden platformlarda şu kod işe yarıyabiliyor:

      x+=other.x-other.xprevious;

      Şu an bununla ilgili bir örnek yapmaya çalışıyorum. Eğer güzel bir sonuç elde edersem sitede örneği paylaşırım. Pek yardımcı olamadığım için üzgünüm 😦

      2- Bunun sebebi karakterin spritesinin Origin, yani merkez noktasının tahminimce 0’a 0 olması. Bunu düzeltmek için karakterin spritesini açın ve örneğin karakterin spritesi 64X… boyutundaysa origin noktasının X koordinatını 32 yapın, yok eğer karakter spritesi 48X… ise 24 yapın. Yani spritenin genişliğinin yarısı yapın Origin’in X değerini.

      3- Basit bir şekilde anlatayım. Bir kurşun oluşturun, ardından karakterin Keyboard Spacebar Pressed eventine “main1” sekmesinden Create Instance aksiyonunu sürükleyin, kurşun objesini seçin ve alttan Relative’yi seçin. Böylece Space’ye basınca karakterin olduğu noktada kurşun oluşturulacak. Gelelim kurşunun hareketine. Eğer kurşun sadece sağa veya sola ateş edilebilecekse kurşunun Create eventine “control” sekmesinden Execute Code aksiyonunu sürükleyip içine şu GML kodunu yazın:

      speed=10; //Kurşunun hızı
      if(karakter.image_xscale==1)
      {
      direction=0;
      }
      else
      {
      direction=180;
      }

      Yok eğer kurşun örneğin mouse ile ateş edilen yere gidecekse Create eventine üsttekinin yerine şunu yazın:

      speed=10; //Kurşunun hızı
      direction=point_direction(karakter.x,karakter.y,mouse_x,mouse_y);

      Bunları kodsuz anlatmak isterdim ancak en kolay yolu kodla halletmek. Sitemdeki GML dersleriyle kod yazmaya sizin de bir yerden başlangıç yapmanızı öneririm.

      4- Tabi ki mümkün 🙂 Verdiğiniz örnekten yola çıkayım. Karakterin çilekle temas eventine “control” sekmesinden Set Variable aksiyonunu sürükleyin ve “visible” (Tırnaksız yazın) değişkeninin değerini “true” (Tırnaksız) veya 1 yapın. Böylece ilgili obje görünür olacak. Bir objeyi görünmez yapmak isterseniz de “visible”nin değerini “false” ya da 0 yapın.

      5- Bu dediğiniz şeyleri yapmak için kullanıcı tanımlı değişken tanımlayıp onları kullanmayı bilmeniz lâzım. Madem öyle biz de o zaman bu işin temelini burada atalım. Kullanıcı tanımlı değişkenler (Kısaca değişken diyeceğim.) herhangi bir olayı test etmek, bir objeyi, herhangi bir değeri depolamak gibi sınırsız işlevde kullanılabilirler ve etrafınızda görebileceğiniz dandik C++ oyunlarında bile pek çok değişken vardır. Game Maker’da da oyunların %97’sinde değişkenler kullanılır, kalan %3’ü ise henüz Game Maker’a yeni olanların deneme amaçlı yaptığı oyunlardır.
      Değişken tanımlamak için karakterin Create eventinde “control” sekmesinden Set Variable aksiyonunu sürükleyin. Değişkenlere istediğimiz ismi verebiliriz, birkaç şartla: Türkçe karakter ve boşluk kesinlikle yok. Madem görevden bahsediyoruz, değişkenimizin adı “gorev1” (Tırnaksız) olsun. Hatta birden çok görev olduğundan her görev için başka bir değişken daha oluşturun ve onlara “gorev2” gibi isimler verin. Değişkenlerin başlangıç değerleri 0 olsun.
      İlk görevden başlayayım: Karakterin altınla Collision eventine sağdan Set Variable aksiyonunu atın ve “gorev1” değişkeninin değerini 1 yapıp alttan “Relative”yi işaretleyin. Böylece “gorev1” değişkeninin değeri 1 ARTACAK.
      İkinci görev için hazır bir değişken var: “score”. Siz “score” sekmesindeki Set Score aksiyonunu kullanınca kendisi otomatik olarak güncellenir zaten.
      Üçüncü görev için ise karakterin kurşunuyla düşman objesinin Collision eventini kullanabilirsiniz. Burada ise “gorev2” değişkeninin değerini 1 artırın.
      Son görev için karakterin anahtarla Collision eventinde “gorev3” değişkeninin değerini 1 yapın.
      Şimdi tüm bu görevlerin gerçekleşip gerçekleşmediğine sırayla bakalım. Bunun için kapı objesinin Step eventine “control” sekmesinden Test Variable aksiyonu sürükleyip “gorev1” değişkeninin 5’e eşit olup olmadığına (Equal To) bakın. Bu aksiyonun hemen altına bir başka Test Variable aksiyonu koyun ve “score” değişkeninin değerinin 299’dan büyük olup olmadığına (Larger Than) bakın. Bir altında bu sefer “gorev2″nin 3 olup olmadığına ve bir altında da “gorev3″ün 1 olup olmadığına bakın. Ardından eğer tüm bu koşullar sağlanıyorsa yapılacak şeyleri (Örneğin kapının açılması) bu az önce koyduğumuz Test Variable aksiyonları grubunun bir altına (Grubun altına, yani 4. Test Variable aksiyonunun altına) koyabilirsiniz. Örneğin “main1″den Change Instance ile kapalı kapıyı açık bir kapıyla değiştirebilirsiniz.

      Umarım yardımcı olmuştur, kolay gelsin! 🙂

  11. tarkan dedi ki:

    cevabını denedim oldu teşekkürler
    yalnız şöyle bir sorun oluştu.. 100 health 0 düşünce 1 lives gitti buraya kadar herşey tamam ama health esksiye düşmeye devam etti ve başka lives gitmedi..yani lives 1 azaltığında health tekrar +100 yüz olmalı… bunu yapamadım :)) yardımcı olurmusun..
    teşekkürler

  12. tarkan dedi ki:

    kusura bakma ne olur
    yine bir hata oluştu.. lives kaç olursa olsun 2 yada 1 oda değiştirdiğinde tekrar 3 oluyor bunuda düzeltemedim 🙂 🙂 🙂

  13. yasirkula dedi ki:

    Karakterin Create eventindeki Set Health (DÜZELTME: Set Lives) aksiyonunu silip onu karakterin “Other” seçeneğindeki “Game Start” eventine koyarsanız sanırım sorunu halleder.

  14. tarkan dedi ki:

    TEŞEKKÜR EDERİM …

    Karakterin Create eventindeki Set Health aksiyonunu silip onu karakterin “Other” seçeneğindeki “Game Start” eventine koyarsanız sanırım sorunu halleder.

    SANIRIM BU CEVABINDAKİ ” Set Health ” SET LIVES OLACAK 🙂 🙂 🙂

  15. tarkan dedi ki:

    🙂
    artık bir şeyler öğrenmeye başladım (katkın büyük)

  16. tarkan dedi ki:

    2-ODA DEĞİŞTİRMEDEN SÜREKLİ ROOM’UN DEVAM ETMESİNİ NASIL YAPARIZ??

    daha önce sorduğum bu soruyu nasıl yapılacağını biraz kurcaladıktan sonra buldum..
    room seting ten yapılıyor…. 🙂

  17. tarkan dedi ki:

    usta..

    hazır hafta sonu ve sen cevap yazacakken şunada cevap verirmisin?

    aynı objeden bir odada 4 tane olduğunu varsayın.. obje playerle çarpışınca yok olsun diye bir aksiyon kullandık.. hangisiyle çarpışırsa çarpışsın 4 de aynı anda yok oluyor …4 farklı obje mi yapmalıyım yoksa bunun başka yolu varmı … sadece çarptığım obje yok olsun..diğer kopyalar kalsın taki onlarada çarpana kadar…

    teşekkürler şimdiden..

    • yasirkula dedi ki:

      Öteki sorunuza akşama doğru cevap yazmaya çalışacağım.
      Eğer Collision eventini o 4 tane kopyası olan objenin içinde oluşturduysanız Instance Destroy aksiyonunda yukarıdan “Self”i seçin. Yok eğer Collision eventi temasa geçilen diğer objenin içinde oluşturulduysa Instance Destroy aksiyonunda yukarıdan “Other”ı seçin.
      Eğer herhangi bir aksiyonda yukarıdan “Object: …” seçeneğini seçerseniz ilgili aksiyon o objenin mevcut room’daki tüm kopyalarına uygulanır.
      Sonuç olarak; her kopya için yeni bir obje oluşturmanıza kesinlikle gerek yok. 🙂

      • tarkan dedi ki:

        valla bunu denedim ama olmamıştı.. ama şimdi yaptığımda oldu 🙂
        teşekkür ederim

  18. tarkan dedi ki:

    cevapların için teşekkür ederim…

    4- Tabi ki mümkün Verdiğiniz örnekten yola çıkayım. Karakterin çilekle temas eventine “control” sekmesinden Set Variable aksiyonunu sürükleyin ve “visible” (Tırnaksız yazın) değişkeninin değerini “true” (Tırnaksız) veya 1 yapın. Böylece ilgili obje görünür olacak. Bir objeyi görünmez yapmak isterseniz de “visible”nin değerini “false” ya da 0 yapın.

    üstadım üsteki cevabın sorusunu yanlış sormuşum kusura bakma..
    görünür olmasını derken oluşmasını kastetmiştim hata bende tekrar kusura bakma..
    görünmez olsa da obje gelip çarpıyor ve puan gidiyor..
    benim amacım objenin oluşması…
    örnek alarm kurdum odaya 5 saniye içinde düşman oluşsun…
    veya bir obje çarptığında düşman oluşsun…

    başını şişirdim yine teşekkürler şimdiden….

  19. tarkan dedi ki:

    x+=other.x-other.xprevious;

    valla usta bu kod işe yaramadımı benmi yanlış yere yazdım…
    anlamadım…

  20. tarkan dedi ki:

    yazdıkların benim için çok değerli . çok teşekkür ederim..
    yaptığım oyun bitince ilk sana yollayacam ve yorumlarını alacağım…
    bu oyun benim oyun mantığı ögrenmem içinde bir olay
    o yüzden sürekli soruyorum..
    cevapların için teşekkür ederimm…

    bi soru daha 🙂

    oyun içerisinde düşman objeye health tanımlaya bilirmiyiz..
    örnek düşmana ateş ediyoruz..
    düşman health 100 olsun ve her kurşun 10 health götürsün ..
    tabi health 0 olunca düşman ölsün..

    • yasirkula dedi ki:

      Çok teşekkür ederim.

      Game Maker’da kod yazarak yapabileceklerinizin bir sınırı yok. Dediğiniz şeyi çok rahat bir şekilde yapabiliriz. Düşmanın Create eventine Set Variable aksiyonu koyup değeri 100 olan “saglik” (Tırnaksız yazın.) adında bir değişken oluşturun. Ardından düşmanla kurşunun Collision eventine Set Variable koyup “saglik” değişkeninin değerini -10 yapıp alttan Relative’yi işaretleyin. Eğer Collision eventini kurşun objesinde olusturduysanız yukarıdan “Other”ı seçmeyi unutmayın. Ardından Test Variable ile düşmanın “saglik”ının 1’den küçük olup olmadığına bakın. Eğer öyleyse düşmanı yok edin. Bu Collision eventinin en altında bir Instance Destroy ile kurşunu yok etmeyi de unutmayın.

  21. tarkan dedi ki:

    cevapların için tekrar teşekkürler…

    bi soru daha:)

    düşman objeye health verebilirmiyiz..
    örneğin düşman obje health 100 olsun ve her kurşu n değdiğinde 10 health gitsi sonuç olarak health 0 olduğunda ölsün..

  22. tarkan dedi ki:

    usta cevap 5 denedim ama test yapacak obje (kapı) hata veriyor (bilinmeyen değişken) diye
    ben mi yanlış yaptım acaba

  23. tarkan dedi ki:

    tamamdır usta bunuda çözdüm…
    kapının değilde playerin step ine test variable yaptım düzeldi

  24. tarkan dedi ki:

    üstadım ..

    acil bir soru..

    ekrana yazı yazdırmak istiyorum.. ama bu yazı bir şeyi test ederken değerinin kaç olduğunu görmem için gerekli..geçici olarak yapacam oyun içinde olmayacak….aslında log tutturmak istiyorumda denebilir…
    bir değişkenin değerini ekrana yazdımak istiyorum..

    teşşekürler..

    • yasirkula dedi ki:

      Ben de kendi oyunlarımda bolca yapıyorum zaten, iyi fikir. Önce yeni bir obje oluşturun ve “depth”ini negatif bir değer verin. Objenin spriteye ihtiyacı yok ancak “Visible” olmak zorunda. Ardından objenin Draw eventine “control” sekmesinden “Draw Variable” aksiyonunu (Adı tam olarak bu olmayabilir, Set Variable aksiyonunun olduğu satırın en sağında) sürükleyin ve gösterilecek değişkeninin adını ve gösterileceği koordinatları girin. Eğer isterseniz “draw” sekmesindeki “Set Color” aksiyonuyla yazının rengini değiştirebilirsiniz.
      Son olarak oluşturduğunuz bu objeyi room’a eklemeyi unutmayın.

      NOT: Eğer göstereceğiniz değişken diyelim “karakter” objesinde tanımlanmışsa “Draw Variable” aksiyonunda değişken adı olarak “karakter.degiskeninadi” (Tırnaksız) olarak yazın. Böylece Game Maker’a “karakter” objesinde tanımlanmış “degiskenadi” isimli değişkeni göstermesi gerektiğini söylersiniz. Bu yöntemi Set Variable aksiyonunda da kullanabilirsiniz.

  25. tarkan dedi ki:

    çok teşekkürler..
    süper oldu bunu bana öğretmen….

  26. tarkan dedi ki:

    usta
    yazdırma sayesinde sorunu buldum ama..bende hata yok gibi..
    ben değişkene eğer değerin 1 ise 1 azalt demişim
    ama değişken 0 iken bile yine 1 düşerek -1 oluyor..
    bunu çözemiyorum..step event sıralamayı değiştirdim düzeliyor ama bu kezde diğer değişken bozuluyor..blok a aldım ne yaptıysam düzelmedi…

    önerilerin varmı?
    çok makbule geçer.

    • yasirkula dedi ki:

      Step eventindeki ilgili aksiyonları buraya sırasıyla yazarsanız sorunu görebilirim belki. Şu an verdiğiniz bilgilere bakınca herhangi bir sorun göremedim.

  27. tarkan dedi ki:

    şimdi ustacım…
    bir adet playerim var obje adı :player_1 bu objenin create eventinde iki adet değişken tanımlı
    1-weapons_active başlangıç değeri 0(sıfır)
    2-single_weapons_active başlangıç değeri 0(sıfır)
    bu obje tabanca objesiyle çarpışınca single_weapons_active +1 oluyor ve player_1 objesinin create eventinde test variable nda single_weapons_active 0 dan büyük olursa (realitive işaterli) up tuşunu basınca ateş etmesi aktif oluyor ve objenin step eventinde, player_1 den player_2 dönüşüyor

    bu obje tüfek objesine çarpınca weapons_active +1 oluyor ve player_1 objesinin create eventinde test variable nda weapons_active 0 dan büyük olursa (realitive işaterli) up tuşunu basınca ateş etmesi akttif oluyor ve objenin step eventinde, player_1 den player_3 dönüşüyor

    player_2 tek sefer ateş edince tüm yeteneklerini kaybedip player_1 objesi görünümüne dönüyor eğer ateş etmeden düşman objesiyle çarpışırsada yine ateş etme yeteneğini kaybederek player_1 objesine dönüşüyor

    player_3 sonsuz ateş ediyor ancak düşman objesiyle çarpışısada ateş etme yeteneğini kaybederek player_1 objesine dönüşüyor

    ayrıca player_1 düşman objesiyle çarpışınca live 1 azalıyor ama player_2 ve player_3 düşman objesiyle çarpışınca live gitmiyor sadece dönüşüm oluyor..

  28. tarkan dedi ki:

    dosyalar

  29. tarkan dedi ki:

    print screen yaptım ama yükeyemedim sanırım rar dosyasını

  30. tarkan dedi ki:

    neyse usta bunuda çözdüm…
    step yerine olayların gerçekleştiği yerlere test variable yaptım..
    düzelttim

    teşekkürler…

    • yasirkula dedi ki:

      Kusura bakmayın ben internete arada bir bağlanabiliyorum ve bu yüzden yorumlarınızı biraz geç görebiliyorum. Sorununuzu kendi başınıza çözebilmenize sevindim, Game Maker’ı en iyi böyle öğrenebilirsiniz zaten. Oyununuzdaki dönüşüm olaylarını duyunca aklıma Mario geldi, oyununuzda başarılar 🙂

  31. tarkan dedi ki:

    🙂 evet zaten marıo benzeri bi şeyler yapıyorum … mario zamanında çok oynan bi oyundu..
    onun benzerini yapmak hatta daha ileriye taşımak hem keyifli.. hem daha ögretici..
    tabi benim oyun biraz daha streji var görevler var…

    bu arada bi soru daha:)
    player le birlikte hareket eden bir obje yapmak istiyorum..(anahtar objesi)
    kafasının üstünde… tüm anahtarları toplayınca ‘kapı açık ‘ diye bir yazı yazsın…

    yada şöyle..
    oyuncunu kafasının hemen üstünde toplaması gereken anahtar sayısını yazsın ve her anahtarda 1 azalsın 0 olunca anahtar objesi oluşsun

    hangisinin görseli daha iyi olur bilemiyorum ikisini de demek istiyorum…
    bunu nasıl yapacağımı anlatırmısın….

    şimdiden teşekkürler

    • yasirkula dedi ki:

      Güzel düşünmüşsünüz. Bence ikinci yöntem daha hoş ve onu öğrenirseniz 1. yolu da zaten kendiniz yapabilirsiniz diye düşünüyorum.

      Öncelikle karakterin “Other-Room Start” eventinde “anahtarr” (Evet, sonunda 2 tane “r” var çünkü oyununuzda “anahtar” adında bir obje varsa (ki bence vardır.) o isimde bir de değişken oluşturmak sorunlara yol açabilir.) adında bir değişken oluşturun, değerini 0 yapın, 1 yapın farketmez. Bu değişkenin değeri her bölümde büyük ihtimal değişeceği için şöyle bir şey yapacağız:

      ***Yöntemden bahsetmeden önce küçük bir dipnot eklemem gerekti: Game Maker’ın kendi içinde “room” adında bir değişkeni vardır ve diyelim oyuncu “bolum1” adındaki room’da oynamaktaysa bu değişkenin değeri “bolum1” (Tırnaksız) olur kendiliğinden ve her bölüm değiştiğinde bu değişkenin yeni değeri de yeni açılan bölümün adı olur.

      Şimdi Room Start eventine geri dönelim. Bir Test Variable aksiyonu ile “room” değişkeninin değerinin diyelim “bolum1″e eşit olup olmadığına (equal to) bakın ve eğer öyleyse “anahtarr” değişkeninin değerini “bolum1″deki anahtar sayısı yapın (Relative YOK 🙂 ). Bu Test Variable aksiyonunu her bölüm için uygulayın ve her bölüm için “anahtarr” değişkeninin değerini o bölümdeki anahtar sayısına eşitleyin.

      EKLEME: Şimdi aklıma geldi, üstteki yöntem yerine belki şöyle bir şey yaparsanız 3-4 kat daha rahat edersiniz ve bir bölüme yeni bir anahtar ekleyince bu değeri sürekli güncellemek zorunda kalmazsınız: Az önceki aksiyonları silin, onlara gerek kalmadı. “control” sekmesinden bir “Execute Code” aksiyonu sürükleyin ve içine “anahtarr=instance_number(anahtar);” yazın. Böylece her bölüm başında karakter objesi otomatik olarak “anahtarr” değişkeninin değerini odadaki anahtar sayısına eşitleyecek.

      Şimdi karakterin anahtarla Collision eventinde “anahtarr” değişkeninin değerini Relative olarak -1 yapın, eventin sonunda anahtar objesini Destroy etmeyi UNUTMAYIN. Yoksa “anahtar” değişkeninin değeri sürekli azalır.

      Şimdi yeni bir obje oluşturun, objeye negatif bir Depth değeri verin (Depth değeri küçük olan objeler büyük olan objelerin ÜZERİNDE görünür.), sprite vermeyin. “Visible” şıkkı işaretli olmak zorunda. Ardından objenin “Draw” eventinde Test Variable ile “karakter.anahtarr” değişkeninin 0’a “Equal To” olup olmadığına bakın, aşağıdan “NOT”u işaretleyin. Böylece eğer eşit DEĞİLSE yapılacakları ayarlarız. Bu aksiyonun altında Draw Variable ile “karakter.anahtarr” değişkeninin değerini “karakter.x” ve “karakter.y-30” koordinatlarına yazdırın (Relative işaretlemeyin.). Buradaki -30 değerini kafadan verdim, bunu kendinizce en uygun değere ayarlayabilirsiniz.

      Son olarak bir önceki aksiyonun altına bir ELSE aksiyonu koyun ve onun altına da Draw Sprite (draw sekmesinde) aksiyonunu sürükleyip “karakter.x” ve “karakter.y-30” koordinatlarında anahtar objesinin spritesini çizdirin.

      Böylece güzel bir sistem hazırlamış olacaksınız diye düşünüyorum. Sorun çıkacağını sanmıyorum, yine de her türlü sorunuzu sorabilirsiniz, kolay gelsin! 🙂

  32. tarkan dedi ki:

    usta teşekkür ederim
    hemen aklıma geleni soracağım.. normalde odada 4 anahtar (obje adı key) oluyor genellikle her odada 1 arttırmayı düşündüm yazdıklarından sonra ama..
    odanın sonunda bir canavar var ve o canavarı öldürdüğünde 1 anahtarda o veriyor..
    (yani canavarı öldürmek zorunluluğu getirdim bir yolunu bulup odadan kaçmasınlar diye)
    bu sorun olur mu bilemiyorum olursa..
    anahtarr=instance_number(key)+1; (doğru ifademi bilemiyorum)
    diye kodu değiştirmek geldi hemen aklıma…
    deneyip sonuçlarını bildiririm size….

  33. tarkan dedi ki:

    evet 🙂
    teşekkürler..

    denedim.. ve oldu..
    şunları da denedim

    0 olursa KAPI ACIK diye bir şey yazdırdım buda oldu..
    ama KAPI ACIK yazısı ekrana gelirken 0 ve anahtar sprite sini yok edemedim…
    ayrıca player in üstündeki anahtar sprite sini küçültemedim..

    🙂

    teşekkürler

  34. yasirkula dedi ki:

    Anahtarın boyutu için, yeni bir sprite oluşturun ve anahtar spritesini verin ona da. Ancak bunu Edit Sprite’den boyut olarak küçültün ve Draw Sprite’den bu spriteyi çizdirin.
    KAPI AÇIK yazısı için de, tahminimce if-else deyimleri yerinde duruyor ve siz onu ekstra bir Draw aksiyonu olarak yazdınız. Başka birşey gelmedi aklıma 😦 KAPI AÇIK’ı if’in içine yazdıysanız bilemicem :S

  35. tarkan dedi ki:

    yeni sprite denedim sormadan önce ama o da olmadı…sonra yapamayınca sordum 🙂
    evet if else’nin altına yeni bir test variable yaptım eger 0 eşitse yazıyı yazdırdım

    • yasirkula dedi ki:

      İşte o yüzden 2 tane şey oluyor, bir üstteki Test Variable gerçekleşiyor bir de alttaki. Bunun için alttaki yazı yazdırma aksiyonunu yukarıdaki Else’in altına yazarsanız bence sorun kalmaz. (Ama orada daha önce olan anahtar çizdirme aksiyonunu silmeniz lazım 🙂 ) Aynı anda 2 şey yaparsanız görüntü kötü olabilir haliyle.

  36. tarkan dedi ki:

    usta cevaplamadan önce bir soru daha…
    player düşman objsiyle çarpışınca yine (1 YASAM PUANI GİTTİ) diye bir şey yazsın ve kaybolsun..
    ayrıca çarpıştığı an bir sprite de oluşturmak istiyorum (öldüğünü gösteren ) mesala
    son olarakta backround da bir anlığına değişsin…
    bunlarıda nasıl yapacağımı anlatırsan oyun bitiyor sanırım..
    biraz efekt ve benzeri şeyler ekliyorum.. daha hareketli olsun diye sonrada kopyasını sana yollayacağımmm…

    ha bir soru daha oyun bittiğinde yapanların emeği geçenlerin vs.. gibi yazıların yukarıya doğru kaymasını istiyorum bunuda nasıl yapacağımı anlatırsan tamamdır inşallah..:)

    • yasirkula dedi ki:

      Burada benim tavsiyem bir şekilde bir programla güzel bir “1 CAN GİTTİ” yazısı hazırlayın ve onu sprite olarak Game Maker’a yükleyin, Sprite’nin Origin’ini Center yapın. Ardından Edit Sprite panelinden 15-20 frame uzunluğunda bir Disappear animasyonu ekleyin. Son olarak aynı yerden bir de Add Reverse’yi ekleyin. Böylece güzel animasyonlu bir yazınız olacak.

      Şimdi yazı için negatif Depth’li bir obje oluşturup ona yazı spritesini verin ve objenin Other-Animation End eventine Instance Destroy aksiyonu koyun. Artık bu objeyi karakter ölunce oluşturabilirsiniz.

      Sprite dediğiniz şey kurukafa gibi birşey sanırım. Onun için de en makul yol yine negatif Depth’li bir obje oluşturmak ve ona bu spriteyi vermek. Bu spriteyi de önceki gibi zamanla silinip giden bir şey yapabilirsiniz. Ama hem yazı hem kurukafa iyi gitmeyebilir, oluşturuldukları konumlara dikkat edin.

      Background fikri güzel ama Game Maker’da background değiştirmek çok zahmetli. (Bkz. F1 ile açılan Help-GML-Changing Resources-Rooms-room_set_background) Onun yerine 2 önerim var. Ya yeni bir sprite kullanın ya da diyelim Room’da “backgrounds”da değiştirmek istediğiniz şey Background 0 ise onunla aynı özelliklerde Background 7 oluşturun ancak buna yeni arkaplanı atayın ve “Visible when room starts” tikini KALDIRIN.

      Ardından oyunda backgroundun değişmesini istediğiniz eventte şu kodu araya ekleyin: ‘background_visible[7]=true;’ Eğer isterseniz ‘background_visible[0]=false;’ kodunu da ekleyebilirsiniz. Ardından kısa bir alarm oluşturup içine az önce yazdığımız kodların tam tersini (False ise true, true ise false) yazın.

      Emeği geçenler için ise yeni bir obje oluşturup Draw Text ile “x” ve “y” koordinatlarına istediğiniz Credits yazısını yazın (# işaretiyle bir alt satıra geçebilirsiniz.). Ardından siyah arkaplanlı yeni bir odanın dibine bu objeyi koyun. (İsterseniz yazı rengini beyaz ve fontunu da farklı bir font yapabilirsiniz.) Objenin Create eventinde de yukarı yönde yavaş bir hız verin. Son olarak Credits’i bitirmek veya tekrarlamak için objenin “y” değerinin belli bir değerden küçük olup olmadığına bakabilirsiniz Test Variable ile.

      Oyununuz şimdiden hayırlı uğurlu olsun, başarılar!

  37. tarkan dedi ki:

    usta komik bir soru olacak ama…

    kapalı kapıyı. anahtar topladığında açık kapıyla ‘playerin collision nunda go to next room olan kapı objesi’ ile değiştiriyorum ama player diğer odaya geçemiyor 🙂

  38. tarkan dedi ki:

    tamam usta ya spriteyi değiştirmiş..
    objeyi değiştirdim …düzeldi 🙂 🙂 🙂

  39. tarkan dedi ki:

    cevapların için teşekkürler…

    deneyip sonucu bildiririm… küçük bir soru daha playerin bir objenin önünde yada arkasında olmasını ayarlayabilirmiyiz… yürürken objeninin önünden geçsin yada arkasından geçsin gibi…

    • yasirkula dedi ki:

      Karakter objesinin Depth ‘inin değerini küçültürseniz Depth’i büyük olan objelerin önünde görünür. Karakterin de önünde olacak objelerin Depth’ini karakterden de küçük yapın.

  40. tarkan dedi ki:

    usta oyunda küçük bir hata olmuş ama düzeltemedim..

    room içerisinde çeşitli yerlerde göller var (mavi object 🙂 )
    player bunlara düşerse jump to start pozisyon oluyordu… tabi ben oyuna zaman gibi bir şey ekledim böyle oluncada bitişe yakın bir gölete düştüğünde tekrar en başa dönüyor..
    haliyle zamanıda olmadığından bitirmek imkansız…

    şunu yapmak istiyorum hangi gölete düşerse düşsün..
    göletin hemen yanında tekrar başlasın.. bir kaç şey denedim ama beceremedim…
    yardım edermisin
    teşekkürler…

    • yasirkula dedi ki:

      Ben şöyle birşey yapardım: Oyuncunun düşebileceği tüm göletlerin yakınına, oyuncu o gölete düşünce geri nerede dirilmesini istiyorsanız bir obje dikin (Bunun için önce karakter_respawn gibi yeni bir obje oluşturun. Spriteye gerek yok.). Ardından oyuncunun mavi objeyle Collision eventinin altına şu kodu ekleyin (Ama önce Jump to Start aksiyonunu silin 😀 ):

      respawnn=instance_nearest(x,y,karakter_respawn);
      x=respawnn.x;
      y=respawnn.y;

      Böylece denizi boyladığınız çoğu zaman geri en yakın yerde dirilirsiniz.

  41. SnipeR95 dedi ki:

    benim fikrim objenin.x objenin.y olarak adamı spawnlaya bilirsin bütün göllere tek tek girmektense collision bölümüne x: y: bölümünüe

    object.x = 3
    object.y = 3

    bu şekilde yaparsan o objenin 3 sagını ve 3 asagısında spawnlar

    eğer zeminle bitişikse göl o zaman “object.y = 0” yapmalısın yukarı çıkmaması için

    ———

    en olmadı adamı 10 x geriye spawnlarsın yani mantık bu umarım yardımcı olmusumdur 🙂

    • yasirkula dedi ki:

      İlgine teşekkürler 🙂

    • tarkan dedi ki:

      ”adamı spawnlaya bilirsin” bu yeniden oluşturmak sanırım…
      bunu create instance ile yaptım ve bunuda göletle ilişkilendirdim.. göletin belirli bir ileri mesafesinde oluşturdum.. olduda nitekim ama hep düştüğü göletin ilerisinde oluştu.. ben ceza olsun diye göletin gerisinde oluşsun istiyorum.. bunu yapamadım.. hatta – değer verim ama olmadı..

      ilgine ve yardımlarına teşekürler

      • tarkan dedi ki:

        usta ne yalan söyliyeyim aynı şeyi bende düşündüm ….
        neden yapmadığıma gelirsen kalabalık olmasın diye yapmamıştım.. dekor olsun diye ağaç falan yapmıştım artık göletin başına bir ağaç koyup dediğini yapacam…
        teşekkür ederim..
        benim gibi acemiler için sanırım tek yolu bu
        🙂 🙂 🙂

  42. tarkan dedi ki:

    usta selam..

    bir soru soracağım..
    şimdi oyunda kapının açılması için anahtar topluyorduk hatırlarsan…ben bildiğim halde bazen anahtarları unutuyorum yada göremiyorum.. tahmin ediyorum ki ilk kez oynayanlar dahada zorlanacak..
    sorum şu:
    anahtar objesinden uzaklaştığımız da örneğin 500 pik oyunda bir uyarı çıksın ”ANAHTARI GEÇTİNİZ” gibi tabi oyunda 5-6 anahtar olduğu için sadece ilgili anahtarı yada en yakın anahtarı geçtiğimizde bu uyarı çıksın…

    şimdiden teşekkürler…

    • yasirkula dedi ki:

      Karakterin Step’ine şunu ekleyebilirsiniz:

      if(distance_to_object(instance_nearest(x,y,anahtar))>500)
      {
      /*Eğer mesafe 500’den çoksa yapılacakları buraya yazın. Örneğin ANAHTARI
      GEÇTİNİZ yazısı oluşturmak için bir obje oluşturabilirsiniz, ya da daha pratik birşey
      yapabilirsiniz…*/
      }

      • tarkan dedi ki:

        bu süslü parantezin içine yazı yazacağız demi?

      • yasirkula dedi ki:

        Evet, benim orada yazdığım uzunca açıklamayı silip yerine kod yazacanız.

      • tarkan dedi ki:

        bu yazdırma kodunu beceremedim 🙂

      • yasirkula dedi ki:

        O zaman şöyle yapın:

        Test Variable aksiyonu ile “distance_to_object(instance_nearest(x,y,anahtar))” değerinin 500’den Larger Than olup olmadığına bakın. Ardından hep yaptığımız gibi yapılacak aksiyonları sürükleyin.

      • tarkan dedi ki:

        yani karakterin step ine bunu yazıp.
        test variable ile kontrol mu edeceğiz..
        yaw kusura bakma bu gün kafam durdu..
        🙂

    • yasirkula dedi ki:

      Evet öyle yapın 🙂

  43. tarkan dedi ki:

    teşekkürler usta şimdi deneyecem..

    bir soru daha sorsam ayıp olur mu? acaba.. 🙂
    creat efect ile duman çıkartıyorum.. örneğin smoke up.. bu yukarıya doğru gidiyor.. bunu aşagıya doğru gitmesini sağlayabilirmiyiz..

  44. yasirkula dedi ki:

    Aşağı gideni yok sanırım 😦

  45. tarkan dedi ki:

    hani bir code la falan yönünü ters çevirsek bunu yapamazmıyız

    • yasirkula dedi ki:

      Sıfırdan particle kodu yazmanız lazım, o da biraz karışık. Ben eskiden biraz uğraştım ama hakim olamadım. O yüzden elimden birşey gelmez 😦

      Ama belki o efekt yerine aşağı doğru süzülen bir duman spritesi kullanabilirsiniz 🙂

  46. tarkan dedi ki:

    usta..
    oldu ama ileride olunca ve 500 pik kalıncada ”ANAHTARI GEÇTİNİZ ” yazıyor 🙂

  47. tarkan dedi ki:

    aklıma şu geldi anahtarın y düzlemi buyunca görünmez objeler yerleştisem..
    ve karakter bu objelere çarptığında bir değişken değerini bir arttırsa ve anahtardan uzaklaştığında (500pik) aynı değişkenin değerini bir artırsak son olarak ta ilgili değişkenin değeri 2 ise yazıyı yazdırsak… bu biraz uzun bir işlem ama.. kod bilmemenin cezası bana 🙂
    umarım daha basit bir yolunu söylersin..

  48. tarkan dedi ki:

    if(distance_to_object(instance_nearest(x,y,key)))&&(key.x < player_1.x)
    veya
    if (distance_to_object(key) &&(key.x < player_1.x))

    böyle birşey türettim ama olmadı 🙂

    • yasirkula dedi ki:

      O kodu yazarsanız (2.sini, çünkü ilki hatalı) karakter anahtarın solunda olduğu sürece o ifadenin içerisine yazdığınız şeyler gerçekleşir. Çünkü if’in içindeki ilk sınamada (distance_to_object) o değerin 500’den büyük olup olmadığına bakmamışsınız :S .

      Karakterin neden anahtarın solunda olup olmadığını test ettiğinizi anlayamadım ama ben şöyle bir sistem kurmanızı tavsiye ederim:

      Karakterin Step’indeki, benim başta verdiğim “distance_to_object”i Test variable ile test ettiğimiz aksiyonu silin. Onun yerine şu GML kodunu yazın:

      if(distance_to_object(instance_nearest(x,y,key))>500)
      {
      if(instance_number(qwer)==0)
      {
      instance_create(0,0,qwer);
      }
      }
      else
      {
      with(qwer) instance_destroy();
      }

      Ardından qwer adında bir obje oluşturup bu obje vasıtasıyla Draw Text aksiyonuyla “karakter.x” ve “karakter.y-25” koordinatlarına ANAHTAR yazdırabilir ya da daha iyisi oyuncunun bunu anlamasını sağlayacak bir sprite çizdirebilirsiniz. Artık karakter en yakın anahtara 500 birimden yakın olursa bu “qwer” objesi otomatik olarak yok ediliyor.

      Size sitemdeki GML ile ilgili tüm derslere bakmanızı tavsiye ediyorum, böylece kod yazmanın mantığını daha iyi kavrayabilirsiniz. Başarılar! 🙂

      • tarkan dedi ki:

        anahtar obj sini geçince ”anahtarı almadınız” yazmasını istiyordum.(500 pik geçince)
        ama anahtar obj. sine yaklaşınca da (500 pik kala) bunu yazıyor..yani anahtarı henüz geçmeden ”anahtarı almadınız” uyarısı çıkıyordu..buda garip oluyor..

        zaten bunları iptal ettim.. şimdi sürekli en yakın anahtarı gösteren bir ok işareti var playerle birlikte hareket eden…

        ama bu yazdığını başka bir şey için kullanacağım..

        teşekkürler..

      • yasirkula dedi ki:

        Hareket eden anahtar fikri bence de daha güzel, iyi düşünmüşsünüz.

        ________________________________

  49. tarkan dedi ki:

    selam usta…

    yon = point_direction(x,y,mouse_x,mouse_y);
    image_single=yon/10;

    yukarıdaki eğitim kitabından oldığım orjinal kodu

    yon = point_direction(x,y,key_x,key_y);
    image_single=yon/10;

    olarak değiştirdim

    ve birde bununla denedim

    image_angle=point_direction(x,y,key_x,key_y);

    ama ikiside hata verdi

    bunlarla şunu yapmak istedim.. bir ok objesini playerle birlikte hareket ettirerek, ok objesinin en yakın key objesine bakmasını sağlamaya çalıştım. ama olmadı neden hata veriyor anlamadım..
    mouse lu olan kod çalışıyor…

  50. tarkan dedi ki:

    ERROR in
    action number 1
    of Step Event
    for object dontsee:

    Error in code at line 4:
    image_angle=point_direction(x,y,key_x,key_y);
    ^
    at position 34: Unknown variable key_x

    aldığım hata bu…

  51. tarkan dedi ki:

    tamam usta..

    image_angle=point_direction(x,y,key.x,key.y); böyle yapınca düzeldi…

    • yasirkula dedi ki:

      Sorunu bulmanıza sevindim. mouse_x ve mouse_y mousenin koordinatlarını belirten özel değişkenler olduğundan sırf onlarda “.” yerine “_” var.

      Bu arada kılavuzda gerçekten image_single mi yazıyor?

  52. tarkan dedi ki:

    usta 🙂 🙂

    playere bagıl hareket etmesini sağlayınca ok dönmüyor bu kez.. 😦

  53. tarkan dedi ki:

    x = player_1.x;
    y = player_1.y;

    usta san soruyorum ardından çözüyorum kusu bakma ..

    ok objesini step eventine bunu yazım olay düzeldi..
    teşekkür ederim yinede 🙂

  54. tarkan dedi ki:

    selam usta..

    step event ine execute code da kod yazarken alarm0 nasıl çalıştırabiliriz..
    yani örneğin koda bir değişkenin değerinin 1 olduğunda alarm0 çalışsın…

    teşekkürler..

  55. tarkan dedi ki:

    yasir hocam…
    şu asansör ve platform la uğraşıyorum ama bir sonuç elde edemedim
    x+=other.x-other.xprevious;
    daha önce bunu yap demiştin.. playerin , platform objesiyle çarpışmasına koydum ama pek işe yaramadı..

    eğer vakit bulursan.. asansör ve yatay platformla ilgili nasıl yapılacağı konusunda bilgi verir misin..

    teşekkürler

    • yasirkula dedi ki:

      Bu platform şeysini uğraşmıştım ama ben de beceremedim doğru düzgün. O verdiğim kodu boşverin o işe yaramıyor pek. Şu an için nasıl yapılınabileceği ile ilgili bir fikrim yok.

  56. tarkan dedi ki:

    🙂

    valla tüm odaları yeniden yapacam o zaman.. 😦

    çünki platform yaparız diye öyle dizayn ettim (+asansör)

    eyvah eyvah bitirmek üzereydim…

    • yasirkula dedi ki:

      Öyle yapmayın bence. Herşeyin uygun bir çözümü vardır. Benim tavsiyem gamemakertr ve oyun-programlama forumlarında sorununuzdan bahsetmeniz. Eminim orada işinize yarayabilecek birşey bulabilirsiniz.

  57. tarkan dedi ki:

    çok aradım yok..
    😦

    • yasirkula dedi ki:

      Kendiniz konu açıp sorununuzu belirtin, asansörler vb. platform oyunlarının olmazsa olmazlarıdır vazgeçmeyin sakın. Ben yaklaşık 1 hafta boyunca hiç bilgisayara erişme imkanım olmadığından yardımcı olamıyorum.

  58. tarkan dedi ki:

    usta selam…
    game makerin ”score caption” diye bir şeyi var..
    bundan iki tane kullanmak istiyorum
    1 cisinde skor,live, health olacak sdandart olarak ikincisinde key,time olacak..
    bunu daha önce bir objeyle draw etmiştik hatırlarsan..

    ama şimdi derinliği olan bir kaç oda yaptım.. yani player aşağıya iniyor haliyle bu draw yukarıda kalıyor.. daha önce yaptığımda sabit duran bir objenin y sini ve playerin x kullanmıştım
    böylece hep aynı yüksekliklte ve playerle birlikte hareket ediyordu ..

    şimdi aşağıya inince yazı yukarıda kalıyor ve görünmüyor artık..bir kaç şey denedim ama istediğim gibi olmadı…

    denediklerimden biride
    ” eğer outside room olursan playerin 32 pik yanın gel gibi.. bir çok şey denedim ama olmadı..

    yardımlarını bekliyorum..
    teşekkürler

    • yasirkula dedi ki:

      Tam anlamadım ama sanırım siz view kullanıyorsunuz ve bundan dolayı yazılar yukarıda kalıyor. Bunu düzeltmek için y değeri olarak ‘view_yview[0]’ kullanmayı deneyin.

  59. tarkan dedi ki:

    usta teşekkür ederim tamamdır..

  60. tarkan dedi ki:

    kaldı asansör..
    birkaç şey buldum nette ama olmadı..

  61. tarkan dedi ki:

    (aslında bu yorum az önce yazdım ama görünmüyor bu yüzden tekrar yazıyorum)

    tamadır usta bende biraz odaları bitirmeye uğraşırım.. 🙂

    bir şey daha var

    bir objem var ‘pipe_2’ adında

    if (distance_to_object(player_1)<64)
    {

    instance_create(x,y,pipe_2_change)
    }

    buradan da anlaşılacağı üzere player_1 bu objeye yaklaşınca (64 pik) 'pipe_2_change' adında bir obje oluşturuyor. pipe_2_change bu obj. belirli zaman aralıklarıyla aynı anda 4 obje daha oluşturuyor ve yok ediyor 4 tane olan bu objelerden biri duman efekti kullanıyor diğer 3 ise o-görünmez ve playerle çarpınca healt gidiyor..

    room da pipe_2 oldukça çok var..
    sorun şu ki.. pipe_2_change oluştuğunda diğer tüm pipe_2 de yukarıda bahsettim 4 objeyi oluşturuyor.. ben sadece en yakı pipe_2 de bunlar olsun istiyorum..

    aslında olay şu..

    bir boru var ve bu boru ya player yakalşınca duman çıkarıyor ve dumanın içinde görünmez objeler oluşuyor player bu objelere çarpınca heath gidiyor.. ama aynı anda tüm objeler active olunca oyun ağırlaşıyor..

    yardımlarını bekliyorum..
    teşekkürler

    • yasirkula dedi ki:

      Anlattıklarınızı okudum ancak bana göre oyunun yavaşlamasının sebebi tüm pipe2′lerin aktif olması değil.

      Verdiğiniz koda göre karakter bir pipe objesine 60 pixelden fazla yaklaşırsa her stepte bir pipe2_change oluşuyor. Bu da bir saniyede 30 bir dakikada 1800 obje demek ki bu durumda oyunun ağırlaşması çok normal.

      Bunu önlemek için pipe2 objesinin Create eventinde ‘zxc’ adında değeri 1 olan bir değişken oluşturun. Borunun 60 pixelden yakın olmasını test eden if ifadesinde bir de bu değişkenin 1 olup olmadığını test edin. Eğer öyleyse değerini 0 yapıp pipe2_change objesini oluşturun. pipe2 ‘nin karakterden 60 pixelden daha uzak olduğu durumda ise bu değişkeni 1 yapın.

      Umarım sorununuzu çözer.

  62. tarkan dedi ki:

    yasir hocam selamlar..

    2 soru.. yine örneklerle soracam

    1.) player bir objeyle çarpışıyor çarpışınca playerin spritesinin değişmesi gerekiyor..bu değişme fakat sadece yukarıdan o objeye çarpınca (üzerine düşünce) sprite değişiyor.. aynı düzlemde çarpışınca sprite değişmiyor..

    2.) yukarıdaki örneğe bağlı olarak değişen sprite animasyonlu fakat animasyon olmuyor sadece tek bir frame oluyor(örneğin 5 frameli bir animasyon)

    bunların sebebi ne olabilir.. cevaplarsan sevinirim…

    • yasirkula dedi ki:

      İlk sorunuzun sebebini bilemiyorum 😦

      2) Bu bence player, objeyle temas ettiği sürece spritesinin her stepte animasyonlu spriteye tekrar tekrar ayarlanmasından dolayıdır. Bunu çözmek için aklıma gelen en makul yol objenin spritesini değil de kendisini değiştirmektir.

      • tarkan dedi ki:

        player objeyle çarpışınca obje yok oluyor zaten..tekrar tekra teması söz konusu değil bence..ama sen daha iyi bilirsin.. ayrıca playeri değiştirirsem sanırım ona bağlı birsürü şey var hata verecektir..

      • yasirkula dedi ki:

        Evet o zaman tekrar tekrar temas olmaz.
        Eğer ki objenin spritesini Draw eventinde elle çizdirmiyorsanız ki sanmıyorum 2 şey yapın:

        1) Spritenin animasyonlu olup olmadığını tekrar kontrol edin.
        2) Spriteyi değiştirdikten sonra Set Variable aksiyonu ile image_speed değişkeninin değerini 1 yapıp tekrar deneyin. Etki edeceğini sanmıyorum ama belki işe yarar.

  63. tarkan dedi ki:

    ilave
    çarpışan iki objede haraketli

  64. tarkan dedi ki:

    kısa bişey daha
    creat event ına koydum alam0 sürekli kuruluyor..
    başlangıçta birkere kurması gerekmiyormu

    • yasirkula dedi ki:

      Evet alarm0’ın içinde başka bir alarm0 aksiyonu kullanmadıysanız ya da başka bir obje bu objenin alarm0’ını çalıştırmıyorsa alarmın kendini tekrar etmemesi lâzım.

      • tarkan dedi ki:

        tamam hocam bu şeymiş 🙂
        zxc (dünkü mevzu) yapmamışım sürekli objeyi oluşturduğu için alam sürekli kuruluyormuş 🙂

  65. tarkan dedi ki:

    usta bilgisayarını açabiliyormusun..
    1 hafta yok demiştin..
    Set Variable aksiyonunda image_speed değişkeninin değerini 1 yaptım olmadı 😦

    • yasirkula dedi ki:

      En erken haftaya açabilirim. O halde 2 sorum var:

      1) Karakterin Draw eventi var mı?
      2) Eğer yoksa buraya spritenin değiştirildiği Collision eventindeki aksiyonları basitçe yazın. Belki sorunu görebilirim.

  66. tarkan dedi ki:

    şimdi usta..

    player_1 objemiz (karakter) …. snake adında bir objeyle çarpışınca:

    (snake , player_1 e 300pk olunca ona doğru gidiyor ayrıca snake beklerken ayrı bir sprite, player_1 doğru giderken ayrı bir sprite kullanıyor hatta ve hatta player_ in x onun snake nin x nden büyük olursa ayrı bir sprite kullanıyor (geri geri gitmesin diye yönü ona dönüyor 🙂 )

    player_1 in snake ile collisionu nda şunlar var:

    set variable dontwalkdontwalk to +1 (dontwalkdontwalk adında bir değişken var , değeri 0)
    if dontwalkdontwalk is larger than 0
    blok başı
    set alam0 to 90
    create instance of object enerji_az
    destroy the instance ( snake için)
    set the healt relative to -10
    blok sonu

    player_1 step eventinde ise;

    if dontwalkdontwalk is large than 0
    blok başı
    change sprite into player_5 (player_5 adında bir sprite var)
    blok sonu

    dontwalkdontwalk bu değişkenin sebebi ise left ve right tuşlar ancak 0 olduğunda karakteri haraket ettiriyor.. alarm0 ise 90 (3 saniye) sonra dontwalkdontwalk 0 eşitliyor.. haliyle senaryo şu
    snake (yılan) çarpışınca karakteri zehirliyor ve 3 saniye felç oluyor ki bu arada etrafta düşman varsa hareketsiz kaldığı için ona zarar verebiliyor… 🙂

    player_5 spritesi : yılanın karakteri sardığı ve sıktığı (boa yılanı gibi) 5 framden oluşuyor…

    • tarkan dedi ki:

      şimdi yazaken aklıma geldi
      player_1 step eventinde olduğu içinmi player_5 spritesi haraket etmiyor acaba?

    • yasirkula dedi ki:

      Tamam bence sorun sizin de bahsettiğiniz gibi sprite değiştirme aksiyonunun Step’te sürekli çalışması. Bunu çözmek için ise bence çok basit bir işlem yapmak yeterli: Karakterin Step’indeki o sprite değiştirme aksiyonundan hemen sonra dontwalkdontwalk değişkeninin değerini -1 yapın. Böylece ne karakter hareket edebilir ne de sprite sürekli sürekli değişip durur.

      Umarım bu sorunu çözer. Bu arada, fikirleriniz gerçekten çok orijinal. Çok hoşuma gitti yılan fikri. Bir soru: Spriteleri siz mi çiziyorsunuz?

  67. tarkan dedi ki:

    TEŞEKKÜR EDERİM 🙂 🙂 🙂

    % 70 BEN ÇİZİYORUM
    % 25 VAR OLAN SPRİTELER ÜZERİNDE DEĞİŞİKLİKLER YAPIYORUM
    % 5 GM VEYA NETTE BULDUĞUM SPRİTELERİ KULLANIYORUM
    BU % 70 LUK DİLİMİ OYUN SONUDA %100 YAPACAM AMA ŞİMDİLİK İŞLER HIZLANSIN DİYE HAZIRLARI KULLANIYORUM AZ DA OLSA 🙂

  68. tarkan dedi ki:

    MESAL BİR SPRİTERİM VAR (player_6)
    GÖRDÜĞÜNDE ÇOK GÜLECEKSİN 🙂
    BEN ÇİZERKEN ÇOK EĞLENDİM..
    GM İKİ SPRİTESİNİ KULLANARAK YAPTIM.. BİRİ ŞAPKALI BİR ADAM (Kİ BENİM PLAYER_1 İM)
    DİĞERİ İSKELET..
    HATIRLARSAN DUMAN ÇIKARAN BİR OBJEM VARDI (pipe) GÖRÜNMEZ OBJE OLUŞTURUYORDU FALAN…
    İŞTE KARAKTER BU OBJE ÇARPINCA SPRİTE DEĞİŞİYOR (player_6) OLUYOR..

    player_6 SPRİTESİ KARAKTER PARÇA PARCA YOK OLUYOR VE ALTINDAN İSKELET ÇIKIYOR
    BU ARADA player_6 ANİMASYONLU….

  69. tarkan dedi ki:

    yok usta yine olmadı..
    daha öncede buna benzer bir şey olmuştu…

    (bir düşman obje player 500pk kalınca playere doğru yönelip, ve 200pk yaklaşınca oraya bomba koyup gidiyordu.. ve bomba 5den geriye sayıp patlıyordu.. bir türlü animasyonla yapamadım bunu sonuda her frame bir alarm a koydum ve sırayla alarmları birbirlerini tetiklettirdim böylece birbirilerini takip eden alarmlar animasyon etkisi yapmıştı…)

    belki daha kolayı varken ben bunu yaptım ama çözüm bulamamıştım şimdi yine öyle yapmayı düşünüyorum.. eğer başka önerin yoksa… 🙂

    • yasirkula dedi ki:

      Artık tek aklıma gelen son şey karakterin image_speed değişkeninin değerini 0.1 gibi düşük bir değere ayarlayıp tekrar denemeniz.

      Spritenin boyutu bildiğim kadarıyla farklı farklı olmaz. Ancak siz animasyonun düzgün gözüküp gözükmediğini kontrol etmek için Edit Sprite penceresindeki Preview kısmına bakın.

  70. tarkan dedi ki:

    usta spritelerin boyutları farklı
    bundan olabilirmi…

  71. tarkan dedi ki:

    player_1 sprite 32*32 (orjin x 16 y 0)
    player_5 sprite 64*64 (yılan sarılmış diye biraz daha büyük)
    ( buda zemine otursun diye orjini x 16 y 32)

    Preview burada herşey düzgün görünüyor….

    • yasirkula dedi ki:

      Anladım o tür boyut farkı önemli değil ancak sorunun kaynağını bulamadım ne yazık ki. Daha önce başıma hiç böyle birşey gelmemişti.

      Ama son bir şey, acaba karakterin spritesini değiştiren başka eventler de var mı? Eğer varsa sorun büyük ihtimalle onların da aynı anda çalışmasındadır.

      Ek bir soru: Karakterin normal yürüme spritesi animasyonlu mu ve öyleyse düzgün gözüküyor mu o?

      Bir soru daha: Oyunu Debug modda çalıştırın ve sol üstteki pencereye player1.dontwalkdontwalk değişkenini ekleyin. Böylece oyun sırasında değişkenin değerini test edebiliriz. Karakter yılanla temas edince değişkenin değeri değişiyor mu kontrol edip buraya yazarsanız sevinirim.

  72. tarkan dedi ki:

    karakter animasyonlu değil yürümesi .. (ama oyun bittiğinde animasyonlu yapacam)

    player1.dontwalkdontwalk bunuda test ettim draw event ı ile..
    1 ve 0 oluyor düzgün çalışıyor..

    karakterin yürüme ve zıplama aksiyonunu yazacam bir bak istersen…

    step eventinde:

    if a position is collision free…………….(x 0 y 1 solid obj only…………relavity tikli)
    set the gravity………………………………(direction 270 gravity 0.5)
    else
    set the gravity………………………………(direction 270 gravity 0)

    keybord left
    if a position is collision free…………….(x -4 y 0 solid obj only………..relavity tikli )
    jump the position…………………………..(x -4 y 0 …………………………..relavity tikli )

    keybord rigth
    if a position is collision free…………….(x 4 y 0 solid obj only………..relavity tikli )
    jump the position…………………………..(x 4 y 0 …………………………..relavity tikli )

    keybord space
    if there is a is collision at a position…………(x 0 y 1 solid obj only………..relavity tikli )
    set the vertical speed… ………………………..(vert speed -9……………………….relavity tikli )

  73. tarkan dedi ki:

    aslında yasir hocam…

    bir örümcek var ağ atıyor.. bu ağla player çarpışıncada sprite değişiyor
    tek framlik bir sprite player ağlara sarılmış gibi..
    gerçekleşince..buda 2 saniye hareketsiz kılıyor playeri playerin rengide değişiyor..
    ama daha öncede söylemiştim player ağa ancak üsten düşünce sprite değişiyor direk çarpınca değişmiyor sadece bekliyor.. bu arada..yatay düzlemde çarpışıca renk değişiyo fakat sprite değişmiyor..

    aynı soruna benziyor sanki…..

  74. tarkan dedi ki:

    yine bu renk değişimini yılanada yaptım..
    çarpışma nereden olursa olsun üstten sağdan soldan ren değişiyor.. ama sprite değişmiyor

    • yasirkula dedi ki:

      Karaktere animasyonlu bir yürüme spritesi verince acaba animasyonu oynar mı ki?

      Sorununuz konusundaysa hiçbir önerebileceğim fikir kalmadı, üzgünüm 😦

  75. tarkan dedi ki:

    SAĞLIK OLSUN 🙂

  76. tarkan dedi ki:

    senden ricam pc açtığında yukarıdaki hareket karakter aksiyonunu yapıp bir denemen…
    sprite değişimi yapman sende olcakmı
    belki çözümü bulabilirsin

  77. tarkan dedi ki:

    selam usta…

    oyuna bir başlangıç odası yaptım.. içinde butonlar var.. ”BAŞLA”,”SKOR”.”OYUNDAN ÇIK” gibi
    bu odada player yok haliyle ….. ”BAŞLA” tıklayınca goto nex room yaptım diğer odaya geçince player -1 lives ile başlıyor… bunun sebebi ve çözümü konusunda yardımına ihtiyacım var.. çözüm olarak ben playeri bu odaya koydum ve gizledim…
    ikinci olarak.. ”BAŞLA” butonunun üzerine mouse işaretcisi gelince ”BAŞLA” objesinin rengini nasıl değiştirebilirim
    teşekkürler

    • yasirkula dedi ki:

      Can hususu için, Start butonunun Create eventinde Set Lives ile canı 3 yapmayı deneyin. Ana menüye karakteri gizli şekilde eklemenizi hiç tavsiye etmem, abuk subuk hatalar alabilirsiniz.

      Butonların Mouse Enter eventiyle mouse üzerine gelince spritelerini değiştirebilirsiniz. Mouse leave eventinde ise eski spritelerini geri ayarlayabilirsiniz.

  78. tarkan dedi ki:

    birde usta 🙂 🙂 🙂

    oyunu kayıt ettikten sonra ilk odaya ”KAYIT YÜKLE ” diye bir buton koymak istiyorum .. kayıt ettiğim yerden oyunu nasıl başlatırız…

    birde küçük bir eğitim vermek için … hangi tuş kullanmalıdır falan… ne yapmamı önerirsin

    • yasirkula dedi ki:

      Oyunu kayıt etmek ve kayıtlı oyunu yüklemek için main2 sekmesindeki aşağıdaki Save Game ve Load Game aksiyonlarını kullanabilirsiniz. Ancak oyunu Save ederken menünün veya başka bir room’un değil de oyunun oynandığı roomun kendisinin açık olduğundan emin olun.

      Tanıtım olayı içinse Camtasia Studio ile kısa bir video çekebilirsiniz ya da tüm tuşları ve ne işlere yaradıklarını gösteren bir resim dosyası oluşturup onu sprite olarak gösterebilirsiniz. Bunu en kolay bu yollarla yaparsınız gibime geliyor.

      • tarkan dedi ki:

        usta bu yükleme olayını başaramadım..

        bir buton yaptım LOAD diye left button (mouse) orayada load game koydum
        ama olmadı

      • yasirkula dedi ki:

        Öncesinde oyunu bi Save ettiniz mi? Eğer ettiyseniz oyunu bir de ‘.exe’ olarak oluşturup yeniden deneyin.

  79. tarkan dedi ki:

    bişey daha 🙂

    kayıtlı skoru nasıl temizleyebilirm

  80. tarkan dedi ki:

    teşekkürler usta..

    bişey daha sorsam ayıp olur mu acaba ? 🙂

    bir kod yazıyorum playerin hızına göre bişeyler yapacak..herşey tamam yaptım.. fakat benim player sağa ve sola giderken hızı değişmiyor sadece jump to position oluyor (+-4) (yukarıda daha önce anlatmıştım)..

    benim aklıma da playerin x in değişimine bakması geldi..

    aslında soru şu: x in değişip değişmediğini kodla nasıl kontrol ederim…

    • yasirkula dedi ki:

      Soru hoşuma gitti. Bunun için Game Maker’da her objenin x ve xprevious değişkenleri, y ve yprevious değişkenleri bulunur. Burada “obje.x-obje.xprevious” komutuyla objenin bir stepteki x değişimini bulabilirsiniz.

  81. tarkan dedi ki:

    selam usta

    bir objenin y si tam olarak neresidir?.. komik bir soru gibi ama.. 🙂
    şöyle açıklayayım….
    .

    sprite boyutu 64*64 olan objenin stepinde bir kod yazdım ;
    sprite boyutu 32*32 olan objenin y si 64*64 den farklıysa dur demişim
    32*32 objem ile 64*64 objem aynı hizada zemin üzerinde duruyorlar. 64*64 hareket etmiyor..

    yani objenin tam merkezi mi ilgili objenin y koordinatını verir.. yoksa alt kenarı veya üst kenarı mı?..

    ek bir soru daha sprite orjininin y koordinatında etkisi var mıdır?…

    teşekkürler..

    • yasirkula dedi ki:

      y koordinatı Spritenin Origin’i ile ve objenin dikey doğrultudaki konumu ile ilgilidir. Diyelim Origin’de y değeri 0 ise ve obje de levelin en üstünde duruyorsa objenin y değeri 0’dır. Ancak obje en tepedeyken Origin’i diyelim ki 10 ise objenin y değeri 10’dur. Veya objenin Origin’i 25, levelin tepesinden, spritesinin en üst kısmının uzaklığı da 30 birim ise objenin y değeri 55’tir.

      Umarım anlatabilmişimdir 🙂

      ________________________________

  82. tarkan dedi ki:

    yorum yazamıyorum sorun var

  83. tarkan dedi ki:

    usta

    bir obje çarpma yönünü yazabilirmiyiz..

    örneğin alttan çarpınca şunu yap…
    üsten çarpınca şunu yap
    sağdan çarpınca …… gibi
    kodla yazılır sanırım ama kuramadım kafamda…..

    2 . olarak y koordinatını hesaplarken sprite boyutumu yoksa sprite içerisindeki çizimin en üst değerinimi almak lazım.. yani çizilmemiş alanı hesaplayacakmıyız…

    • yasirkula dedi ki:

      Öncelikle 2. sorunuzu cevaplayayım. Spritenin boşluğu önemlidir y koordinatında. Size tam olarak y’nin nasıl hesaplandığını söyleyeyim:

      Spritenin en tepesinin (Spritenin tepesinde bir miktar boşluk varsa o boşluğu da sayıyoruz, ihmal etmiyoruz.) room’un en tepesine uzaklığıyla Origin’in y değerini toplarsanız objenin tam olarak y koordinatını bulursunuz.

      1. soru için ise spritelerin boyutları ve Origin değerleri önemli. Şuna benzer bir kod yazmanız lâzım Karakterin Collision Eventine:

      if(x>other.x) { //Eğer çarpan obje ötekinin sağındaysa yapılacaklar } else { //Solundaysa }

      if(y>other.y) { //Altındaysa } else { //Üstündeyse }

      Bunun gibi kodlar, ancak Origin noktalarına, sprite boyutlarına göre burada koşullara çeşitli sayılar da eklenmeli. Ancak bu istediğiniz şey bence gerçekten çok sıkıntılı, hiç bulaşmayın derim. Düzgün bir kod türetmeniz çok zor, bu yüzden bu konuda pek yardım edemem 😦

  84. tarkan dedi ki:

    usta

    sonunda kendi kendime deneme yanılma yoluyla asansör ve yatay platform yaptım 🙂
    tabiki senin bana tavsiye ve verdiğin bilgiler sayesinde.. özellikle geçen yazdığın previous değişkeni sayesinde….
    amatörce ama ilk asansör için başarılı buldum..

    açıklamasınıda yapayım
    öncelikle playerin x orjini 16 olduğu için tam orta durması için +16 kullandım
    ve platform diye bir değişken var değeri 0

    player moving_platform_horizontal objesiyle çarpışınca platform değişkeni +1 oluyor
    ve playerin step eventinde :

    platform 0 dan büyükse:

    x=moving_platform_horizontal.x+16
    if (x=moving_platform_horizontal.x+16) and (y < moving_platform_horizontal.y)
    {speed=0}
    if (moving_platform_horizontal.x != moving_platform_horizontal.xprevious)
    {x=moving_platform_horizontal.x+16}

    böylece player platformla birlikte gidip gelebiliyor.. iki hatası var

    1. hata : player hangi asansöre veya platforma binerse binsin ilk asansöre ışınlanıyor… order falan yaptım ama olmadı 🙂
    2. hata : platform değişkeni sadece zıplama tuşunda (space) 0'a eşitliyorum haliyle sağa ve sola gidemiyor platform üzerinde.. sebebi ise player sağa sola giderse platformdan ayrılsa bile halen çıkıp inmeye devam ediyor… 🙂

    öneri ve eleştirilerini bekliyorum….

  85. yasirkula dedi ki:

    1. hata ile ilgili çözüm önerim şu: Player’in Create eventinde “platformm” adında bir değişken oluşturup değerini “noone” yapın. Ardından player bir platformla temas edince “platformm=other.id” yapın. Böylece temasa geçtiğimiz platformu temsil eden ID’yi depolamış olacağız. Ardından “moving_platform_horizontal” kullandığınız tüm yerlerde “platformm” kullanın; “x=platformm.x+16” gibi..

    2. soruyla ilgili birkaç birşey düşündüm ama şu an inanın aklıma düzgün bir çözüm gelmedi. Bu platform sorununu siz de çözmeye çalışın ben de çözmeye çalışayım o halde 🙂

  86. tarkan dedi ki:

    teşekkürler usta deneyip bilgi vereceğim..
    aslında ikinci hata için başlangıçta şöyle birşey düşünmüştüm
    eğer player, moving_platform_horizontal dan 32 pik ayrılınca platform değişkenini 0 eşitliyordu..
    aslında olmuştuda.. ama çok ağırlaşmıştı oyun sebebini anlayamadım.. çeşitli varyasyonlarınıda denedim ama olmadı..
    o yüzden vaz geçtim…

    aslında belkide yanlış kodla yaptım bilemiyorum…
    bu yazdıklarım size bir şey çağrıştırır belkide 🙂 hani aklınıza başka bir kodla yapmak gelirse.. yazın lütfen..

    teşekkürler…

    • yasirkula dedi ki:

      Yazdığınız kod şunun gibi birşey olmalı:

      if(distance_to_object(instance_nearest(x,y,moving_platform_horizontal))>32) platform=0;

      Bu kodun pek kasmaması lazım diye düşünüyorum.

  87. tarkan dedi ki:

    tamadır usta denedim
    player ışınlanmıyor artık. 1 hatayı sayende çözdük
    teşekkürler

  88. tarkan dedi ki:

    usta bir sorum var.. herzamanki gibi 🙂

    böyle bir code varmı bilmiyorum ama varsa süper olur..

    bir objeye tek tek collision yapmak yerine..
    collision_all_solid_object jump_to_start_position gibi yada

    if collision_object(wall_1,wall_2,wall_3,wall_4)
    { jump_to_start_position}

    çokmu hayalperestim acaba..

    🙂

    • tarkan dedi ki:

      bir soru daha…

      bir obje var değişiyor bir takım olaylar olunca..
      ama her roomda farklı bir şekil (objeye dönüşmesi lazım)

      yani room_1 deyken wall_1 dönüş
      room_5 deyken wall_2 dönüş gibi bir şey yaptıra bilirmiyiz

      • yasirkula dedi ki:

        Room Start eventinde Test Variable ile room değişkeninin room_1’e eşit olup olmadığına bakın. Eğer öyleyse main1 sekmesindeki Change Instance aksiyonuyla objeyi wall_1’e değiştirin ve bu sınama olayını tüm odalar için yapın.

    • yasirkula dedi ki:

      Direkt öyle bir kod yok ama birkaç ince ayarla istediğiniz sonucu elde edebiliriz.

      “parentt” adında yeni bir obje oluşturun ve içine ne bir aksiyon ekleyin ne de bir sprite atayın kendisine. Ardından hangi objelerin ortak olarak Collision’unu test etmek istiyorsanız (wall_1, wall_2 vb.) her bir objeyi tek tek açıp soldaki ‘Parent’ yazan yerden onlara Parent obje olarak “parentt” objesini atayın.

      Artık herhangi bir Collision eventinde “parentt” objesiyle Collision’a baktığınızda aslında “parentt” objesini Parent kabul eden tüm objelerle teması kısa yoldan test etmiş olursunuz.

  89. tarkan dedi ki:

    selam usta

    if ((player_1.x = player_1.xprevious) and (player_1.y = player_1.yprevious) and (speed=0) )
    {stand_up=1}

    if (stand_up=1)

    {wait_time+=1}

    if (wait_time>150)
    {stand_up=0
    wait_time=0
    instance_create (player_1.x+128,player_1.y-128,tornado)}

    if ((player_1.x != player_1.xprevious) or (player_1.y != player_1.yprevious) or (speed!=0))
    { stand_up=0 wait_time=0

    instance_deactivate_object(tornado) }

    böyle bir kod yazdım: player hareketsiz kalınca tornado diye bir obje oluşuyor ve playere doğru gidiyor.. tornado playerle çarpışınca player jump to start position oluyor…

    neden yaptığıma gelirsek: oyun hatalarından dolayı player bir yerlere sıkışınca.. veya oyuncu uzun süre oynamazsa bu tornado gelip playere çarpıyor ve playerin bir canı azalarak start pozisyonuna geçiyor..

    istediğim bir şey var eğer player 1 kez start pozisyonuna gelmişse bu tornado bir daha oluşmasın ta ki oyuncu bir kaç pikselde olsa oynamış olana kadar

    iki tane değişkenim var 1-stand_up (başlangıç değeri 0) hareketsizliği test ediyor ,
    2-wait_time(başlangıç değeri 0) bu da 5 saniye sayıyor..
    üçüncü bir değişkenle yapmaya çalıştım ama beceremedim..

    eğer aklına şu gelirse playerin start posizyonunun koordinatları haricinde ki durumlarda bu kod devreye girsin diye.. yapamayız çünkü her odada farklı bir pozisyonda başlıyor player..

    aslında sorum şu.: jump_to_start_ position olursa bu kod çalışmasın diye bişeyler yazabilirmiyiz..

    teşekürler şimdiden

    • yasirkula dedi ki:

      Aklıma şöyle bir çözüm geliyor. Playerin Room Start eventinde ‘baslangic_x=x’ ve ‘baslangic_y=y’ kodlarıyla her roomda otomatik olarak playerin başlangıç koordinatlarını alabilirsiniz ve bunlarla sınama yapabilirsiniz.

      Belki buna da gerek yoktur, bunu depolayan hazır bir.değişken vardır ancak benim aklıma gelemedi şimdi 🙂

  90. tarkan dedi ki:

    tamamdır usta dediğin gibi yaptım oldu
    teşekkürler..
    bence hazır değişken olsa bile bu yol çok daha basit.. 🙂

  91. tarkan dedi ki:

    selam usta..

    bir soru 🙂

    oyun ilk roomda başladığında level 1 ve her odayı geçtiğinde 2.3.4. diye levelin artmasını istiyorum
    bunuda en tepede göstermek istiyorum..

    aslında draw.. ve değişken kullanarak yaptım ama ikinci odaya geçtiğimde tüm değişkenler sıfırlandığı için level artmıyor… nasıl yapmam gerektiği konusunda yardımına ihtiyacım var..
    teşekkürler

    • yasirkula dedi ki:

      Odaların Settings’inde Creation Code diye birşey var. Onu kullanarak bölümün başında ‘global.level’ değişkeninin değerini her Room’un başında kolayca değiştirebilirsiniz.

  92. tarkan dedi ki:

    yani
    her odanın Creation Code girip sırayla
    1. oda için global.level =1
    2. oda için global.level =2
    3. oda için global.level =3

    diye mi yapmam gerekiyor..
    kusura bakma usta pek anlayamadım

  93. tarkan dedi ki:

    hata verdi usta..

    acaba önce player creat ına değişkenimi oluşturmak lazım

  94. tarkan dedi ki:

    tamadır usta hallettim.
    level adında bir objem varmış ona hata veriyormuş….
    🙂 🙂 🙂

    bir kaç şey daha ekleme istiyorum
    1. düşmanları öldürdüğünde de tecrübesi yükselsin ve tecrübe belirli bir seviye geldiğinde level arttsın ayrıca skor topladığında tecrübe yine artsın
    2.bir zaman değişkenim var odayı bitirdiğinde kalan süre (örneğin 1saniye=1 score)olarak skora eklensin..
    3.odalarda toplanan skorların oda sonunda (örneğin 5000 skor yapmışsa bu na karşılık bir katsayı ile çarpıp eklemek istiyorum.. 5000*0,1=….. 10000*0,2=…. 15000*0,3= gibi)
    4-100000 olunca skor 1 can alsın..

    kafanı şişirdim yine 🙂

    teşekkürler..

    • yasirkula dedi ki:

      1) Bence yeni bir Persistent özellikli obje oluşturun bunun için ve objenin Create eventinde ‘global.tecrube=0’ yapın. Daha sonra düşman öldürünce ya da istediğiniz başka bir olayda direkt ‘global.tecrube’nin değerini artırabilirsiniz.

      2) Odayı bitirince ‘skor+=zaman/30’ gibi birşey yazabilirsiniz.

      3) Soruyu tam anlayamadım ama mesela 7000 skor alınca ne olacak?

      4) Karakterin Create eventinde ‘skor_artirma=0’ diye bir değişken tanımlayın ve Step eventinde skorun 100000’den yüksek, bu değişkenin de 0’a eşit olup olmadığına bakın. Eğer öyleyse bu değişkeni 1 yapıp canı 1 artırın.

      Estağfurullah 🙂

  95. tarkan dedi ki:

    şöyle ki
    1 room da 4790 skor yaptı diyelim bunu 0,1 ile çarpıcağız (5000 ve altı bu katsayıyla çarpılacak)
    buda 479 yapar yani 2. odaya başlarken 4790+479= 5269 skor la başlayacak .. 2. odada diyelimki
    10849 skor yaptı buda 10849-4790=5580 bu da 2. odada yaptığı toplam skor eder haliyle bu skor 5000 nin üstünde olduğu için 0,2 ile çarpılacak 5580*0,2=1116 yeni skor
    10849+1116=11965…

    yani genel toplamdan değil , her odada yaptığı skora göre ekstra ilave skor verilecek..

    teşekkürler

    bu persistent özellikli objeyi her odaya koyacağım değilmi? ayrıca görünmez yapacağım

    • yasirkula dedi ki:

      Son sorudan başlayayım. Persistent obje odalar arası geçişlerde yok olmayan objedir ve bu yüzden sadece ilk odaya koymanız lazım. Visible konusundaysa birşey farketmez.

      Şimdiye kadar skoru hep ‘score’ değişkenini kullanarak ayarladığınızı düşünüyor ve ona göre cevap yazıyorum.

      Skor olayı için Persistent objeyi kullanabiliriz. Objenin Room Start eventinde ‘skorr=score’ yapın ve ardından ‘score=0’ yapın. Her bölümün sonunda ‘score’nin değerini bahsettiğiniz gibi 5000’den büyükse gibi ona göre sınayarak score’nin üzerine gerekli eklemeyi yapın ve ardından ‘score+=skorr’ yapıp bölümü sonlandırın. Herhangi bir anda ‘skorr+score’ ile o ana kadarki toplam skoru görebilir ve değerini ekrana yazdırabilirsiniz.

  96. tarkan dedi ki:

    düzeltme

    tabi oda sonuda verdiğimiz bonuslarıda düşeceğiz 2. odanın skorunu belirlemek için

  97. tarkan dedi ki:

    usta..

    yap dediğin şekilde yaptım ama her oda değiştiğinde bir önceki odanın toplamını alıp kat sayıyla çarpıyor.. yani 2 odaya geçtiğimizde toplam score yi alıp kat sayı ile çarpıyor buda istemediğimiz bir sonuç..
    bende böyle yaptım
    2 değişkenle yaptım birde score değişkeni var buda toplamda 3 değişkenle ancak istediğim sonucu aldım..
    room_score ( odanın toplam score sini katsayıyla çarpan değişken)
    room_bonus ( buda o ana kadarki room_score ile score yi toplamını tutuyor)

    böylece room score sadece o odadaki skoru kat sayıyla çarpıyor..
    yazdığım kod aşagıda…

    room_score=score-room_bonus

    if room_score 5000 and room_score 7500 and room_score 10000 and room_score 15000
    {room_score*=0.5
    score+=room_score
    room_bonus = score}

    denedim hata yok gibi ama…
    bide sen bak istersen

    teşekkürler

  98. tarkan dedi ki:

    yazdığım kodu yolluyamıyorum
    yukarıdaki gibi saçma bişeyler oluyor
    🙂

  99. tarkan dedi ki:

    bu sayfanın boyutumu büyüdü acaba?

  100. tarkan dedi ki:

    selam usta..,

    hatırlarsan player platformla çarpışmasına platform_1=other.id yapmıştık böylece odadaki tüm platformlar bağımsız hareket etmişti.. yani player sürekli ilk platforma ışınlanmamıştı artık…

    bunu aynısı bir düşman objeyede yapmak istiyorum ama nasıl yapılacağını çözemedim…

    sebebi
    bir düşman obje var player 400pk yakın olursa ona doğru gidiyor.. bu objeden aynı rooma 2 veya daha fazla koyarsam şaçma sapan hareket ediyorlar.
    ikisi birlikte hareket ediyor.. veya digerinden uzaklaşsam bile yakın olan hareket etmiyor.. bunun gibi garip olaylar…

    çözüm önerin nedir
    yazarmısın lütfen

    • yasirkula dedi ki:

      Yazdıklarınıza göre düşmanların tek alakalarının Player olmasından dolayı niçin birbirlerinden etkilendiklerini ben de anlamadım. İlgili kodları buraya yazarsanız belki sorunu görebilirim.

  101. tarkan dedi ki:

    usta bir soru daha

    game maker in score ,lives ve health diye kendi değişkenleri var.. biliyorsun 🙂

    bunları ben kendim draw ile yazdırbilirmiyim?
    yani en tepede değilde odanın içerisinde..

  102. tarkan dedi ki:

    şimdi denedimde
    yazdırbiliyormuşuz 🙂 🙂 🙂

  103. tarkan dedi ki:

    bir soru daha..
    bir değişkeni oyun içerisinde nasıl yok edebiliriz.
    yada deactive edebiliriz..

    örneğin bir değişkenimiz var.. oyundaki objeleri sayıyor..
    player bu objelere çarptığında ilgili obje yokoluyor..
    son objede yok olunca bu değişken artık bu görevi sonlandırsın saymasın
    (not : obje odada olmayınca hata veriyor)

  104. tarkan dedi ki:

    selam usta..

    step avoiding
    step towards
    aling to grid

    bunlar ne işe yarıyor çözemedim? ve kullanmak için ne yapmak gerekir.. (x,y,speed buraları neye göre ayarlıyoruz)

    aslında bir obje duvara çarıptığında duvarın üstüne zıplayıp yürümeye devam etsin gibi bir şey yapmaya çalışıyorum .. sanırım bunları kullanmam gerekiyor ama …. 🙂

    yapamadım…

    yardım lütfen…

    🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂

    • yasirkula dedi ki:

      Step Towards: Belirlenen x ve y koordinatlarına objenin belirlenen Speed’de gitmesini sağlar. Sizin sorununuz için bu pek işe yaramaz.

      Step Avoiding: Belirlenen x ve y koordinatlarına belirlenen speed ile gidilmesini sağlar. Bunun üsttekinden farkı isteğe bağlı olarak yol üstündeki sadece Solid objelerle ya da tüm objelerle temas edince onları yalayarak geçer. Görüntü olarak bazen çirkin görünse de genel anlamda işini yapar ve sizin probleminiz için kullanabileceğiniz en uygun çözüm bu.

      Align to Grid: Bu çok farklı bir şey. Objeyi bir ızgaraya oturtmaya yarar. Bu ızgara olayını da PacMan oyunundaki gibi, karakterin görünmez ızgaraların içerisinde hareket etmesi olarak örnek verebilirim.

      ________________________________

  105. tarkan dedi ki:

    selam usta
    if a position is collision free (bir pozisyonda çarpışma serbest ise)

    yanına türkçesinide yazdığım bu olay.. sprite değişimine izin vermiyor..
    benim playerin step eventinde:

    if a position is collision free…………….(x 0 y 1 solid obj only…………relavity tikli)
    set the gravity………………………………(direction 270 gravity 0.5)
    else
    set the gravity………………………………(direction 270 gravity 0)

    if a position is collision free stepten silerse eğer sprite değişimi oluşuyor..
    bendemi hata var anlayamadım..

    if a position is collision free …..bu tam olarak ne yapıyor…

    • yasirkula dedi ki:

      Collision Free aksiyonu ile objenin Origin y noktasından 1 pixel aşağıda herhangi bir Solid objeyle temas var mı diye bakmışsınız. Bu verdiğiniz kodlarda sadece yerçekimi değiştirildiği için sprite değişimini etkilememesi lazım.

  106. tarkan dedi ki:

    tabi eğer player gidip çarparsa sprite değişiyor..

  107. tarkan dedi ki:

    verdiğin bilgi için teşekkür ederim

    Step Avoiding: bu aksiyonu step eventinemi yoksa collision eventinemi koymam gerekiyor..

    şöyleki düşman obje bir yerde duruyor player 400 pk kalınca ona doğru gidiyor. ve eğer player solid objelerin üstüne çıkarsa veya atlatıp devam ederse düşman objede onu takip etsin..

    teşekkürler

  108. tarkan dedi ki:

    usta
    olmadı beceremedim.. biraz daha detaylı yazarmısın yapacaklarımı?
    kalıyor solid bir obje çıkıca.. üstüne çıkamıyor..

    • yasirkula dedi ki:

      O sistem biraz öyle işte, bazen sapıtabiliyor ama daha iyi bir seçenek de yok. İstediğiniz şeyi kodlamak çok zor. Siz hedef x ve y’si olarak karakterin x ve y değerlerini yazdınız değil mi?

      Şunu yapmayı deneyin: Karakter Solid objeyle temas edince ‘x=xprevious’ ve ‘y=yprevious’ yapın.

  109. tarkan dedi ki:

    selam usta…

    global.level her arttığında örneğin 2000 score vermek istiyorum.. ve ekranda
    LEVELUP +1
    +2000
    yazdırmak istiyorum
    ama yine beceremedim 🙂

    yardım lütfen..

    ayrıca şu duvarların üstüne çıkma olayını.. yazdığınla yapamadım.. 😦

    çarpışma eventine bu kodu yazdım ve oldu 🙂

    if(x>other.x)
    {
    x=x-16
    y=y-55
    }
    else
    {
    x=x+16
    y=y-55
    }

    böylece objeye hangi yönden çarparsa çarpsın (sağdan yada soldan)
    çarptığı objenin üstüne çıkıyor.. çarptığı obje tabi 32×32 spriteli…

    • yasirkula dedi ki:

      1) Draw eventine olan bir objenin Draw eventinin içine şunu yazın:

      if(global.level>qwers) { //Buraya ilgili Draw aksiyonunu yazın. }

      qwers=global.level;

      Create eventine “qwers=1” yapın.

      2) Yaptığınız çözüm de güzel ama düşman aniden kutunun üstüne zıplayacağından görünüm kötü olabilir. Onun yerine ‘x=xprevious’ ve ‘y-=4’ gibi bir kod yazarsanız daha yumuşak bir çıkış yapabilir.

  110. tarkan dedi ki:

    selam..

    room daki tiles sekmesini tıkladığımızda en altta current tile layer diye bir şey var bu ne işe yarar usta..

    aradığım şey aslında room ne kadar büyük olursa olsun hepsini aynı anda görmek bunu yapmanın yolu varmı ? not: oyun esnasında değil odayı hazırlarken obje falan yerleştirirken….

    • yasirkula dedi ki:

      Tile Depth’in mantığı objelerin Depth’iyle aynı. Depth değeri büyük olan ‘şey’ küçük olanın arkasına çiziliyor. Normal Depth değeri orada 1000000 olduğundan Tile’ler normalde herşeyin arkasında olurlar ancak dilerseniz kendi Depth değerinizi verdiğiniz Tile’ler oluşturabilir, onların objelerin önünde gözükmesini sağlayabilirsiniz.

      Tüm odayı görmek Game Maker 8.1’de mümkün sanırım çünkü onda odada zoom yapmak gibi bir özellik vardı ancak 8.0’da öyle bir özellik yok. Odanın ne kadarını göreceğiniz tamamen monitörünüzün büyüklüğüne bağlı 🙂

      ________________________________

  111. tarkan dedi ki:

    SELAM USTA
    NASILSIN ?
    PC’NE KAVUŞABİLDİN Mİ?
    OYUN TAM BİTMEDİ AMA SANA YOLLUYACAGIM.. VAKTİN OLURSA İNCELERSİN..
    ELEŞTİRİ VE ÖNERİLERİNİ SÖYLERSİN.. SONRADA BEN TÜM SPRITELERİ KENDİM YAPTIMMI
    OYUN TAMAMDIR…

  112. tarkan dedi ki:

    OYUNU BURAYA NASIL YÜKLEYEBİLİRİM?
    BURAYA EXE OLARAK YÜKLEYECEM
    AMA SANA SOURCE KODLARINI SANA MAİL OLARAK GÖNDERMEK İSTİYORUM..

    • yasirkula dedi ki:

      Buraya dosya yüklenmiyor ama benim tavsiyem Box.com’dan ücretsiz hesap alıp içine upload edin .exe’yi. Sonra dosyanın yanından Share butonuna tıklayıp linki buraya yapıştırın. Böylece oyununuz bulut teknolojisiyle hiç silinmeden sonsuza dek internette kalır.

  113. tarkan dedi ki:

    ben sadece sana yollamak istiyorum..
    tam bitmeden kimse oynamasın
    sadece incelemen için..

    mail adresine yollayayım mı?

  114. tarkan dedi ki:

    mail adresini sitede bulamdım desem 🙂 🙂 🙂 🙂 🙂 🙂

  115. mustafa dedi ki:

    slm çok güzel bir site tebrik ederim bir sorunum var yardımcı olursanız sevinirim ben mousun sol tuşu basılı bir şekilde bir objeyi mouse ile hareket ettirmek istiyorum

    • yasirkula dedi ki:

      Aklıma gelen yöntemi paylaşayım. Mouse Left Pressed eventine şunu yazın:

      deltax = mouse_x-x;
      deltay = mouse_y-y;

      Sonra da Mouse Left Button eventine şunu yazın:

      x = mouse_x – deltax;
      y = mouse_y – deltay;

      Denemedim ama olur heralde.

  116. mustafa dedi ki:

    ERROR in
    action number 1
    of Mouse Event for Left Button
    for object object0:

    Error in code at line 1:
    x=mouse_x-deltax;

    at position 11: Unknown variable deltax
    🙂

  117. larberder dedi ki:

    2 kişilik oyun nasıl yapılır ?

  118. larberder dedi ki:

    aslında ben herşeyi yaptım ama ccan barı kaldı

  119. larberder dedi ki:

    2 tane yerine 1 tane oluyo

    • yasirkula dedi ki:

      Her bir objenin canını değişken olarak tanımlamalısın önce. Bunun için objelerin Create Event’lerinde “can=100;” yaz (Bu değeri 100 yaparsan sen de iyi olur.) ve can götüren, getiren işlemlerde bu değişkenin değerini artır, azalt.

      Ardından can barı çizmek için yeni bir obje oluştur ve Draw Eventinin içine şu kodu yaz:

      draw_healthbar(player1.x,player1.y-50,player1.x+50,player1.y-30,player1.can,black,red,green,0,1,1);

      draw_healthbar(player2.x,player2.y-50,player2.x+50,player2.y-30,player2.can,black,red,green,0,1,1);

      • larberder dedi ki:

        ben hepsini yapmıştım zaten (tanıtmayı) 1 oyunculukken olmuştu ama 2 oyunculuyken olmadı 🙂 ama yinede teşekkür ederim şu hatayı verdi ne yapayım player1 ve player2 yi kendime göre değiştirdim yazdığım koduda gösteriyim uzun olduysa afadersin
        yazdığım kod:

        draw_healthbar(karakter.x,karakter.y-50,karakter.x+50,karakter.y-30,karakter.can,black,red,green,0,1,1);

        draw_healthbar(karakter2.x,karakter2.y-50,karakter2.x+50,karakter2.y-30,karakter2.can,black,red,green,0,1,1);

        hata:
        ___________________________________________
        FATAL ERROR in
        action number 1
        of Draw Event
        for object canbarı:

        COMPILATION ERROR in code action
        Error in code at line 1:
        draw_healthbar(karakter.x,karakter.y-50,karakter.x+50,karakter.y-30,karakter.can,black,red,green,0,1,1);

        at position 78: Variable name expected.

      • yasirkula dedi ki:

        “canbarı” objesinin olduğu odada her an “karakter” objesi de bulunmakta değil mi? Mesela hatayı 5-6 kere Ignore edince yine de devam ediyor mu yoksa oyuna başlıyor mu bu sefer?

  120. larberder dedi ki:

    canbarı olduğu odada karakterde var. diğer sorun ise ıgnore seçeneği yok sadece abort seçeneği var.

  121. larberder dedi ki:

    zaten açılırken çıkıyor

    • yasirkula dedi ki:

      Aklıma pek çözüm gelmedi. 2 şeyi kontrol etmeyi deneyin:

      1- Karakter objesinde sağlıkla ilgili olayları “can” değişkeni ile yaptığınızdan, yani “health” değişkenini kullanmadığınızdan emin olun.
      2- Karakterin Create eventinde “can” değişkenine 100 değeri atadığınzdan emin olun.

  122. larberder dedi ki:

    şey ben yukarıdaki olayı çözdüm ama karakterin mermi dokununca ölmesini yapamıyorum yardım edebilir misiniz

    • yasirkula dedi ki:

      Kurşunla karakterin Collision eventinde karakter için Destroy aksiyonunu kullanabilirsiniz en basit anlamda. Tabi kurşunu da hemen ardından Destroy etmeniz iyi olur. Bundan sonra eğer karaktere kurşun çarparsa karakter ve kurşun anında yok olurlar. Daha karmaşık bir sistem planlıyorsanız tabi ya da hata alıyorsanız bunu geliştirebiliriz.

  123. larberder dedi ki:

    hayır no more health dan yapınca görmüyor

    • yasirkula dedi ki:

      Karakterin kurşunla Collision’unda karakterin canını Set Health aksiyonuyla “Relative” işaretli olarak -10 kadar azaltırsanız ve ardından kurşunu yok ederseniz, No More Health eventinde Destroy aksiyonuyla karakteri yok etmenizin gerçekleşmesi lazım. Karakterin Create eventinde Set Health ile canını 100 yapmayı da unutmayın. Olmuyorsa ilginç gerçekten 🙂 No More Health eventinin çalışması için Game Maker’ın kendinde tanımlı olan “health” değişkenini kullanmanız lazım (Bu değişkene Set Health ile erişebilirsiniz az önce dediğim şekilde), eğer kendiniz can için ayrı bir değişken oluşturduysanız o zaman No More Health çalışmaz.

      • larberder dedi ki:

        hayır ben health yerine can kullandım 2 kişilik olduğu için, yani no more health dan olmuyomu başka şekilde biliyorsanız söylermisiniz

      • yasirkula dedi ki:

        Step eventinde Test Variable ile “can” değişkeninin 1’den “smaller than” (Küçük) olup olmadığına bakın. Ardından Destroy aksiyonu kullanın. Eğer birden çok aksiyon kullanacaksanız can bittiğinde Test Variable aksiyonundan sonra “control” sekmesinden “Start block” ve “End block” aksiyonları koyun ve can bittiğinde yapılacakları bu 2 bloğun arasına yerleştirin.

  124. larberder dedi ki:

    test variable yi ben ayarlamadım nasıl ayarlamadım nasıl ayarlayacağımı söylermisiniz

    • yasirkula dedi ki:

      Test Variable de tıpkı Destroy, Create Instance gibi sıradan bir aksiyon. Step eventinde “control” sekmesinde alt ortadan bu Test Variable aksiyonunu bir yere sürükleyin. “variable” olarak tırnaksız olarak “can” yazın (2 karakter olduğu için “can” değişkeni kullanıyorum demenizden yola çıkarak bunları yazıyorum.). “value” olarak 1, “operation” olarak “smaller than” yazın. Böylece “can” değişkeninin 1’den küçük olup olmadığına bakmış olacaksınız. Ardından “control” sekmesinden ortadaki “Other” grubunun ilk aksiyonu olan “Start Block” aksiyonunu Test Variable’nin hemen altına, “Start Block”un altına ise bir “End Block” aksiyonu atın. Bu 2 blok arasına koyacağınız aksiyonlar sadece karakterin canı 1’den küçükse gerçekleşecektir. Muhtemelen araya bir Destroy koymanız makul olacaktır 🙂

  125. larberder dedi ki:

    her şey oldu bir tek şey kaldı mermi can azaltırken relative seçeneği kaldı onu nasıl koda yazarız

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s