Перейти к содержимому
  • 0
aMax

Графические кнопки управления.

Вопрос

Я прочитал разные гайды и способы сделать псевдографические кнопки. Но мне стало интересно "А можно ли сделать хоть простую графическую кнопку?!?". По сути я бы мог покопаться в исходниках всяких ОС, ведь там иконки программ уже графические кнопки. Но мне важно узнать самые оптимальные, отзывчивые, простые варианты исполнения данной проблемы штуки от разных людей с +-опытом.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

42 минуты назад, aMax сказал:

Допустип мне ножно управлять роботом с помощью планшета, в свою очередь планшет с графическим интерфейсом. Мне нужны кнопки для удобного управлением робота, и его доп. функциями, а графика для их удобного оформления.

Если цель стоит именно в управлении роботом, то удобнее будет сделать управление клавишами клавиатуры, а не кликать мышью по графическим кнопкам. А на экран вывести подсказки по этим кнопкам. Такое управление не только более удобно, оно ещё и быстро обрабатывается. Причём, независимо от картинки на экране, что позволяет, например, уменьшать размер экрана до одного символа и получить более широкий обзор движений робота или дрона. На форуме есть примеры таких решений.

 

Если же очень хочется именно GUI и мышкотыканья, то доступные символы можно посмотреть здесь:

Шрифт в OC

Символы. Lua

Ссылки на графически библиотеки кидать не буду, их довольно много, и найти их не сложно. Например, так:

https://lmgtfy.com/?q=графическая+библиотека+site%3Acomputercraft.ru

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
13 часа назад, aMax сказал:

Мне неважно как создать текстуру, мне нужно, что бы были залитые пиксели тем цветом и там, где я захочу.

 

13 часа назад, aMax сказал:

Мне нужны кнопки для удобного управлением робота, и его доп. функциями, а графика для их удобного оформления.

:blink:

Тогда я тоже не вижу ничего понятного. Мне неясно, в чём конкретно заключается вопрос? В том, что нужна "картинка" кнопки? В целом, это можно реализовать шрифтом брайля. 

Но, есть минус. Так как каждый симовл брайла занимает 1 "пиксель", то сделав условный треугольник нажатие будет по всему треугольнику, а не по его контуру. Но всё же вариант с символами лаконичнее.

