IrrlichtФорум

Использование XML. (2 стр)

Страницы: 1 2
#15
19:26, 4 сен 2010

Сделал конфиг на луа как говорил Эльмиго. Только пока без класса и только для размеров окна.

   lua_State* L = lua_open();
   luaL_openlibs(L);
   if(luaL_dofile(L,"Scripts/config.lua"))
   {
     const char* err = lua_tostring(L, -1);
     printf("%s\n", err);
   }

   lua_getglobal(L, "windowWidth");
   int screenWidth = (int)lua_tonumber(L, -1);
   lua_getglobal(L, "windowHeight");
   int screenHeight = (int)lua_tonumber(L, -1);

   device =  createDevice( video::EDT_DIRECT3D9, dimension2d<u32>(screenWidth, screenHeight), 16, false, false, false, 0); 

Сам скрипт. Содержимое файла config.lua

windowWidth = 800
windowHeight = 600

Все таки гораздо проще чем использование xml :)

#16
18:02, 5 сен 2010


>Все таки гораздо проще чем использование xml :)

Понятия не имею. Я с Луа/Луной пока-что не знаком. Может быть.

Чисто для интереса 2 вопроса:
1. Цифры вы получаете как видно. А как насчёт русского текста? С ним можно корректно работать? Тут как я вижу работа с char строками. А если понадобится конвертировать в wchar_t для отображения окошка сообщения, Луна может корректно конвертировать русские символы?
2. При таком способе инициализации главного устройства скибокс отображается корректно?

#17
19:33, 5 сен 2010

Насчет отображения русского текста тоже стало интересно. И я собрал небольшой пример.
Для начала написал функцию для преобразования char* в wchar_t*

const wchar_t* charToWchar(const char* text)
{
  const c8 *cs = (const c8 *)text;
  wchar_t *ws = new wchar_t[strlen(cs) + 1];
  int len = mbstowcs(ws,cs,strlen(cs));
  ws[len] = 0;
  return ws;
  delete [] ws;
}

Далее добавил в включения

#include <locale.h>

И где-то в коде перед тем как нужен русский текст:

#if !defined(_IRR_WINDOWS_CE_PLATFORM_)
  setlocale(LC_ALL,"");
#endif

Далее создал шрифт с помощью FontTool, который идет вместе с движком.
Далее устанавливаем шрифт, получаем из конфига заголовок, текст и отображаем его в MessageBox

gui::IGUISkin* skin = guienv->getSkin();
 gui::IGUIFont* font = guienv->getFont("Font/MyFont.xml");
if(font)
   skin->setFont(font);

   lua_getglobal(L, "Text");
   const wchar_t* text = charToWchar(lua_tostring(L, -1));
   lua_getglobal(L, "Title");
   const wchar_t* title = charToWchar(lua_tostring(L, -1));
   guienv->addMessageBox(title,text);

Текст скрипта на луа:

windowWidth = 1024
windowHeight = 768
Title = 'Заголовок'
Text = 'Привет от LUA!'

Результат:
Изображение
И немного поменял код задания размеров окна:

   lua_getglobal(L, "windowWidth");
   u32 screenWidth = (u32)lua_tonumber(L, -1);
   lua_getglobal(L, "windowHeight");
   u32 screenHeight = (u32)lua_tonumber(L, -1);

   device =  createDevice( video::EDT_DIRECT3D9, dimension2d<u32>(screenWidth, screenHeight), 16, false, false, false, 0); 

Со скайбоксом тоже вроде все нормально.
В коде я только не возвращаю стеку луа первоначальное состояние, хотя надо бы.
Вот бинарник и исходники http://narod.ru/disk/24519222000/HelloLua.rar.html

#18
14:56, 6 сен 2010

Спасибо, думаю это пригодится не только мне.
Единственное замечание: у меня почему-то ф-ции mbstowcs() и wcstombs() работали не всегда корректно, пришлось использовать MultiByteToWideChar() и WideCharToMultiByte() из WinSDK.

Страницы: 1 2
IrrlichtФорум

Тема в архиве.