IRRLICHT - Resim ve Buton Eklemek

IRRLICHT - Resim ve Buton Eklemek

Bu dersimizde nasıl resim, buton eklenir bunları göreceksiniz. Çalışmanın bitmiş hali aşağıdaki resimdeki gibi olacak. Bu çalışma online oyunlardaki client olayına bezemektedir. Tam bir Client olması için projenin içinde MySQL veya Network kütüpahanesi kullanmanız gerekli. 


C/C++ kodu:
//Irrlicht başlık dosyalarını ve dosya giriş/çkış kütüphanelerini ekliyoruz. 
#include <irrlicht.h>
#include <iostream>
#include <fstream>

/*Using namespace ifadesi yazamamızın nedeni, herdefasında “::” Kapsam çözünürlük 
  Operatörü kullanmamızı ortadan kaldırır, böylece zaman kazanmış oluruz ve karmaşıklık 
  yaratmış olmaz. 
*/
using namespace irr;
using namespace std;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
using namespace std;

//Değişkenlerimizi atıyoruz. 
IrrlichtDevice *device = 0;
s32 cnt = 0;
IGUIListBox* boxx;
IGUIWindow* window = 0;
s32 selected(0);
bool opengl = 0;
int sayi = 0;

class MyEventReceiver : public IEventReceiver
{
public:
    virtual bool OnEvent(const SEvent& event)
    {
        if (event.EventType == EET_GUI_EVENT)
        {
            s32 id = event.GUIEvent.Caller->getID();
            IGUIEnvironment* guienv = device->getGUIEnvironment();

            switch (event.GUIEvent.EventType)
            {
            case EGET_BUTTON_CLICKED:

                //Quit butonuna tıklandığında projemiz kapanıyor. 
                if (id == 101)
                {
                    device->closeDevice();
                    return true;
                }

                //Ayarlar menüsüne görüntü ve ses ayarları ekliyoruz. Projemizin OpenGL veya Directx ile çalışacaktır. 
                if (id == 102)
                {
                    window = guienv->addWindow(rect<s32>(150 + cnt, 140 + cnt, 500 + cnt, 330 + cnt),
                        false,
                        L”OPTIONS”);

                    ifstream giris(”ayar.cei”);
                    giris >> selected;
                    giris.close();

                    boxx = guienv->addListBox(rect<int>(10, 25, 220, 80), window, 1);
                    boxx->addItem(L”Direct3D”);
                    boxx->addItem(L”OpenGL”);
                    boxx->setSelected(selected);

                    guienv->addCheckBox(opengl, core::rect<int>(10, 90, 147, 110),
                        window, 4, L”Background Music”);

                    guienv->addCheckBox(opengl, core::rect<int>(10, 120, 110, 140),
                        window, 5, L”Sound Effect”);
                    guienv->addButton(rect<s32>(10, 160, 100, 180), window, 120, L”Save”);

                    guienv->addCheckBox(opengl, core::rect<int>(10, 120, 110, 140),
                        window, 5, L”Sound Effect”);
                    guienv->addButton(rect<s32>(110, 160, 200, 180), window, 121, L”OK”);

                    sayi = 1;
                }
                if (id == 120)
                {
                    //Görüntü ayarlarını bir ayar.cei adlı dosya içine yazdırıyoruz. 
                    selected = boxx->getSelected();
                    ofstream cikis(”ayar.cei”);
                    cikis << selected;
                    cikis.close();
                }
                /*102 ve 121 nolu butonları görüntü ayarları için. 121 nolu görüntü ayarındaki 
                  Ok tuşuna basılması ile pencerenin kapatılmasını sağlıyor. 103 nolu butonumuza 
                  Oyuna Basla butonu. Oyunumuz başlamamaktadır. Niye derseniz çünkü 103 nolu butonun 
                  içi boş. Bu butona oyuna baslama ile ilgili gerekli yerleri doldurabilirsiniz. 
                */
                if (id != 102)
                {
                    sayi = 0;
                }

                if (id == 121)
                {
                    window->remove();
                }
                if (id == 103)
                {

                }

                break;
            default:
                break;
            }
        }

        return false;
    }
};

int main()
{
    //Client penceremiz OPENGL olarak çalışmaktadır. 650x480 boyutları arasındadır. 
    device = createDevice(EDT_OPENGL, dimension2d<s32>(650, 480), 16, false, false, false, 0);
    //Buton tıklama nesnemizi ekliyoruz. 
    MyEventReceiver receiver;
    device->setEventReceiver(&receiver);
    //Pencere ismini belirliyoruz.
    device->setWindowCaption(L"Ceida Software & Client");

    //Bunlar Device sınıfının nesneleridir. VideoDirver, SceneManager, Gui bu nesnelere birer pointer tanımlıyoruz. 
    IVideoDriver* driver = device->getVideoDriver();
    ISceneManager* smgr = device->getSceneManager();
    IGUIEnvironment* guienv = device->getGUIEnvironment();

    //ekrana 0 0 noktasından başlatarak bir resim çizdiyoruz.Bu resim bizim Clientimiz Backgraound resmidir.
    IGUIImage* img = guienv->addImage(driver->getTexture(”oyunart.BMP”), position2d<int>(0, 0));

    //Yazılarımıza Bir Font ekliyoruz. Font Yapma programı irrlicht klasörün içinde bulabilirsiniz. Dilediğiniz şekilde Font ayarlıyabilirsiniz. 
    IGUISkin* skin = guienv->getSkin();
    IGUIFont* font = guienv->getFont(”fonthaettenschweiler.bmp”);
    if (font)
        skin->setFont(font);

    //Client penceremize 3 buton ekliyoruz. Bunlar: OYUNA BASLA, AYARLAR, QUIT 
    guienv->addButton(rect<s32>(250, 150, 450, 160 + 32), 0, 103, L”OYUNA BASLA”);
    guienv->addButton(rect<s32>(250, 200, 450, 210 + 32), 0, 102, L”AYARLAR”);
    guienv->addButton(rect<s32>(250, 250, 450, 260 + 32), 0, 101, L”QUIT”);

    //Tüm yaptıklarımızı görebilmemiz için (0, 30, -40) pozisyona bir camera yerleştiriyoruz.Irrlichte bir kaçtane camera şekli vardır bunları yeri geldiğinde göstereceğiz. 
    smgr->addCameraSceneNode(0, vector3df(0, 30, -40), vector3df(0, 5, 0));

    //Burada Device nesnesi çalıştığı sürece işlemi döngü içine alıyoruz. 
    while (device->run())
    {
        /*
          Ekran görüntü rengimizi (Arka plan rangi) Beyaz olarak yaptık. true, true, 
          Baştaki 2 parametre backbuffer deptbufferın silinip silnmeyeceğini değerini alır.
          Bunu başka renklerde’ de yapabilirsiniz. Bu kodları asağı kısımda vereceğim. endScene(); 
          fonksyionu tüm oluşturulan nesneleri ekrana çizdirir. 
        */
        driver->beginScene(true, true, SColor(255, 255, 255, 255));

        smgr->drawAll();
        guienv->drawAll();

        driver->endScene();
    }

    //Bütün oluşturduğumuz nesneler yok edilmeli bunu drop(); fonksiyonu ile yapıyoruz.
    device->drop();

    return 0;
}
Samed Ceylan

Yorumlar

Bu blogdaki popüler yayınlar

SDL Nedir?

Doxygen Kullanımı

OpenGL'de Line (çizgi) Çizdirme