- Сообщений: 119
- Спасибо получено: 3
Custom Graphics.freeze и Graphics.transition
- Equilibrium Keeper
-
Автор темы
- Не в сети
- Захожу иногда
-
- Скриптер
Graphics.freeze и Graphics.transition ?
Дело все в том, что Graphics.freeze сохраняет область 640х480 и ни пикселем больше. Graphics.transition берет ее в качестве исходника при переходе. Следовательно, при разрешение 1024х768 такой вариант не катит. Я уже переделал смену сценок методами fadeout и fadein (прикрутил эти фичи из VX), однако хотелось бы и стандартные переходы оставить. Тот же переход к бою с ними смотрится куда эффектнее.
Следовательно нужно либо переписать Graphics.freeze так, что бы он запоминал большую область экрана и Graphics.transition умел с ней работать, либо переписать их обоих. И вот здесь появляются сложности: Graphics.transition делает переход на основе серого градиента. Все это прекрастно, но средставами руби это выглядит, как взятие пикселя с перехода, расчета среднего между его составными частями (red+green+blue) / 3, обращением относительно 255 и последующей заливкой запомненного изображения прозрачностью. Итого: взять пиксель, посчитать, установить пиксель. Для разрешения 1024х768 эта операция будет проделана 200 540 160 раз. Если учесть, что после каждого такта цикла (0...255), будет вызываться Graphics.update - 786 432 раз. Но это утешает слабо.
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Для разрешения 1024х768 эта операция будет проделана 200 540 160 раз. Если учесть, что после каждого такта цикла (0...255), будет вызываться Graphics.update - 786 432 раз. Но это утешает слабо.
А для разрешения 640х480?
И вот что интерестно, в VXе разрешение 544×416, а Graphics.freeze сохраняет область 640х480 как ты сказал. Неужели ЭфирныеМозги поленились переделать эту часть кода? Или эо сделанно специально?
З.Ы. Тут только до 640х480
З.З.Ы.
Все это прекрастно, но средставами руби это выглядит, как взятие пикселя с перехода, расчета среднего между его составными частями (red+green+blue) / 3, обращением относительно 255 и последующей заливкой запомненного изображения прозрачностью. Итого: взять пиксель, посчитать, установить пиксель.
Скажи, это в каком скрипте именно прописано? Хочу тоже голову поломать
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Equilibrium Keeper
-
Автор темы
- Не в сети
- Захожу иногда
-
- Скриптер
- Сообщений: 119
- Спасибо получено: 3
По количеству пикселей.А для разрешения 640х480?
Я вообще не очень понимаю - зачем ЭфирныеМозги вводят те или иные ограничения. XP они сделали 640х480, тогда, как самым ходовым было 1024х768. Далее VX - кастрация до 544х416, заодно урезали боевку и тайлсеты. Да, при этом они ввели возможность менять размеры окна без методов WinAPI, но не потрудились ни выложить код Tilemap (низки поклон poccil), ни починить переходы. Я не понимаю почему. Видать, мозги и впрямь эфимерные...И вот что интерестно, в VXе разрешение 544×416, а Graphics.freeze сохраняет область 640х480 как ты сказал. Неужели ЭфирныеМозги поленились переделать эту часть кода? Или эо сделанно специально?
Этого скрипта не существует.Скажи, это в каком скрипте именно прописано? Хочу тоже голову поломать
Естсественно, это лишь предположение. Я даже не пробовла это запустить, и допускаю наличие синтаксических ошибок.
Вот, пока писал, еще подумал, что get_pixel можно прогнать для обеих картинок в самом начале и заполнить хэш, и брать инфу уже из него. Но 786 432 установок пикселя никуда не денутся...

И еще - должен же Graphics.freeze где-то хранить скриншот! Знать бы где? В себе не может - это модуль. Значит в глобальной переменной?..
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
По количеству пикселей. 640 * 480 = 307 200 раз за один такт. Прозрачность у нас варьируется до 255, следовательно всего 78 336 000 раз
Обе цифры страшные
И еще - должен же Graphics.freeze где-то хранить скриншот! Знать бы где? В себе не может - это модуль. Значит в глобальной переменной?..
$game_temp.background_bitmap это чтоль?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Equilibrium Keeper
-
Автор темы
- Не в сети
- Захожу иногда
-
- Скриптер
- Сообщений: 119
- Спасибо получено: 3
Не знаю. Никогда не делал ничего подобного. Вот градиентную заливку с помощью обычной - делал. Там 1024х768 заливается меньше чем за секунду. Но там то всего 1024 (или 768), а не несколько сотен тысяч...Обе цифры страшные Всего в 3 раза разница, это смертельно?
Неа - в XP такого вообще не существует. Да и Graphics.freeze можно вызвать в самом начале - тобишь создаваемые дальше $game_*** он не трогает. Только уже созданные на момент запуска переменные. Попробовать порыть $1, $2,..,$9 что-ли? Но вряд ли...$game_temp.background_bitmap это чтоль?
---
Нет, они остаются пустыми...

