Перейти к публикации
Форум - ComputerCraft
  • 0
andrgysev02

GUI

Вопрос

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

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


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

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

  • 0

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

Хелло амиго!

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

 

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

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


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

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

Пример либы с нашего форума: 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/

 

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

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


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

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

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

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

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


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

Еще можно написать велосипед. Но это на тот случай, если захочется изучить как в ОС скрипты писать или просто на 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

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×