IRRLICHT - Kullanıcı Arayüzü
IRRLICHT - Kullanıcı Arayüzü
C/C++ kodu:
Bu dersimizde irrlicht kullanıcı arayüzlerini göreceğiz. Buton, Pencere,
Kaydırma Çubuğu ve Liste Kutuları kullanımını öğreceğiz. Bu uygulamayı irrlicht\bin\Win32-VisualStudio\05.UserInterface.exe
dosyası üzerinden çalıştırabilirsiniz. Aynı zamanda kaynak koduna
irrlicht\examples\05.UserInterface klasöründen ulaşabilirsiniz.
Uygulamamızın örnek resmi şu şekilde:
Uygulamamızın örnek resmi şu şekilde:
#include <irrlicht.h> #include <iostream> using namespace irr; using namespace core; using namespace scene; using namespace video; using namespace io; using namespace gui; /* Başlık dosyalarımızı include ediyoruz.Sonraa kütphane dosyamızı link ediyoruz.Daha önceden bunu tanıttı iseniz kullanmanıza gerek yoktur. "IrrlichtDevice *device = 0;" Bu kod ile Device nesnemize bir değiken atıyoruz.Daha sonra cnt adında bir sayaç değişkeni ve listbox için bir değişken ekliyoruz. */ #ifdef _IRR_WINDOWS_ #pragma comment(lib, "Irrlicht.lib") #endif IrrlichtDevice *device = 0; s32 cnt = 0; IGUIListBox* listbox = 0; /* Bir sınıf oluşturuyoruz. Kullanıcı arayüzlerinin tüm sağladığı ( Buton tıklama ve listeden bir elman seçme…) birimleri işleyebilir. Bu sınıfta tıklanan butonların id numarasını alıyor ve ne yapmaları gerektiği konusunda işlev yapıyor. Irrlicht motorunda s32,u32,f32 vb. değişken tipleri ile karşılaşabilirsiniz. s32 ’signed integer’ anlamında 32 bitlik bir int’dir. f32′yi 32 bitlik bir float. */ class MyEventReceiver : public IEventReceiver { public: virtual bool OnEvent(const SEvent& event) { if (event.EventType == EET_GUI_EVENT) { s32 id = event.GUIEvent.Caller->getID(); IGUIEnvironment* env = device->getGUIEnvironment(); switch (event.GUIEvent.EventType) { /*Burada kaydırma çubuğunun id numarasını alıp (104) , pozisyona göre tüm arayüz elemanlarının görünüş deriniğini değiştiriyor. Tüm renk ayarlarının bulunduğun bir "skin" vardır. Bun nesnedeki tüm renklerin "alpha" değerini değiştiriyor. */ case EGET_SCROLL_BAR_CHANGED: if (id == 104) { s32 pos = ((IGUIScrollBar*)event.GUIEvent.Caller)->getPos(); for (u32 i = 0; i < EGDC_COUNT; ++i) { SColor col = env->getSkin()->getColor((EGUI_DEFAULT_COLOR)i); col.setAlpha(pos); env->getSkin()->setColor((EGUI_DEFAULT_COLOR)i, col); } } break; /* 3 butonumuz var. Bunlardan biri tıklandığında ona göre işlev yapılmatadır. Tıklanan buton id numarasına göre işlev yaptırmak mümkündür. id == 101 nolu buton irrlicht oyun motorunu kaptıyor. Yani tüm pecereyi kapatıyor. id == 102 nolu buton tıklandığında içinde yazı bulunan pencere açıyor. id == 103 nolu buton tıklandığında ise dosya açma arayüzü oluşturuyor ve liste kutusuna eylemi belirten yazı ekliyor. */ case EGET_BUTTON_CLICKED: if (id == 101) { device->closeDevice(); return true; } if (id == 102) { listbox->addItem(L”Window created”); cnt += 30; if (cnt > 200) cnt = 0; IGUIWindow* window = env->addWindow( rect<s32>(100 + cnt, 100 + cnt, 300 + cnt, 200 + cnt), false, // modal? L”Test window”); env->addStaticText(L”Please close me”, rect<s32>(35, 35, 140, 50), true, // border? false, // wordwrap? window); return true; } if (id == 103) { listbox->addItem(L”File open”); env->addFileOpenDialog(L”Please choose a file.”); return true; } break; default: break; } } return false; } }; /* Yukarıdaki kodda ise bir Device oluşturuluyor. Kullanıcıya bu sürücülerden hangisini kullanması gerektiği bir souruyor. Bunlar EDT_DIRECT3D9, EDT_DIRECT3D8, EDT_OPENGL, EDT_SOFTWARE ve EDT_SOFTWARE2. Yani bu sürücüler sırasıyla Directx9, Directx8, OpenGL ve Software’ dir. burada neden Directx10 yok derseniz; şuan Kasım ayı 2008 tarihinde en sonra Irrlicht 1.4.2 sürümüne göre dersimizi anlattık. Bu sürüm Directx 10 desteklememektedir ve ileride mutlaka çıkacaktır. Sürümleri takip etmeniz gerekir. */ int main() { // ask user for driver video::E_DRIVER_TYPE driverType; printf("Please select the driver you want for this example:\n"\ "(a) Direct3D 9.0c\n(b) Direct3D 8.1\n(c) OpenGL 1.5\n"\ "(d) Software Renderer\n(e) Burning’s Software Renderer\n"\ "(f) NullDevice\n(otherKey) exit\n\n"); char i; std::cin >> i; switch (i) { case ‘a’: driverType = video::EDT_DIRECT3D9; break; case ‘b’: driverType = video::EDT_DIRECT3D8; break; case ‘c’: driverType = video::EDT_OPENGL; break; case ‘d’: driverType = video::EDT_SOFTWARE; break; case ‘e’: driverType = video::EDT_BURNINGSVIDEO; break; case ‘f’: driverType = video::EDT_NULL; break; default: return 1; } // create device and exit if creation failed device = createDevice(driverType, core::dimension2d<s32>(640, 480)); if (device == 0) return 1; // could not create selected driver. //Burada oluşturduğumuz sınıf düzenlemelerini ayarlayıp ve "VideoDriver" ve "GUIEnvironment" nesnelerine birer gösterici tanımlıyoruz. MyEventReceiver receiver; device->setEventReceiver(&receiver); device->setWindowCaption(L”Irrlicht Engine - User Interface Demo”); video::IVideoDriver* driver = device->getVideoDriver(); IGUIEnvironment* env = device->getGUIEnvironment(); //Yazı tipi değişikliği için bir font yüklüyoruz.Yeni bir font oluşturmak için irrlicht klasörü içinde bir font aracı gelmektedir. IGUISkin* skin = env->getSkin(); IGUIFont* font = env->getFont("../../media/fonthaettenschweiler.bmp"); if (font) skin->setFont(font); skin->setFont(env->getBuiltInFont(), EGDF_TOOLTIP); /* Penceremize 3 buton ekliyoruz.Birince buton Penceremizi kaptıyor.Ikinci buton Pencere oluştuyor ve üçüncü butonumuz ise bir dosya açma arayüzü oluşturuyor.Id numarası ile oluşturduğumuz sınıftan ne işlev yapmasını gerektiğini ulaşıyoruz. */ env->addButton(rect<s32>(10, 240, 110, 240 + 32), 0, 101, L"Quit", L"Exits Program"); env->addButton(rect<s32>(10, 280, 110, 280 + 32), 0, 102, L"New Window", L"Launches a new Window"); env->addButton(rect<s32>(10, 320, 110, 320 + 32), 0, 103, L"File Open", L"Opens a file"); //Sabit bir yazı ve bir kaydırma çubuğu ekliyoruz. Kaydırma çubuğunu maxisimum değerini 255 olarak ayarlıyoruz. env->addStaticText(L"Transparent Control : ", rect<s32>(150, 20, 350, 40), true); IGUIScrollBar* scrollbar = env->addScrollBar(true, rect<s32>(150, 45, 350, 60), 0, 104); scrollbar->setMax(255); scrollbar->setPos(env->getSkin()->getColor(EGDC_WINDOW).getAlpha()); //Bir sabit yazı ve litst box oluşturuyoruz. env->addStaticText(L"Logging ListBox : ", rect<s32>(50, 110, 250, 130), true); listbox = env->addListBox(rect<s32>(50, 140, 250, 210)); env->addEditBox(L"Editable Text", rect<s32>(350, 80, 550, 100)); //Irrlicht logomuzu 10.10 pozisyonuna ekliyoruz. env->addImage(driver->getTexture("../../media/irrlichtlogo2.png"), position2d<int>(10, 10)); //Şimdi yaptığımız tüm nesneleri çizdiyoruz. Ve arkaplan rengimizi ayarlıyoruz while (device->run() && driver) if (device->isWindowActive()) { driver->beginScene(true, true, SColor(0, 200, 200, 200)); env->drawAll(); driver->endScene(); } device->drop(); return 0; }Samed Ceylan
Yorumlar
Yorum Gönder