Если я опять не понял вопрос, то ничем помочь не могу. Я не знаю, что значит "простая графическая кнопка" :(.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

До меня, кажись, дошло, что значит "графическая" кнопка. Тебе конкретно нужно что-то подобное? В MineOS иконки как раз по твоим запросам.
image.png.fe1b28ff53a37e1e91cfad6941fbccab.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У терминалов OC нет графического режима.

Используй символы-блоки и полублоки из Юникода. Или символы алфавита Брайля.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, aMax сказал:

Я прочитал разные гайды и способы сделать псевдографические кнопки. Но мне стало интересно "А можно ли сделать хоть простую графическую кнопку?!?".

У @Hikooshi довольно подробный гайд на эту тему, если хочется делать кнопки без всяких новомодных библиотек:

Скрытый текст

 

 

Изменено пользователем BrightYC

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Немного не понятно. В любом случае кнопка это графика а нажатие это отслеживание действий пользователя. Я лично писал калькулятор на основе этой статьи

Это довольно сложно, но вполне реализуемо. Можно немного с кодом поковыряться и будет вообще конфетка. Но увы, если у вас дофига кнопок это чудо начинает несказочно лагать. 

Есть еще где то редактор прям готовый, где можно создать не только кнопки но и метки, списки, и прочее прочее, но я как то не помню куда его запихали. Пробовал и через него создавать кнопки, но там несколько специфичное все, интерфейс рисовать только через редактор, обязательное подключение библиотеки, ну и скорость работы низкая.

Пробовал сам писать, получилась неплохая в теории библиотека, но у меня её сперли какие то добрые люди вместе с блокнотом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Asior @BrightYC Вы упомянули статью и видео не подходящую критериям вопроса. Не вижу ничего непонятного. 

 
 
 
 
В 09.08.2019 в 22:41, aMax сказал:

 По сути я бы мог покопаться в исходниках всяких ОС, ведь там иконки программ уже графические кнопки. Но мне важно узнать самые оптимальные, отзывчивые, простые варианты исполнения данной проблемы штуки от разных людей с +-опытом.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
20 минут назад, aMax сказал:

Не вижу ничего непонятного.

Я тоже плохо понял вопрос.

В 09.08.2019 в 22:41, aMax сказал:

А можно ли сделать хоть простую графическую кнопку?!?

Ответ на этот единственный вопрос однозначен: Можно.

В 09.08.2019 в 22:41, aMax сказал:

Но мне важно узнать самые оптимальные, отзывчивые, простые варианты исполнения данной проблемы штуки от разных людей с +-опытом.

Вопрос имеет довольно общий, неконкретный характер. И ответ тоже будет общим. Надеюсь, он будет полезен.

 

Самый простой вариант: создать таблицу с координатами прямоугольников и текстом для их заполнения. Возможно, и с цветами тоже. Также таблица должна содержать ссылки на обработчики этих кнопок. Далее, все эти кнопки отрисовываются на экране. Поймав событие клика мыши, алгоритм последовательно обходит весь массив прямоугольников, и сравнивает координаты клика с координатами границ кнопок. При обнаружении совпадения клика с некоторой кнопкой управление передаётся соответствующему ей обработчику. Также все кнопки можно обрабатывать в одном обработчике, тогда в таблице можно хранить идентификаторы кнопок. А можно хранить одновременно как обработчики, так и их параметры. Эти вариации не сильно изменят итоговый алгоритм.

 

Самый быстрый вариант: формировать образ экрана вместе со всеми кнопками, и выводить их минимальным количеством операций, как это сделано, например в библиотеке DoubleBuffering от @ECS. Также можно заранее просчитать и заполнить массив всех возможных координат для кликов мыши и назначить каждой точке свой обработчик. При клике мыши останется лишь по координатам клика вытащить из таблицы нужный обработчик. Но на хранение таблицы придётся потратить память. При желании и образ экрана и таблицу с координатами кликов можно формировать заранее, до запуска программы пользователем. Эта вариация будет работать ещё быстрее.

 

Самый оптимальный вариант: это вообще что-то неведомое. Оптимум всегда зависит от целей. В каком-то случае можно жертвовать памятью, в другом быстродействием, а в третьем простотой. На этот вопрос не существует абстрактного ответа. Нужно знать все условия задачи, тогда можно будет говорить о поиске оптимума. И тоже не факт, что его удастся определить теоретически. Скорее всего, оптимум придётся искать экспериментально. Тот же @ECS тоже не сразу нашёл оптимальные решения для своих библиотек. И оптимум он искал под свою систему MineOS, балансируя между лимитами памяти и быстродействия.

 

Если речь идёт о пяти кнопках, то нет смысла морочить себе голову темой быстродействия. Если же количество кнопок измеряется сотнями, то имеет смысл найти закономерности и уже с их помощью оптимизировать поиск кнопки, на которой выполнен клик. Закономерности будут зависеть от условий задачи. Некоторые слишком жёсткие условия иногда можно скорректировать таким образом, чтобы создать закономерности для оптимизации.

 

При каком количестве кнопок надо задумываться об оптимизации, тоже решается индивидуально. Для получения опыта можно упарываться и на простых задачах. Но это занятие довольно быстро наскучит. Поэтому большинство программистов вспоминают про оптимизацию, когда их не устраивает быстродействие их программы. А это субъективный параметр. Часто оптимизация проходит по линии между дискомфортом от тормозов GUI и ленью программиста.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Переформулирую вопрос.
Допустип мне ножно управлять роботом с помощью планшета, в свою очередь планшет с графическим интерфейсом. Мне нужны кнопки для удобного управлением робота, и его доп. функциями, а графика для их удобного оформления. Я бы мог скажем для кнопок использовать символы "/"и"\", но эти линии осень тонкие, и не соеденяются друг с другом по высоте(будут "разрывчики")(У меня был вариант отрисовывать не одну строку текста на кнопке, а несколько. Для удобства). Мне неважно как создать текстуру, мне нужно, что бы были залитые пиксели тем цветом и там, где я захочу. Для этого, я провёл аналогии:

 
 
 
 
В 09.08.2019 в 22:41, aMax сказал:

По сути я бы мог покопаться в исходниках всяких ОС, ведь там иконки программ уже графические кнопки.

 

"    /\    "       " ░░█░░ " 
"  /    \  "  ->   "░█░█░"
"/        \"        "█░░░█"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Фиг с вами сам разберусь. Но спасибо, за инфу.

Изменено пользователем aMax

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...