vlad1vv1
-
Публикации
16 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные пользователем vlad1vv1
-
-
Привет!
Вот библиотека, которую хочу подключить - menu.lua, Библиотека создающая список и стилизованный курсор для выбора
https://pastebin.com/QpuAT94s
Файл который подключает библиотеку и исполняет программу:
menu=require ("menu") t = {"page1", "page1", "page3", "page4", "page5"} menu.CreateMenu(t, " => "," ", 3, 3)При запуске этого файла выдает ошибку
/home/m_file.lua:5: atempt to index global 'menu' (a nil value):stack traceback:
-
Оп!
Оп! Спасибо! Но я хотел c попроще фронт эндом. А вообще я задумал типа help через очки. Пишешь прогу, а в HUD описание какое-нибудь. Поэтому это слишком круто для очков. Я думал по кнопочкам или клавишами текст перелистывать.Возьми GUI, меньше геморроя будет. Там тебе и примеры, и картиночки, и вообще до мелочей все расписано:
https://github.com/IgorTimofeev/OpenComputers/blob/master/Documentation/GUI.md
А для создания вертикального меню из кнопок воспользуйся одним из примеров в доке:
...
-
Привет! Поясните как должен выглядеть вызов функции по кнопке.
Так
Form:addButton(20,5,"Open file",function() Моя функция() end)
или так?
Form:addButton(20,5,"Open file", Моя функция())
-
Можно ли сделать вертикальное меню из этих кнопок? Покажите пример пожалуйста. Ну и при нажатии, что-бы что то происходило, например открывало текстовый файл.
P.S. Непонятно, как задать действие на кнопку или в Selector. -
Если вы все же поставите AE2, уберите пожалуйста облицовку на проводники, её там +100500 получается и нагружает клиент. В конфиге это есть.
-
Интересно было бы добавить на сервер тему RF-энергии, и необязательно связватьcя с термал экспаншн. Хотя библиотеку GoFH придется ставить. Я бы рекомендовал Immersiv Ingeneering + NuclearCraft, получится поэтапное развитие от колеса до реактора.
А так хорошо бы добавить еще и провода из ProjectRed. Open Computers + цветные провода = высший класс.
P.S. Red Logic 1.7.10 - на таймерном гейте(может не на нем, на каком-то) крашит сервер. И вообще на нем fps садится, я бы не рекомендовал. Лучше уж добавить гейты из ProjectRed Integration.
Понаписал я тут чего-то. Надо это? Уходим тихо, если что мы геологи. Ай... кирка на ногу упала))
-
Я б советовал сразу отсюда юзать: https://github.com/ben-mkiv/OCGlasses — там сложнее, но есть вика внятная....
--------------- --------------- ----------------- ------------- -------------------- --------------- ------------------ ------------------- ------------------
...Сам пример я дать не могу, ибо тестить негде. Вот ссылки:
- Рисование моделек OBJ.
- Ещё мы юзали эти очки в сервере UT#2, можешь посмотреть на файлики.
Ок. Посмотрю.
-
Недавно вышел релиз мода OpenGlasses на версию 1.12.2.
https://minecraft.curseforge.com/projects/openglasses
Для чего он нужен до конца не понятно. Но вещь нравится. Как им пользоваться? Есть конечно wiki, но не ясно, что как это все визуализировать. Чем отличается виджеты World Located от Overlay Located? Можно ли визуализировать терминал, что бы с планшетом не бегать, или например выводить результат проги в виджет? Или сколько осталось энергии у робота?
Если можно запилите несколько строк кода, на примере, что было более понятно с практической стороны.
Wiki мода http://minecraft.bymarcin.com/OpenGlasses/doku.php?id=start
На вики дан принцип построения сферы в очках. Но это не совсем то. -
В указанном примере робот проверяет отсутствие редстоун-сигнала, а затем, убедившись в этом, входит в бесконечный цикл на 26 строке. Чем больше циклов - тем больше жепы, все это дело можно заменить упрощенным вариантом:
while true do if rs.getInput(sides.right) == 0 then print("Программа работает") robot.forward() os.sleep(1) robot.back() os.sleep(1) else print("Программа остановлена") break end endЭто решается созданием виртуальной системы координат и нескольких функций, изменяющих значение x/y/z робота при его перемещении, учитывая поворот. Сдвинулся вперед? Прибавь единичку. Уровень заряда маловат? Вычисляй оптимальную траекторию для возвращения на базу, сохраняй текущие координаты, возвращайся и заряжайся, а затем уже иди обратно и продолжай работу. Нечто подобное я писал давненько, если интересно - можешь ознакомиться: https://github.com/IgorTimofeev/OpenComputers/blob/master/Applications/Robot/robotAPI.lua"Чем больше циклов - тем больше жепы" - Да именно так и получается). Вообщем пришел я к такому выводу что вот этот вариант оптимальный: "Просто вставляешь вызов функции в основной цикл которая занимается возвратом"
И получается пример общий для робота, который работает. Основная программа делается в бесконечным цикле, а переходы осуществляются между функциями с конечным циклом. Так у меня все заработало.
===================================== = Программа перехода от действия = = к действию для робота = ===================================== -- подключение API -- подключение компонентов -- объявление переменных function Line_1() - например сажаем пшеницу for i = 1, 10 do - цикл обязательно должен быть конечным --- тело цикла end end или function Line_2() -- собираем пшеницу repeat -- также цикл должен быть конечным i = i + 1 --- --- блок команд until - проверка на не только <,>,==, >=, но и на true и false end -- Далее, что бы все делалось автоматически (основная программа) while true do Line_1() if условие then Line_2() - инструкции могут быть как с условием, так и просто последовательные. end end
-
Вообщем пока я разбирался, стало ясно, робот не реагирует на ивенты мыши вообще, так устанавливается только монитор 1-го уровня.
Пока в цикле while true do выполняется движение робота, нельзя прервать ни ивентом любым, ни красным камнем. Пока цикл не начался, реагирует на все вообщем кроме мыши. На компьютере все ивенты работают для выхода из цикла. Т.е. для робота должна быть одна единая программа, если хочешь изменить алгоритм, останавливаешь одну программу, запускаешь другую. Кстати с тредами у меня получилось, задать поочередно движения робота, по оси Х отдельно, по оси Y отдельно. Получилось что-то вроде принтера.(Вперед-назад - один тред , шаг по оси Y другой тред.)
Подскажите в чем я ошибся в своих измышизмах? Мне надо что бы, например, если закончилась зарядка, робот прервал цикл, затем поехал заряжаться, после зарядки возобновил основной цикл.
--------------------------------------- -- Opencomputers -- --------------------------------------- -- Останов робота по красному камню -- -- не работает -- --------------------------------------- local robot = require("robot") local component=require("component") local sides=require("sides") local rs=component.redstone local c = true while c do print("Программа работает") local b = rs.getInput(sides.right) if b > 0 then print("Программа остановлена") -- do return end c = false end if b == 0 then while true do robot.forward() os.sleep(1) robot.forward() os.sleep(1) robot.back() os.sleep(1) robot.back() os.sleep(1) end end end -
Заданный в ОП вопрос действительно интересен, поэтому я отвечу на него.
term.read, io.read, io.stdin:read — вот вся эта дружная команда не исполняется параллельно — понятно почему, я думаю. А если нужно?
Значит, или ввод, или выполнение действий таки надо заставить работать параллельно. Если два сделать, то получим демон, который захватит ввод, что достаточно глупо. Потому и варианта 2...
....Треды в этом плане лучше гораздо. В них можно даже регистрировать слушателей, и они автоматически подчистятся с выходом из программы, в том числе и при ошибке.
Спасибо. Буду пробовать. Как что получится отпишусь.
-
@@vlad1vv1 много способов есть. Нужно просто в твоем том главном цикле что-то проверять, или параллельно ловить какие-то ивенты.
Не думаю, что тебе будет удобно бежать за движущимся по змейке роботом, который что-то собирает, и тыкать в его гуи и что-то там судорожно нажимать Ctrl+Alt+C, чтобы его стопнуть. Нужно или сетевое управление параллельное, или например ставить несколько точек с редстоуном (блок какой-то и рычаг ванильный) на местности его деятельности или парковки.
Робот едет себе по огороду и проверяет под брюхом в цикле на кажлом шаге наличие редсигнала. Как только увидел его, завис(слип) на 15 секунд, если сигнал есть, продолжил висеть 15 сек. Пересадил, что-то поменял на огороде, опустил рычаг, и робот дальше поехал. То есть типа питстопчик такой себе временный, и прочее прочее. Способов миллион. Что именно будет удобно тебе, не до конца понятно в теме, и как именно и для чего ты хочешь останавливать робота и зачем это нужно.
Спасибо за инфу. Я просто бывший преподаватель и действительно не хочется бегать за роботом, и сделать хочу разжевано, что бы кому-нибудь потом показать, которые вообще нубятина)) А так да, смысл, либо остановить его, либо по горячему может изменить алгоритм действий не меняя программу. А так вот снимать его киркой для остановки, потом устанавливать, запускать прогу... это не то. На реальном конвейере вы же не будете снимать робота, что бы у него поменять прогу, молотом например))
-
ничего еще не написано толком) нормальную агропрогу я только припоминаю, это сборщик резины с поиском пути по потекам гевеи, от vx13.
Вон Рид покопался в анналах форума, чтобы найти даже проги огородников в парничок улья - сказал что одни костыли и ничего путного и надежно и правильно работающего нет пока.
Тут вопрос в другом немного. Ну напишешь ты параллельный обработчик внешних ивентов роботу как-то, по вайфайке например, что он может в любой момент стопнуться по команде сетевой на полпути, копая свой огород. Но что это даст топикстартеру в плане опыта? ты посмотри на прогу в шапке. что тут можно обсуждать? Какие еще интерупты? Тут до них еще как до марса)
Я не писал особо сложного, например, понимая принципы и используя копипаст, такие чудеса получаются, поэтому я не стал этого делать и мне просто хотелось понять суть. Конечно я понял про ивенты, это отслеживание событий по которым(ому) из них может быть выполнена команда, потому что я не совсем новичок. event.push('interrupt') - про это еще не прочитал. Так вот задача какая, что бы помимо работающей проги, был активным ввод, куда можно ввести команду. И да в этот момент можно стопнуться, потому что будет прерывание цикла, ну что, ничего страшного.
P.S. Midnight Ccommander же не стопается, когда у него активный ввод, да?
Для чего это надо? Да просто так. Мозги расшевелить по lua, а с майном интереснее. У меня и сервера свои были и сейчас могу поднять. Средств не хватает. Мало того, действительно много здесь костылей)).
За что большое спасибо програмерам. Но все таки хочется что бы прога работала красиво, не только print("initialization..."). Кстати, прога, что предложенная работает на все 100, кроме ивентов конечно. Думаю у вас не так много новичков, которые пишут бесконечные цикл в цикле с условиями, которые корректно закачиваются. Если у вас есть возможность, еще что-то предложить буду только благодарен.
-
Ctrl+ALt+C обычно помогает.
Это не комильфо)), интересно программно остановить. И у меня чет не работает Ctrl+ALt+C, когда робот двигается .
-
1
-
-
Значит смысл темы такой: робот выполняет какую то программу, например фермы. Как прервать выполнение программы, не выключая робота(или компьютера), клавишей или вводом команды. Я хотел сделать с активной командной строкой, что бы ввести команду stop. Но что то не дошариваю, новичок я вообщем. Пробовал через term.read, прога вообще отказывается работать, вообщем запрос на ввод не получается. Где посмотреть, или поможете дописать?
https://pastebin.com/YmE4K22u
local robot = require("robot") while true do print("Введите [go] или [stop]") local a = io.read() if a == 'stop' then print("Программа остановлена") do return end else while true do if a == 'go' then robot.forward() robot.turnLeft() else print("Введите задачу") do return end end end end end

Как подключить код библиотеки?
в Разные (отсортировать)
Опубликовано: · Изменено пользователем vlad1vv1
Все, так и получилось. Большое спасибо.