Как сделать user interface
| |
clidi | Дата: Вторник, 10 Апреля 2012, 19:12 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Как сделать user interface в игре, используя только opengl?
|
|
| |
TimKruz | Дата: Вторник, 10 Апреля 2012, 20:31 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Просто. Хочешь сделать кнопку: выводишь на экран полигон с текстурой кнопки. Ждёшь и отлавливаешь нажатие кнопки на окне. Определяешь, где был сделан клик, следовательно, по какой кнопке кликали (если кнопки неподвижные - просто математически проверяешь координаты точки на вхождение в полигон или фигуру другой формы, если подвижные - нужно учитывать ещё и положение в каждый момент времени). Всё. Можно ещё отлавливать отдельно нажатие и отжатие кнопки, чтобы сделать анимацию нажатия. Чек-боксы или радио-кнопки работают также, как и кнопка, только клик просто меняет их текстуру. (радио-кнопки группируются) Скроллы всякие лучше делать двумя отдельными полигонами - полоской и бегунком. Тут придётся отлавливать перемещение мыши при зажатой кнопке. Коробки с текстом - просто пустой полигон, поверх которого выводятся полигоны с буквами, если по нему был сделан клик и нажата буквенная клавиша. Курсор делается полигоном, привязанным к курсору (отслеживается любое перемещение), в то время как системный курсор выключен (есть такая системная функция).
Если твой язык программирования позволяет, всё это можно инкапсулировать в объекты, для удобства. Текст можно выводить отдельно, с помощью OpenGL-функций.
Сообщение отредактировал TimKruz - Вторник, 10 Апреля 2012, 20:34 |
|
| |
horax | Дата: Вторник, 10 Апреля 2012, 21:19 | Сообщение # 3 |
TheLord
Сейчас нет на сайте
| clidi, OpenGL Game Development - код к книге (+ бонус). Там есть информация и по интерфейсу.
Dlaczego kiedy Polak pisze: "Oh baby!", Amerykanin czyta coś całkiem inne?!! ©Horax *** HVC IAM SVM
Сообщение отредактировал horax - Вторник, 10 Апреля 2012, 21:35 |
|
| |
clidi | Дата: Воскресенье, 15 Апреля 2012, 12:58 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| А как систему координат одинаковую сделать? У курсора координаты окна и начинаются в левом нижнем углу, а у кнопки с текстурой координаты начинаются в центре экрана Добавлено (15.04.2012, 12:58) --------------------------------------------- Уже понял.
|
|
| |
Тритон | Дата: Среда, 02 Мая 2012, 17:07 | Сообщение # 5 |
постоянный участник
Сейчас нет на сайте
| Quote (TimKruz) Просто. Хочешь сделать кнопку: выводишь на экран полигон с текстурой кнопки. Ждёшь и отлавливаешь нажатие кнопки на окне. Определяешь, где был сделан клик, следовательно, по какой кнопке кликали (если кнопки неподвижные - просто математически проверяешь координаты точки на вхождение в полигон или фигуру другой формы, если подвижные - нужно учитывать ещё и положение в каждый момент времени). Всё. Можно ещё отлавливать отдельно нажатие и отжатие кнопки, чтобы сделать анимацию нажатия. Чек-боксы или радио-кнопки работают также, как и кнопка, только клик просто меняет их текстуру. (радио-кнопки группируются) Скроллы всякие лучше делать двумя отдельными полигонами - полоской и бегунком. Тут придётся отлавливать перемещение мыши при зажатой кнопке. Коробки с текстом - просто пустой полигон, поверх которого выводятся полигоны с буквами, если по нему был сделан клик и нажата буквенная клавиша. Курсор делается полигоном, привязанным к курсору (отслеживается любое перемещение), в то время как системный курсор выключен (есть такая системная функция).
Если твой язык программирования позволяет, всё это можно инкапсулировать в объекты, для удобства. Текст можно выводить отдельно, с помощью OpenGL-функций. Ну и ну. Зачем вообще повторять на ЖЛе дочерние форточки от мелкомягких? Уж если на ЖЛе, то крыса должна прямо по объектам кликать, а не через промежуточный уровень. Какие нафиг кнопки с чексами? Двери, свитки, бутылки, мечи и тому подобное, прямо по ним крысой. Если в свитке записан текст квеста, то придётся сделать скрол, от него ни куда не уйдёшь. Но остальное зачем копирожать? Не нужен ни какой чекобокс, а если уж приспичело сделать отмечалку, то делаем нормальный флажок в нужном месте, или на свитке появляющийся/исчезающий крестик. Кнопка годится только как кнопка дверного звонка, или если в кадр попадает клава-объект игрового мира, например, рояльная, на пульте от телевизора, на самом телевизоре, или ГГ забрёл в кабинет персонажа-компьютерщика. Можно также в некоторых свитках сделать строки, работающие, как кнопки.
Не всё так плохо, как оно есть на самом деле.
Сообщение отредактировал Тритон - Среда, 02 Мая 2012, 17:08 |
|
| |
|