Giter Site home page Giter Site logo

burkeng's Introduction

burkeng

Burkeng oyun motoru

Temel Başlangıç: Öncelikle SFML kütüphanesinden bir sf::RenderWindow oluşturmalısınız. Bu sizin ana pencereniz olacak. Şuradaki gibi tanımlanabilir: sf::RenderWindow window(sf::VideoMode(WIDTH, HEIGHT), "Pencere Başlığı");

Ardından Burkeng kütüphanesinden setWindow(); fonksiyonunu kullanarak hızlıca oyun için programı hazırlayabilirsiniz. Şuradaki gibi kullanılabilir: setWindow(window,60);

Ardından oyunumuzun ana döngüsünü oluşturmamız gerekecek. SFML'de nasıl kullanıyorsak o şekilde kullanalım.

while(window.isOpen()){ sf::Event event; while(window.pollEvent(event)){ //Event olayları } //Çizim ve döngü için gereken şeyler }

Ardından texture yükleyip o texture ile obje oluşturup bir fizik objesine atayalım. Bunu şu şekilde yapabiliriz: Texturee değişkeni tanımlayıp bunu setTexturee() fonksiyonu ile dosyadan atarız, sonra atanmış texture ile bir gameObject oluştururuz ve bir kamera verisi oluşturup ona atarız, sonra oluşturduğumuz gameObject'i bir physicsObject'e atarız.

Bunu döngüden önce yapmalıyız:

TEXTURE YÜKLEME İŞLEMİ: Texturee karakterTexture; setTexturee(&karakterTexture, 820,1181,"KarakterTexture'ı","res/imgs/character_test.jpg");

setTexturee fonksiyonu burada 820x1181 çözünürlükte character_test.jpg adlı dosya üzerinde çalışmıştır. Ve texture yüklendimi yüklenmedimi belirtmek için komut satırına: KarakterTexture yüklenme durumu (yüklenme durumu bool türünden)

GAMEOBJECT OLUŞTURMA İŞLEMİ:

gameObject karakterObjesi(karakterTexture,WIDTH/2,HEIGHT/2,1,1,false,&window,&camera);

karakterTexture'ımızı karakterObjesi texture'ına atadık ve pozisyonunu WIDTH/2,HEIGHT/2 'a ayarladık. scale verilerini 1,1 girdik ve math kısmına false girdik. Yani texture x tarafından *1 büyütülecek ve y tarafından *1 büyütülecek. Eğer math kısmına true girseydik objemiz 1 pixele 1 pixel olacaktı.

Ardından pencere objemizin adresini &window yazarak belirledik ve sonra camera objemizin adresini oraya yazdık (&camera)

Kamera objesinin tanımı oldukça basittir: valueXY camera = {0,0}; valueXY bir bakıma oyun motorlarında sıkça karşılaşılan Vector2 değişken tipidir. camera'nın pozisyonunu 0,0 olarak belirledik.

PHYSICSOBJECT OLUŞTURMA: physicsObject karakter(&karakterObjesi, false, 0.0, "OYUNCAK");

karakterObjesi'ni physicsObject'in gameObject bölümüne atadık. Fizik olaylarının gerçekleşip gerçekleşmeyeceğini false olarak belirttik(yerçekimi vb şeyler gerçekleşmeyecek) Yerçekimini 0.0 ayarladık (gerek yok zaten) Komut satırına oluşturulduğu zaman OYUNCAK oluşturuldu gibi bir mesaj yazılacak.

Obje oluşturma kodlarımız bitti şimdi onu ekrana çizdirelim. Öncelikle şundan bahsetmemiz gerekir: Düzen için tavsiye edilen while döngüsü pozisyonları

while(){ //EVENT OLAYLARI //KONTROL OLAYLARI //ÇARPIŞMA OLAYLARI //FIZIK OLAYLARI //ÇİZİM OLAYLARI }

Objemizi çizdirmek için tek yapmamız gereken şey ÇİZİM OLAYLARI kısmına karakter.draw(); yazmak.

NOT: SFML'de pencerenin olmazsa olmaz komutu display()'dur. Unutmayalım

İşte objemiz çarpışmayı kontrol etmeye, yönetmeye hazır!

Objemiz çokmu büyük geldi yada çokmu küçük geldi? Objemizin dikey ve yatay uzunluğunu gameObject oluşturma fonksiyonunda belirtebiliriz. 1,1,false, kısmını hatırlamamız gerek bu kısımda. Burada 0.'lı değerler verirsek küçülür 1'den büyük değerler verirsek büyür fakat biz belli bir büyüklüğe ulaşmasını istiyoruz. O zaman buraya false olan kısma true yazmak gerekiyor. 800,600,true yazarsak objemiz 800 600 büyüklüğünde olacaktır. Ben burada 200,200 kullanacağım. gameObject karakterObjesi(karakterTexture,WIDTH/2,HEIGHT/2,200,200,true,&window,&camera);

NOT: gameObject'de physics object gibi draw() fonksiyonuyla çizilebilir physicsObject olmasının tek farkı kontrollü bir şekilde haraket sistemidir.

PHYSICSOBJECT'LERDE HARAKET: physicsObject'imizi güvenli bir şekilde haraket ettirmek istiyorsak addX veya addY fonksiyonunu kullanacağız. Bu fonksiyonların işlevi: parametreleri genellemek gerekirse: düzlemde eklenecek olan pozisyon, kaç birimde bir kontrol edileceği, çarpışma tagı İlk parametre kaç birim sağa sola yukarı veya aşağı gideceğimizi belirler. İkince parametre kaç birimde bir kontrol edileceğini belirtir. Üçüncüsü ise hangi çarpışma tagında ilerlemenin duracağını belirtir.

Eğer objemize kontrol edilecek bir trigger değişkeni eklemek istiyorsak physicsObject'in şu fonksiyonunu kullanmalıyız: addControl(urTrigger, id); urTrigger, trigger değişkeninin adresidir. Eğer bir physicsObject'teki triggerı almak istiyorsak şu fonksiyonu kullanmalıyız: getTrigger(); Ve eklenecek objenin trigger'ının en son durumda kullanılmasını istediğimiz için şu fonksiyonu 2. nesne üstüne kullanmalıyız: setColliding() yani eğer bir objeyi bir objenin kontrol edilecekleri arasına ekleyeceksek şunu yapmalıyız: Bir objemiz karakter diğeride duvar olsun. duvar.setColliding(); karakter.addControl(duvar.getTrigger(),"duvar");

Artık karakter.addX(10,0.1,"duvar") yazdığımızda duvar objemize çarpana kadar 10 birim gitme hedefini tamamlamaya devam edecek.

PHYSICSOBJECT'LERDE FORCE: karkater adında bir physicsObject'imiz olsun. karkater.forceClear() fonksiyonu force.x ve force.y'yi 0 yapacaktır. Yani bunu force başlatıcı olarak düşünebiliriz. karkater.addForce(x,y) fonksiyonu force'a x ve y olarak verileri ekler. Mesela zıpladığımızda y'ye -5 eklendi. Yerçekimi 3tü ve yerçekiminden dolayı zıplamadan bir süre sonra aşağı doğru düştük. Bunun kodda yeri şu şekildir:

while döngüsü pozisyonlarında kontrol kısmında olacak kısım:

//zıplama if(ziplama){ karkater.addForce(0,-5.0) }

while döngüsü pozisyonlarında fizik kısmında olacak kısım:

karkater.phyMove(0.1,""); //0.1 birimde kontrol edilecek ve herhangi bir objeye çarptığında duracak (karkatere eklenmiş olan objeler) YADA karkater.phyMove(0.1,"duvar"); //0.1 birimde kontrol edilecek ve duvar idli objeye çarptığında duracak (karkatere eklenmiş olan objeler)

BUTON OLUŞTURMA: Button değişkeni buton ile ilgili herşeyi içerir. Oluşturum fonksiyonu Button(ButonTexturu,"KomutSatirindaOlusturulurkenYazilacakSey",posX,posY,width,heigth,&window)

Button'lar .draw() fonksiyonu ile ekrana çizilir.

Butonların tıklanıp tıklanmadığını kontrol etmek için event için kullanılan while'ın içine şu fonksiyon yazılmalıdır: button.control(event); Şu şekil kullanılır: while(window.pollEvent(event)){ button.control(event); }

KONTROL bölümünde tıklanıp tıklanmadığını kontrol etmek istiyorsak: if(button.getClick()) kullanılmalıdır.

Panellerin ne işe yaradığı ve nasıl kullanıldığı eklenecek.

burkeng's People

Contributors

ammarozkan avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.