ZloyApelsihchik 0 Опубликовано: 5 ноября, 2018 (изменено) Возникла проблемка, Хочу забить в функцию переменную силы сигнала, но чета как то никак. Компилятор ругается, без понятия почему. local GUI = require("GUI") local component = require("component") local sides = require("sides") local colors = require("colors") local rs = component.redstone local MaxSignalPower = 256 -------------------------------------------- local mainContainer = GUI.fullScreenContainer() mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x2D2D2D)) local inputPower = mainContainer:addChild(GUI.input(5, 4, 30, 3, 0xEEEEEE, 0x555555, 0x999999, 0xFFFFFF, 0x2D2D2D, "", "")) local powerSignal inputPower.onInputFinished = function() powerSignal = inputPower.text end local function rOutput() rs.setOutput(sides.top, powerSignal) end local function rOutputOff() rs.setOutput(sides.top, 0) end local switch2 = mainContainer:addChild(GUI.switch(5, 12, 8, 0x66DB80, 0x1D1D1D, 0xEEEEEE, false)) switch2.onStateChanged = function() if switch2.state then rOutput(sides.top, powerSignal) else rOutputOff() end end ------------------------------------------------ mainContainer:drawOnScreen(true) mainContainer:startEventHandling() Изменено 5 ноября, 2018 пользователем ZloyApelsihchik объединение сообщений Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 5 ноября, 2018 Дык поле input.text является строкой, ты ж ее сам вводишь в виде текста, в виде чертовых символов. А функция redstone.setOutput(side, strength) в качестве второго аргумента принимает только числа. Ясен фиг ругается, если ты ей пытаешься текст скормить. Юзай что-то типа этого: inputPower.onInputFinished = function() -- Зачекай, а то мало ли там вообще не число введено if inputPower.text:match("%d+") then powerSignal = tonumber(inputPower.text) end end Второй вариант с автоматической валидацией: inputPower.validator = function() return inputPower.text:match("%d+") end -- При наличии validator этот метод выполнится только в случае успешной валидации текста inputPower.onInputFinished = function() powerSignal = tonumber(inputPower.text) end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ZloyApelsihchik 0 Опубликовано: 6 ноября, 2018 (изменено) 14 часов назад, ECS сказал: Дык поле input.text является строкой, ты ж ее сам вводишь в виде текста, в виде чертовых символов. А функция redstone.setOutput(side, strength) в качестве второго аргумента принимает только числа. Ясен фиг ругается, если ты ей пытаешься текст скормить. Юзай что-то типа этого: inputPower.onInputFinished = function() -- Зачекай, а то мало ли там вообще не число введено if inputPower.text:match("%d+") then powerSignal = tonumber(inputPower.text) end end Второй вариант с автоматической валидацией: inputPower.validator = function() return inputPower.text:match("%d+") end -- При наличии validator этот метод выполнится только в случае успешной валидации текста inputPower.onInputFinished = function() powerSignal = tonumber(inputPower.text) end Ох, как сложно. Так, то что ты написал, это как я понял, проверка введённого текста, на то число ли это? Я не совсем понимаю что такое tonumber. Но опять же как я понял, это что вроде конвертера в число? И что такое validator, тоже хотелось бы узнать. Простите за такое большое кол-во вопросов, я новичок в это деле и вопросов тьма. Спасибо за помощь :3 Кусь Изменено 6 ноября, 2018 пользователем ZloyApelsihchik Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 6 ноября, 2018 2 часа назад, ZloyApelsihchik сказал: Я не совсем понимаю что такое tonumber. Но опять же как я понял, это что вроде конвертера в число? Дыа, так и есть. Я не понимаю, зачем ты, не изучив основ, лезешь в написание интерфейсного софта. Хоть потренькался бы чутка на хелловорлдах 2 часа назад, ZloyApelsihchik сказал: И что такое validator, тоже хотелось бы узнать. Вообще из коммента в коде выше все должно быть понятно, да и в документации эта инфа подробно разжевана. Захотел бы - узнал бы 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fronun 2 Опубликовано: 3 декабря, 2018 ECS, ну я тоже плохо знаю lua, и ниче пишу проги под твоей оболочки) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 3 декабря, 2018 @Fronun, мяу, однако ты ознакомлен с tonumber(), правда? Правда-правда? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fronun 2 Опубликовано: 4 декабря, 2018 к сожелению нит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 4 декабря, 2018 dafaq!1111 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SkinnerDE 0 Опубликовано: 3 января, 2019 (изменено) вопрос снят, сори Изменено 3 января, 2019 пользователем SkinnerDE Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fronun 2 Опубликовано: 5 января, 2019 03.01.2019 в 16:56, SkinnerDE сказал: вопрос снят, сори Надеюсь, ты конвертнул картинку.png в картинку.pic Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SkinnerDE 0 Опубликовано: 8 января, 2019 05.01.2019 в 13:12, Fronun сказал: Надеюсь, ты конвертнул картинку.png в картинку.pic Да, додумался все-таки)) Вот только прикрутить туда таймер не получается никак. Чтобы картинка менялась по таймеру Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 8 января, 2019 @SkinnerDE, юзай eventHandler для пикчи: -- Загружаем все пикчи из папки в единую таблицу local path = "/Pictures/" local currentPicture = 1 local pictures = {} for file in filesystem.list(path) do table.insert(pictures, image.load(path .. file)) end -- Добавляем объект изображения в контейнер или куда-то еще local GUIImage = application:addChild(GUI.image(1, 1, pictures[currentPicture])) -- Как часто пикча будет меняться local interval = 5 -- Время, когда условие ниже сработает в следующий раз local deadline = computer.uptime() + interval -- Обработчик событий вызывается каждый пуллящийся ивент (даже если его не было при нулевом интервале) kartinka.eventHandler = function(application, myImage) if computer.uptime() > deadline then -- Отображаем следующую пикчу currentPicture = currentPicture + 1 if currentPicture > #pictures then currentPicture = 1 end GUIImage.image = pictures[currentPicture] application:draw() -- Обновляем время следующего срабатывания условия deadline = computer.uptime() + interval end end -- Обязательно с ноликом, чтоб ивенты пуллились с минимальным интервалом application:start(0) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SkinnerDE 0 Опубликовано: 8 января, 2019 (изменено) Спасибо, вроде бы понятно (сам принцип), кроме того откуда эти имена и что туда поставить. kartinka - вроде контейнер, а myImage? Изменено 8 января, 2019 пользователем SkinnerDE Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 8 января, 2019 @SkinnerDE, пардон, я на ходу писал, myImage можно в расчет не брать. Главное принцип, дыа. MyImage в данном случае - это ссылка на объект изображения, передаваемая в обработчик событий для удобства, называть переменные можно как угодно. Для ясности код приведу: local function myEventHandler(application, objectPointer, e1, e2, e3, ...) -- Ох уж эти события end -- Переменная object и objectPointer из обработчика событий - это один тот же объект object.eventHandler = myEventHandler Аналогичный функционал, кстати, можно запилить и средствами event.timer, однако так куда проще, да и отменять таймеры впоследствии не придется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
antonn3312578859 2 Опубликовано: 25 марта, 2021 Жаль что больше не работает( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
AtomicScience 76 Опубликовано: 26 марта, 2021 20 часов назад, antonn3312578859 сказал: Жаль что больше не работает( Она прекрасно работает, просто теперь она переехала в MineOS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
antonn3312578859 2 Опубликовано: 27 марта, 2021 В 26.03.2021 в 18:39, AtomicScience сказал: Она прекрасно работает, просто теперь она переехала в MineOS ну да, но хотелось бы видеть её в OpenOS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Bs0Dd 206 Опубликовано: 27 марта, 2021 7 часов назад, antonn3312578859 сказал: ну да, но хотелось бы видеть её в OpenOS Никто не мешает портировать ее в OpenOS. Я так систему буферизации графики без проблем перенес с Майноськи, вот что вышло. Потому наверняка не проблема и сам GUI переделать под другую OS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kaka888 10 Опубликовано: 3 марта, 2022 В 27.03.2021 в 17:23, antonn3312578859 сказал: ну да, но хотелось бы видеть её в OpenOS Можешь юзать версию 2018 года, она лежит в репе ECS/GUI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kaka888 10 Опубликовано: 3 марта, 2022 (изменено) Люди, пацкажыте что за непонятный параметр true в вызове application:draw(true). Этот true передаётся во многих примерах в Wiki в репе ECS/GUI. И этот параметр никак не задокументирован, если я не слепой Изменено 3 марта, 2022 пользователем kaka888 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах