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

GUI

Вопрос

Здравствуйте, извините за беспокойство, назрел один вопрос... Я только начал изучать OC, но нигде не нашел, как создавать элементы интерфейса, кнопки например... Подскажите пожалуйста, если не трудно...

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


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

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

Здравствуйте, извините за беспокойство, назрел один вопрос... Я только начал изучать OC, но нигде не нашел, как создавать элементы интерфейса, кнопки например... Подскажите пожалуйста, если не трудно...

Хелло амиго!

Хочешь использовать готовую GUI-библиотеку жми сюда -> клац

 

И в следующий раз если захочешь использовать чьи-то библиотеки, то они все находятся в разделе "Библиотеки пользователей".

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


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

По умолчанию функции "создай кнопку" не имеется. Можно нарисовать и повесить листенер, но занятие это не особо увлекательное. Так что на свете существует море всяких ГУИ-либ, который призваны отрисовывать сами всякие списки, поля, кнопки и прочее.

Пример либы с нашего форума: http://computercraft.ru/topic/1016-oc-%D0%BB%D1%91%D0%B3%D0%BA%D0%B0%D1%8F-%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0-gui/

Есть ещё либа с форума ОС официального. Вот: http://oc.cil.li/index.php?/topic/580-gui-api-064beta/

 

Сразу говорю: с английским вариантом даже не хотелось работать (смущает дурацкое название и какой-то скудный функционал).

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


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

Так же советую FormsMaker

Замечательная штука: спроектировал гуи и можно писать код, привязывая функции к элементам интерфейса)

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

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


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

Еще можно написать велосипед. Но это на тот случай, если захочется изучить как в ОС скрипты писать или просто на lua(в данном случае), или понять самому как все эти библиотеки работают(примерно) - гемморой одним словом. Зато скилл повышает. Мне кажется, что все проходили через стадию написания своей GUI библиотеки :)

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

 

Код примерно такой:

 

 

--Подгрузка нужных API
local event = require "event"       --Штука которая позволяет ловить события, например нажатия кнопок и пр.
local gpu = require "component".gpu --Наша видеокарта, с посощью которой будут отрисовываться кнопки.

--Находится ли заданная точка внутри прямоугольника.
local function PointInRect(x, y, sx, sy, ex, ey)
        if (x >= sx) and (x <= ex) and (y >= sy) and (y <= ey) then return true end    
        return false
end

--"Создаем" наши кнопки. Точнее мы просто записываем в "массив" информацию о местоположении и размерх кнопки.
local button1 = { x = 10, y = 10, width = 5, height = 6 }
local button2 = { x = 20, y = 30, width = 20, height = 10 }

--Установить цвет экрана на красный(таким цветом отрисуется наша кнопка)
gpu.setBackground(0xff0000)
gpu.fill( button1.x, button1.y, button1.width, button1.height, ' ' )

--Установить цвет экрана на зеленый
gpu.setBackground(0x00ff00)
gpu.fill( button2.x, button2.y, button2.width, button2.height, ' ' )

--Восстановить цвет экрана на черный
gpu.setBackground(0)

--Вечный цикл, в котором мы будем ловить эвенты для отлова нажатия на нашу кнопку
while true do
 --Ловим эвент touch, т.е. эвент нажатия кнопки
 --touch(screenAddress: string, x: number, y: number, button: number, playerName: string)
 local _, x, y, button = event.pull( "touch" )
 --Если мы нажали на левую кнопку мыши
 if ( button == 0 ) then
  --Если мы кликнули по первой кнопке, то вывести сообщение на экран(то есть координаты точки(x, y), куда мы кликнули находятся 
    внутри прямоугольника)
  if ( PointInRect( x, y, button1.x, button1.y, button1.width+button1.x, button1.height+button1.y ) ) then
   print("Button1 pressed!")
  elseif ( PointInRect( x, y, button2.x, button2.y, button2.width+button2.x, button2.height+button2.y ) ) then
   --а если мы кликнули по второй кнопке, то вывести сообщени о попадании на вторую кнопку
   print("Button2 pressed!")
  end
 end
end

Данный код я не тестировал, может не работать. Написал чисто для примера. Единственное что тут наверняка работает, так это функция PointInRect.

 

 

 

Информацию о всяких эвентах и встроенных библиотеках можно найти тут: http://ocdoc.cil.li.

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

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


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

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

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

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

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

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

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

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

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


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