- Сообщений: 119
- Спасибо получено: 3
В помощь скриптерам
- Equilibrium Keeper
-
Автор темы
- Не в сети
- Захожу иногда
-
- Скриптер
Скрыть
Больше
16 года 7 мес. назад #28691
от Equilibrium Keeper
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Equilibrium Keeper создал тему: В помощь скриптерам
Эта тема предназначена исключительно для тех, кто пишет скрипты на RGSS или RGSS2. Остальные едва ли найдут здесь для себя что-либо полезное!
Порой, бывает так, что при написании большого многостраничного скрипта, попутно рождаются маленькие, но очень полезные скриптики, способные упростить, ускорить, оптимизировать работу того или иного скрипта. Обычно, они так и теряются в дебрях кода, а ведь могут и принести реальную пользу многим скриптерам, которые смогут написать при помощи них нечто значительно лучшее, нежели очередная модификация велосипеда!
Ну и, собственно начну...
Наверняка, каждый скриптер рано или поздно утыкался взглядом в метод dispose, имеющийся в каждом окошке мейкера. Лез на умные форумы, где узнавал, что "уборщик мусора" - штука классная, но ненадежная, а потому все свои окошки, спрайты, картинки и прочее очень желательно затирать вручную. И порой, особенно в сложных скриптах, метод dispose превращается в совершенно безумное нагромождение циклов, которые вычищают содержимое массивов, хешей...
Вот и я несколько часов назад столкнулся с подобным скриптом. И так мне это все не понравилось, что я решил написать свой, универсальный, метод для высвобождения памяти из чего угодно... Вот, собственно, и он:
Теперь, чтобы освободить любой объект - картинку, спрайт или трехмерный массив с вложенными хэшами и все его содержимое, достаточно вызвать метод "free" и этот крошечный скриптик проделает всю "грязную" работу за вас!
Скрипт писался ночью, в отсутствии кофе, так что может содержать ошибки! Впрочем, я его несколько раз погонял на разных объектах, в том числе и вышеупомянутых многоэтажных массивах - работает!
Порой, бывает так, что при написании большого многостраничного скрипта, попутно рождаются маленькие, но очень полезные скриптики, способные упростить, ускорить, оптимизировать работу того или иного скрипта. Обычно, они так и теряются в дебрях кода, а ведь могут и принести реальную пользу многим скриптерам, которые смогут написать при помощи них нечто значительно лучшее, нежели очередная модификация велосипеда!
Ну и, собственно начну...
Наверняка, каждый скриптер рано или поздно утыкался взглядом в метод dispose, имеющийся в каждом окошке мейкера. Лез на умные форумы, где узнавал, что "уборщик мусора" - штука классная, но ненадежная, а потому все свои окошки, спрайты, картинки и прочее очень желательно затирать вручную. И порой, особенно в сложных скриптах, метод dispose превращается в совершенно безумное нагромождение циклов, которые вычищают содержимое массивов, хешей...
Вот и я несколько часов назад столкнулся с подобным скриптом. И так мне это все не понравилось, что я решил написать свой, универсальный, метод для высвобождения памяти из чего угодно... Вот, собственно, и он:
ВНИМАНИЕ: Спойлер!
Code:
#===============================================================================
#
#===============================================================================
class Object
#-----------------------------------------------------------------------------
# Возвращает true, если у объекта есть метод dispose
#-----------------------------------------------------------------------------
def disposable?
return methods.include?("dispose")
end
#-----------------------------------------------------------------------------
# Освобождает зарезервированную объектом память, если это возможно
# В случае если объект - массив или хэш, будет освобождено все его содержимое
#-----------------------------------------------------------------------------
def free
if is_a?(Array)
each_with_index{ |item, index|
item.free
self[index] = nil
}
clear
elsif is_a?(Hash)
each{ |key, item|
item.free
key.free
self[key] = nil
}
clear
else
if disposable? then dispose else return false end
end
end
#-----------------------------------------------------------------------------
end
Теперь, чтобы освободить любой объект - картинку, спрайт или трехмерный массив с вложенными хэшами и все его содержимое, достаточно вызвать метод "free" и этот крошечный скриптик проделает всю "грязную" работу за вас!
Скрипт писался ночью, в отсутствии кофе, так что может содержать ошибки! Впрочем, я его несколько раз погонял на разных объектах, в том числе и вышеупомянутых многоэтажных массивах - работает!
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Время создания страницы: 0.083 секунд
