Изменение размера окна - Проблема - решение. GML и прочее. - Разработка игр на Game Maker (Simple Mode) - Форум Game Maker. Разработка игр.
Здравствуй Гость | Перейти на сайт

Главная | Форум | Регистрация | Войти
gmaker.net ;) [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Проблема - решение. GML и прочее. » Изменение размера окна
Изменение размера окна
Druce Дата: Пятница, 02.07.2010, 00:00 | Сообщение # 1
Каждый 5й пост мой
Группа: Страж
Сообщений: 1543
Статус: Offline
В общем возникла у меня такая проблема - в игре (ну, не совсем игре, то есть совсем не игре, но на ГМ) категорически необходим переключатель размера окна. Нормальный размер 1024 на 768 - показываются всякие менюшки и прочее. Но однажды возникла большая проблема - 1024 на 768 не влазит на проектор, соответственно окно ужалось и менюшки поплыли. Во избежание таких проблем решено сделать "micro-mode" - менюшки исчезают, остается только так сказать "рабочая область" и окно уменьшается до 640 на 480. В проекте используются виды, т.е. надо чтобы вид был корректного размера и корректно передвигался по комнате. Мне надо, чтобы изображение не масштабировалось, а оставалось той же четкости, просто лишняя область справа и снизу обрезается.
Вроде как и есть в ГМ нужные функции и смены вида и смены размера окна, но они отчего-то глючат и отображаются неправильно в любых сочетаниях. Итак, что я пробовал:
В настройках вида в комнате изначально стоят размеры 1024 на 768 и port on screen 1024 на 768, все работает прекрасно.
По нажатию кнопки стоит:
Code
if micro_mode=0
    {
    micro_mode=1
    o_controller.micro_mode=micro_mode
    window_set_size(640,480)//1
    view_wview=640//2
    view_hview=480//2
    view_wport=640//3
    view_hport=480//3
    view_xview=0
    view_yview=0
    //window_set_region_size(640,480,1)//4
    window_center()
    }
   else
    {
    micro_mode=0
    o_controller.micro_mode=micro_mode
    window_set_size(1024,768)//1
    view_wview=1024//2
    view_hview=768//2
    view_wport=1024//3
    view_hport=768//3
    view_xview=0
    view_yview=0
    //window_set_region_size(1024,768,1)//4
    window_center()
    }

Я цифрами 1, 2, 3 и 4 после двух слешей обозначил так сказать блоки кода чтобы объяснить их эффекты в разных комбинациях. Т.е. дальше я говорю какие блоки включены и как это выглядит.
Из всех вариантов после возвращения назад (второго нажатия кнопки) картинка становится абсолютно нормальной.

Самая удачная - 1+2. При этом окно становится 640 на 480, масштаб остается правильный, но картинка становится как будто размытой. Слева на картинке - нормальный режим, справа - ужатый. По сути он пытается масштабировать, включает интерполяцию и увеличивает картинку ровно в 1 раз. У меня интерполяция выключена и в данном проекте категорически не нужна.

1+2+3 - окно становится 640 на 480, затем вся картинка из начального 1024 на 768 сжимается и все что дальше координат 640 на 480 не рисуется.
Только 1 - окно сжимается до 640 на 480, размер картинки остается тот же, но она сжимается.
1+4 - то же самое.
Только 4 - менюшки пересают рисоваться (это зависит только от переменной micro_mode), но размер окна не меняется.
1+2+4 - аналогично 1+2 - получается что четвертая функция вообще ни на что не влияет.
1+2+3+4 - аналогично 1+2+3.
1+3 - как бы так описать. Получается что в окне вид прежнего размера сжимается до 640 на 480, оставляя обрезанные края, а потом еще и само окно сжимается до 640 на 480, в итоге рабочая область составляет всего шестую часть от нормальной.
2+3 - окно остается 1024 на 768, но зона отрисовки уменьшается до 640 на 480, остаются обрезанные края.

Может быть было бы выходам ввести второй вид, но тогда видимо придется везде в коде дописывать к переменным вида индекс, поскольку к конкретному виду (первому и на данный момент единственному) привязаны все менюшки.
Еще раз повторю свою цель - сделать окно 640 на 480, и чтобы при этом осталась четкость. Кто сможет предложить код - буду очень благодарен.

Прикрепления: 1998291.png(16Kb)


druce.ucoz.ru|andrewsweekly.livejournal.com|А OneStep тем временем мертв.
 
3bl3gamer Дата: Пятница, 02.07.2010, 16:10 | Сообщение # 2
Хоть палкой гони
Группа: Проверенные
Сообщений: 650
Статус: Offline
пошаманил я с ГМом, траблу так и не исправл, зато понял, как оно работает...
при создании вида создаётся некий сюрфейс соответствующего размера (в твоём случае - 1024х768). изначально он используется полностью. при изменении wview и hview изменяется размер области игрового пространства, которое мы увидим, при изменении wport и hport - размер области на сюрфейсе, на которую "натянется" область игрового пространства.

трабла в том, что тот сюрф в оконном режиме растягивается на всё окно, какаого бы размера не было последнее. что получается в "самом рабочем" из твоих случаев: игровое пространство обрезается(как и надо), а отрисовывается эта обрезанность на сюрф размером 1024х768 (порт-то не изменялся). далее этот самый сюрф сжимается до размеров окна (а оно - 640х480).

почему бага с отображением: игровое пространство(640х480) растягивается на сюрф(1024х768). графика у тебя в основном векторная, поэтому она при растяжении не "размазывается" или "пикселизируется", как спрайт, а остаётся чёткой. потом этот сюрф сжимается до 640х480 со сглаживаеием(!). хз почему, но игровые настройки на ЭТОТ сюрф не распространяются. получается, что картинка "слегка" сглажена (этакое х1.5 сглаживание), потому и выглядит отвратно.

я б на твоём месте запустил б её на весь экран, там с этой фигнёй меньше проблем.

 
Druce Дата: Пятница, 02.07.2010, 19:26 | Сообщение # 3
Каждый 5й пост мой
Группа: Страж
Сообщений: 1543
Статус: Offline
Я вот тоже теперь думаю использовать фулскрин. Начал возиться еще с другим симулятором, а там уже намного накладней изменять интерфейс. Получилось вполне удачно впихнуть его в 1024 на 768, а дальше действительно надо делать фулскрин и дублировать все кнопки действия на клавиатуре, чтобы можно было не использовать кнопок, привязанных к координате.
То есть выходит по-человечески менять размер окна не получится. Жаль, могло бы еще пригодиться где-нибудь. Спасибо.


druce.ucoz.ru|andrewsweekly.livejournal.com|А OneStep тем временем мертв.
 
3bl3gamer Дата: Среда, 14.07.2010, 13:39 | Сообщение # 4
Хоть палкой гони
Группа: Проверенные
Сообщений: 650
Статус: Offline
случайно наткнулся в справке:

Quote
Note that the size of the image on the screen is decided based on the visible views at the beginning of the room. If you change views during the game, they might no longer fit on the screen. The screen size though is not adapted automatically. So if you need this you have to do it yourself, using the following functions:

window_set_region_size(w,h,adaptwindow) Set the width and height of the drawing region in the window. adaptwindow indicates whether the window size must be adapted if the region does not fit in. The window size will always be adapted if you use fixed scaling. (See the function window_set_region_scale().)
window_get_region_width() Returns the current width of the drawing region.
window_get_region_height() Returns the current height of the drawing region.

не проверял, но думаю оно должно изменять размеры того "непонятного сюрфа"

 
Druce Дата: Среда, 14.07.2010, 14:21 | Сообщение # 5
Каждый 5й пост мой
Группа: Страж
Сообщений: 1543
Статус: Offline
это у меня какбе была функция номер 4, и как отписано выше, она абсолютно ничего не добавила. Собсно та программка уже уехала и я когда вернусь из путешествий через недельки две ее выложу. Так что вопрос про изменение размера окна остается разве что на далекое будущее.


druce.ucoz.ru|andrewsweekly.livejournal.com|А OneStep тем временем мертв.
 
3bl3gamer Дата: Среда, 04.08.2010, 14:26 | Сообщение # 6
Хоть палкой гони
Группа: Проверенные
Сообщений: 650
Статус: Offline
ну вот, терь тоже столкнулся с похожей проблемой. танцы с бубном продолжаются. а ЧТО вообще далает window_get_region_width()/height()? у меня ничего не происходит. wacko
 
Aimar Дата: Пятница, 06.08.2010, 01:33 | Сообщение # 7
Болтун
Группа: Проверенные
Сообщений: 173
Статус: Offline
Качество картинки теряется. Мне очень критично, у меня тоже прога, с мелким шрифтом. Может DLL кто знает для этих целей? Пока ищу.
У меня окно растягивать можно мышкой. Можно ли стандартными средствами ГМ реализовать, чтобы в момент растягивания масштаб динамически сохранялся бы 100%? А то картинка растягивается, а становится нормальной, только когда мышь отпустишь.
 
3bl3gamer Дата: Пятница, 06.08.2010, 12:29 | Сообщение # 8
Хоть палкой гони
Группа: Проверенные
Сообщений: 650
Статус: Offline
Quote (Aimar)
Качество картинки теряется.

всмысле?
 
Aimar Дата: Пятница, 06.08.2010, 13:05 | Сообщение # 9
Болтун
Группа: Проверенные
Сообщений: 173
Статус: Offline
Да как шрифт на картинке вверху. Только бывает много ужасней, ибо окно у меня растягивается как угодно. Из-за этих сурфов каждый раз шрифт выглядит по-разному.
 
3bl3gamer Дата: Пятница, 06.08.2010, 14:10 | Сообщение # 10
Хоть палкой гони
Группа: Проверенные
Сообщений: 650
Статус: Offline
а window_set_region_width()-то что делает?
 
Aimar Дата: Пятница, 06.08.2010, 14:39 | Сообщение # 11
Болтун
Группа: Проверенные
Сообщений: 173
Статус: Offline
Пошаманил с window_set_region_size(w,h,adaptwindow). Визуально оно ничего не меняет, просто конвертирует координаты мыши в новые координаты в пределах вида шириной w и высотой h. Понятия не имею, для чего это надо.
 
3bl3gamer Дата: Пятница, 06.08.2010, 17:24 | Сообщение # 12
Хоть палкой гони
Группа: Проверенные
Сообщений: 650
Статус: Offline
ааа... это для мыши.. тьфу блин!
а что? неужели никто не делал смену разрешения?
 
Aimar Дата: Пятница, 06.08.2010, 17:48 | Сообщение # 13
Болтун
Группа: Проверенные
Сообщений: 173
Статус: Offline
Короче, делает активной лишь часть окна и конвертирует координаты мыша туда в эту часть. Не то это совсем.
Я сделал так: ставим full scale, разрешаем тянуть окно, активируем вид. В степ:
Code
view_wview[0]=window_get_width();
view_hview[0]=window_get_height();
В итоге картинка глючит, еще и тянется. Интересно, можно ли обратиться к этому сюрфу?
 
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Проблема - решение. GML и прочее. » Изменение размера окна
Страница 1 из 11
Поиск:



Сообщество Gmaker.SU 2005-2012
Используются технологии uCoz
Простой вход