Game Maker - создание игр | HellRoom Games
Май 13, 2025, 09:15:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Scissor rectangle [GMS]  (Прочитано 7537 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DeatHSoul
GM Pro user
*

Репутация: 236
Offline Offline

Пол: Мужской
Награды:
За постоянность! [50 дней на форуме]FAQ для начинающих & Сленг и ТерминологияЗа лояльность! [+150 репутации]За помощь новичкам!Знаток Game Maker
API: GameMaker Studio Standard
Сообщений: 478


« : Февраль 21, 2016, 23:39:04 »

Описание
Расширение позволяет использовать функцию "scissor test": ограничивать область вывода.

Другими словами, за пределами указанного прямоугольника не будет выводиться ничего. Например, с помощью этой функции можно вывести текст в ограниченной области без использования поверхностей (surfaces). Так можно реализовать окно сообщения с плавной прокруткой текста. Кроме того, фрагменты (графика), которые не выводятся, практически не затрачивают ресурсов gpu (как и графика, рисуемая за пределами поверхности, например). В этом можно убедиться, если нарисовать что-то большое с scissor rectangle размером в 0,0.

Скачать
.gmez расширение: https://dl.dropboxusercontent.com/u/7808750/scissor.gmez
.gmz пример: https://dl.dropboxusercontent.com/u/7808750/scissor_test.gmz

Платформы
Windows и Ubuntu (Linux)
По необходимости могу добавить поддержку MacOS.

Функции
Код:
scissor_init();
— Следует вызвать один раз в начале игры. Увы, инициализация расширений и макросов вызывается до инициализации окна, а scissor_init на windows использует функцию window_device.
Код:
scissor_begin(x, y, width, height)
— Устанавливает позицию и размер ограничивающего прямоугольника (в системе координат окна (поверхности).
Код:
scissor_end()
— Отключает использование ограничивающего прямоугольника.

Пример использования
Код:
scissor_begin(8, 8, 128, 128);
draw_clear(c_black);
scissor_end();

Лицензия
Делайте с этим что хотите: используйте, распространяйте, редактируйте, продавайте, выкладывайте от своего имени. Если это поможет вам или кому-то другому — я буду только рад.

Технические подробности
scissor_begin и scissor_end вызывают vertex_submit очень простого вершинного буфера, состоящего из одной вершины. На данный момент это самый простой и эффективный способ из известных мне заставить GMS отправить текущий буфер видеокарте. Если будут другие предложения (могут быть с кодом на directx / opengl) — буду рад услышать.
Записан
Troir
GM Pro user
*

Репутация: 100
Offline Offline

Награды:
500 сообщений!За постоянность! [10 дней на форуме]
API: GameMaker 8.1 Standard
Сообщений: 766



« Ответ #1 : Февраль 22, 2016, 09:02:21 »

Пример не запускается.
Записан
et90
Участник
****

Репутация: 27
Offline Offline

Пол: Мужской
API: GameMaker Studio Pro
Сообщений: 178



« Ответ #2 : Февраль 22, 2016, 10:58:08 »

Фига себе. Сколько возможностей еще зарыто.
Записан
DeatHSoul
GM Pro user
*

Репутация: 236
Offline Offline

Пол: Мужской
Награды:
За постоянность! [50 дней на форуме]FAQ для начинающих & Сленг и ТерминологияЗа лояльность! [+150 репутации]За помощь новичкам!Знаток Game Maker
API: GameMaker Studio Standard
Сообщений: 478


« Ответ #3 : Февраль 22, 2016, 11:43:26 »

Troir, выдаёт ли какую-то ошибку?
Если не затруднит, не мог бы ты установить Visual C++ Redistributable for Visual Studio 2015 и проверить ещё раз?
Записан
S_Kleer
GM Pro user
*

Репутация: 567
Offline Offline

Награды:
За лояльность! [+500 репутации]3 место в Дичайшем джеме #82000 сообщений!За постоянность! [50 дней на форуме]Настоящий игродел!2 место на HellRoom Jam #5, Контраст...
API: GameMaker Studio 2
Сообщений: 2734


« Ответ #4 : Апрель 14, 2016, 16:36:04 »

У меня тоже не работает.
Пишет:
Цитировать
Compile Failed - Please check the Compile window for any additional information
В окне отладки:
Цитировать
Compile Extensions...
Error : gml_Script_scissor_init(15) : unknown function or script vertex_format_delete
finished.

Устанавливал Visual C++ Redistributable for Visual Studio 2015 но результат тот же.
Записан

Коты - Мирители
life Jumb
GM Pro user
*

Репутация: 251
Offline Offline

Пол: Мужской
Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]За добавление полезных программ!Третье место на HellRoom Jam #6 [Игра на конкурс]2 место в конкурсе Адекватные игры #3 [Антиутопия]
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512



WWW
« Ответ #5 : Апрель 14, 2016, 16:37:19 »

А чем сурфы для этих целей не угодили?
Записан

 
S_Kleer
GM Pro user
*

Репутация: 567
Offline Offline

Награды:
За лояльность! [+500 репутации]3 место в Дичайшем джеме #82000 сообщений!За постоянность! [50 дней на форуме]Настоящий игродел!2 место на HellRoom Jam #5, Контраст...
API: GameMaker Studio 2
Сообщений: 2734


« Ответ #6 : Апрель 14, 2016, 16:47:23 »

Просто решил у себя проверить gex. Всё же интересно, почему не работает.
UPD
Да и хотел проверить на одном своём проекте.
Записан

Коты - Мирители
Christopher
mgflernGD
GM Pro user
*

Репутация: 99
Offline Offline

Пол: Мужской
Награды:
3 место в HellRoom Jam XВторое место на HellRoom Jam #9 [Антибиотик]500 сообщений!За постоянность! [10 дней на форуме]
API: Game Maker 7.0 Pro
Деятельность: Инди-разработчик
Сообщений: 713


DragonGameStudios


WWW
« Ответ #7 : Апрель 14, 2016, 16:54:02 »

А чем сурфы для этих целей не угодили?
Возможно тем, что сурфейсы оставят области без прорисовки в памяти, сами требуют памяти = лишняя нагрузка
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 1.163 секунд. Запросов: 32.