• ↓
  • ↑
  • ⇑
 
Записи с темой: ruby (список заголовков)
18:20 

Типа гама

А ты уже научился заряжать левой ногой свой телефон?
Решил сделать стрелялку на Ruby + библиотека SDL
вобщем человечек бегает и стреляет, изничтожая монсторв
но игра безбожно тормозит при большом их числе вот к примеру тут их около 423 :)



@темы: игроделание, Ruby

16:22 

Ruby

А ты уже научился заряжать левой ногой свой телефон?
Иногда компилить проги / библиотеки естессно чужие это прям как расследование какоето:
Вот значит скачал http://www.kmc.gr.jp/~ohai/rubysdl_download.en.html, сначала бинарники. Все заработало. Но потом скачал исходники и захотелось их откомпилить (типа развлечение нашел):

Откомпилил почти сразуже, получил dll, переименовал в so и бросил в папку где все ruby-ишные so-шники. Не заработало. Начала разбираться (почемуто стало интерессно), исходники ведь на C. Понял что после загрузки библиотеки в Ruby создается Модуль (можно сказать class). Причом не автоматом, а в функции, тама прямо так написано:

void Init_sdl()
{
mSDL = rb_define_module("SDL");
eSDLError = rb_define_class_under(mSDL,"Error",rb_eStandardError);
rb_define_module_function(mSDL,"init",sdl_init,1);
rb_define_module_function(mSDL,"initedSystem",sdl_wasInit,1);
.....
}

Типа с помощью Сишных функций (с префиксом rb) которые загружаются из библиотеки, которую предоставляет ruby. Т.е. там обертки для каждого действия в ruby. И т.к. в ruby можно определять класс/модуль не сразу а на нескольких строках (язык то динамический) то вот собственно это и происходит в функциях начиная с rb_define_module.

Но вот где вызывается эта функция я не нашел. Помог текст ошибки при запросе подключить библиотеку "require sdler.so": типа не найдена функция Init_sdler (файл у меня назывался sdler.so). Хы, оказалось при загрузки so-шника вызывается (или ruby вызывает) функция Init_ИМЯso. Перекомпилил значит библу токо с Init_sdler. Но при запуске она все равно не нашлась. Доперло что нужно писать:

__declspec(dllexport) void Init_sdler() { ... }

Вот тады все заработало :)

P.S. Получается на ruby можно любую (или не любую :) ) библу через C/С++ написать. Токо с оболочки делать это не самое приятное занятие.

@темы: Ruby

Дневник SonicCat

главная