Хуже всего, если Graphics написан на C и хранит картинку в переменных недоступных из руби...
Так бы можно было просто подсунуть ему новую картинку. А так - только переписывать оба метода...
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Хуже всего, если Graphics написан на C и хранит картинку в переменных недоступных из руби...
Так бы можно было просто подсунуть ему новую картинку. А так - только переписывать оба метода...
Кстати, в Си можно вставлять код ассемблера. Руби ведь на Си написан, там наверно тоже Си код можно воткнуть...
Вот что-то с этой области:
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Agckuu_Coceg
-
- Не в сети
- Живу я здесь
-
- Простой Гинтокист с огромной внутренней ленью.
- Сообщений: 1549
- Спасибо получено: 329
Кстати, в Си можно вставлять код ассемблера. Руби ведь на Си написан, там наверно тоже Си код можно воткнуть...
Ну, Руби - отдельный язык программирования, но его алгоритмы в принципе похожи на C и C++. Я честно говоря не уверен, что в него воткнуть ассемблер, но если это прокатит, то это будет реальная жуть.
А что именно нужно, Кипер? Система изменения размера экрана, что ли?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Equilibrium Keeper
-
Автор темы
- Не в сети
- Захожу иногда
-
- Скриптер
- Сообщений: 119
- Спасибо получено: 3
"Система изменения размера экрана" уже написана и готова. Все работает корректно за исключением 2х моментов:
1) Тормоза на картах с большим количеством анимированных автотайлов (например, если все залить автотайловой водой).
2) Переход при помощи Graphics.transition осуществляется только для области 0, 0, 640, 480.
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Agckuu_Coceg
-
- Не в сети
- Живу я здесь
-
- Простой Гинтокист с огромной внутренней ленью.
- Сообщений: 1549
- Спасибо получено: 329
А ты прочитай первое сообщение в теме. -_-
"Система изменения размера экрана" уже написана и готова. Все работает корректно за исключением 2х моментов:
1) Тормоза на картах с большим количеством анимированных автотайлов (например, если все залить автотайловой водой).
2) Переход при помощи Graphics.transition осуществляется только для области 0, 0, 640, 480.
Ну, первое ещё возможно решить с помощью анти-лага.
А вот со вторым я не в курсе. Можно, конечно полазить в других скриптах изменения размера экрана, и посмотреть, как оно выглядит.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
→ → ↓ ↑ Y
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Equilibrium Keeper
-
Автор темы
- Не в сети
- Захожу иногда
-
- Скриптер
- Сообщений: 119
- Спасибо получено: 3
Извини, но ты не в теме.
mephis
Ммм... Ну и хрен с ним, по большому счету. Заменю все темными переходами. Разрешение дороже. -_-
Еще вопрос - а никто не в курсе из-за чего происходит мерцание при скроле карты? При любом разрешении, даже на стандартном движке. Особенно заметно, если залить большую карту одним тайлом и пройтись по ней...
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Agckuu_Coceg
-
- Не в сети
- Живу я здесь
-
- Простой Гинтокист с огромной внутренней ленью.
- Сообщений: 1549
- Спасибо получено: 329
Эффект мерцания происходит лишь на некоторых мониторах из-за эффектов системы скролла камеры Мозго***в. Проблема нерешаема.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
→ → ↓ ↑ Y
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Кстати, насчёт скрипта разрешения. Помню тему, где за правильно работающий скрипт, меняющий разрешение и убирающий мерцание, сулили штукас баксов. Но, вроде как безрезультатно.
→ → ↓ ↑ Y
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Equilibrium Keeper
-
Автор темы
- Не в сети
- Захожу иногда
-
- Скриптер
- Сообщений: 119
- Спасибо получено: 3

Эх, вот и не знаю - то ли браться за грейд мейкера, то ли писать движок на MMF... В последнем не хватает уже родного Руби. А в мейкере - гибкости.

А хотел написать на RGSS оболочку для баз.
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
→ → ↓ ↑ Y
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Agckuu_Coceg
-
- Не в сети
- Живу я здесь
-
- Простой Гинтокист с огромной внутренней ленью.
- Сообщений: 1549
- Спасибо получено: 329
Equilibrium Keeper, вообще, на каком-то из забугорных форумов я читал, что некий товарищ написал dll-ку, с функцией захвата изображения с указанного окна. И вызывал её, через скрипты в Руби. Она даже называлась - Transition. Надо поискать...
Этот кто-то - некий Selwyn с RMXP.ORG. И скрипт называется Resolution, а не Transition, mephis.
Что касается самого скрипта - я его нашёл. И скрипт, и display.dll.
Скрипт
Ссылка на *dll:
ССЫЛКА
По этому скрипту целую кучу других скриптов изменения разрешения написали... Я встретился по меньшей мере с тремя.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Equilibrium Keeper
-
Автор темы
- Не в сети
- Захожу иногда
-
- Скриптер
- Сообщений: 119
- Спасибо получено: 3
В любом случае, к переходам это никоим местом не относится, так что хватит оффтопить.
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
