ECS Автор темы 1 905 Опубликовано: 4 марта, 2022 Этот параметр сообщает экранному буферу, что нужно отобразить не только изменившиеся с последней отрисовки пиксели, а вообще все сразу. Обычно эта необходимость возникает при запуске скриптов, работающих с GPU напрямую в обход концепции экранного буфера. То есть в случае майноси практически никогда. Разве что для каких-нибудь старых игр или скринсейверов фича может быть востребованной... В доке по workspace он указан, хотя и без пояснений. Могу добавить инфу на всякий, если нужно: 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kaka888 10 Опубликовано: 5 марта, 2022 В 04.03.2022 в 10:34, ECS сказал: Этот параметр сообщает экранному буферу, что нужно отобразить не только изменившиеся с последней отрисовки пиксели, а вообще все сразу. Обычно эта необходимость возникает при запуске скриптов, работающих с GPU напрямую в обход концепции экранного буфера. То есть в случае майноси практически никогда. Разве что для каких-нибудь старых игр или скринсейверов фича может быть востребованной... В доке по workspace он указан, хотя и без пояснений. Могу добавить инфу на всякий, если нужно: Теперь всё стало ясно, спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kaka888 10 Опубликовано: 7 марта, 2022 Наткнулся на печальные баги При добавлении строки меню (GUI.menu) в titledWindow окно превращается в обычный GUI.window, то есть исчезает вся шапка окна (заголовок окна, фон и три кнопки close, maximize...). Таким же образом добавил менюшку в tabbedWindow - эффект похожий (тёмно-серая шапка с кнопками и вкладками обрезается на треть). В обоих случаях меню, конечно, рисуется, но мне и шапка окна нужна. Что же делать? Вот скрины: https://imgur.com/a/8kFBjXq Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 7 марта, 2022 22 часа назад, kaka888 сказал: Наткнулся на печальные баги Печальные баги - это, видимо, GUI.menu(1, 1, ...) вместо GUI.menu(1, 2, ...)? Ты же сам расположил менюху на Y = 1, где уже чиллит титловая строка. Разумеется, менюха ее перекрыла На всякий случай уточню, что гуйка работает с заранее известными координатами и размерами всех объектов, ничего не рассчитывая автоматически без ведома кодера - это не WPF/UWP с адаптивной версткой, т.к. ресурсы компов люто лимитированы. Исключения, конечно, есть в виде всяких GUI.layout или GUI.table, но это капля в море. Поэтому любая смена позиции или ресайз виджетов требует ручной обработки А, и еще кое-что: GUI.titledWindow / tabbedWindow и иже с ними - просто шаблоны, которые создаются буквально в 10 строчек кода на основе базового объекта окна GUI.window, но с учётом твоих личных нужд. В них попросту заранее выставлены нужные координаты и подогнаны размеры, ничего более 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kaka888 10 Опубликовано: 7 марта, 2022 35 минут назад, ECS сказал: Печальные баги - это, видимо, GUI.menu(1, 2, ...) вместо GUI.menu(1, 1, ...)? Ты же сам расположил менюху на Y = 1, где уже чиллит титловая строка. Разумеется, менюха ее перекрыла На всякий случай уточню, что гуйка работает с заранее известными координатами и размерами всех объектов, ничего не рассчитывая автоматически без ведома кодера - это не WPF/UWP с адаптивной версткой, т.к. ресурсы компов люто лимитированы. Исключения, конечно, есть в виде всяких GUI.layout или GUI.table, но это капля в море. Поэтому любая смена позиции или ресайз виджетов требует ручной обработки А, и еще кое-что: GUI.titledWindow / tabbedWindow и иже с ними - просто шаблоны, которые создаются буквально в 10 строчек кода на основе базового объекта окна GUI.window, но с учётом твоих личных нужд. В них попросту заранее выставлены нужные координаты и подогнаны размеры, ничего более Какое облегчение, я уж думал версия для OpenOS настолько несовершенна :DD Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Teen_Romance 4 Опубликовано: 15 мая, 2022 (изменено) Мне нужно нарисовать текст(не статический) размером 1\3 высоты экрана. Как бы это лучше всего реализовать? Есть идея построчно рисовать ASCII символами, но решил спросить тут. Должны быть варианты получше. Изменено 15 мая, 2022 пользователем Teen_Romance Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 15 мая, 2022 57 минут назад, Teen_Romance сказал: Мне нужно нарисовать текст размером 1\3 высоты экрана. Как бы это лучше всего реализовать? Есть идея построчно рисовать ASCI символами, но решил спросить тут. Должны быть варианты получше. local event = require("event") local unicode = require("unicode") local component = require("component") local screen = component.screen local gpu = component.gpu -- Отображаемый текст local text = "Hehe u cute" -- Разрешение по высоте, на основе которого будет подобрана "идеальная" ширина -- Т.к. строка всего одна, она как раз займет 1/3 высоты экрана local height = 3 -- Получаем компоновку мульти-блочного экрана и его пиксельную пропорцию -- Инфа по формуле, если интересно: https://computercraft.ru/topic/2413-kak-ubrat-chyornye-polosy-po-krayam-ekrana-opencomputers/ local aspectWidth, aspectHeight = screen.getAspectRatio() local proportion = 2 * (16 * aspectWidth - 4.5) / (16 * aspectHeight - 4.5) -- Рассчитываем разрешение по ширине на основе высоты и пропорции local width = math.floor(height * proportion) -- Чистим экран gpu.setResolution(width, height) gpu.setBackground(0x220000) gpu.setForeground(0xFFFFFF) gpu.fill(1, 1, width, height, " ") -- Рисуем текст по центру gpu.set(math.ceil(width / 2 - unicode.len(text) / 2), math.ceil(height / 2), text) -- Ждем интерактива от юзера while event.pull() ~= "touch" do end 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Teen_Romance 4 Опубликовано: 15 мая, 2022 (изменено) @ECS спасибо за ответ. My bad я не до конца написал что хочу. Большой текст должен находиться на одном экране с текстом поменьше. В центре что то вроде счетчика и сбоку кнопочки и обычный текст. https://prnt.sc/-4Lfi8jY5bSP Изменено 15 мая, 2022 пользователем Teen_Romance Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 15 мая, 2022 14 минуты назад, Teen_Romance сказал: @ECS спасибо за ответ. My bad я не до конца написал что хочу. Большой текст должен находиться на одном экране с текстом поменьше. В центре что то вроде счетчика и сбоку кнопочки и обычный текст. https://prnt.sc/-4Lfi8jY5bSP Зараза! Ну, тогда только ручная растеризация символов, да. Я от недалекого ума эту фичу напрямую через двумерные таблички реализовал. Может, у тебя получится более грамотное решение https://github.com/IgorTimofeev/MineOS/blob/master/Libraries/BigLetters.lua 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zigo 0 Опубликовано: 12 февраля, 2024 Приветствую @ECS , похоже что пастбин забанил Ваш установщик библиотек. Мне был необходим GUI для пары экспериментов, но похоже что простого способа его установки сейчас нет? Pastebin.com - Not Found (#404) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Bumer_32 37 Опубликовано: 12 февраля, 2024 17 часов назад, Zigo сказал: Приветствую @ECS , похоже что пастбин забанил Ваш установщик библиотек. Мне был необходим GUI для пары экспериментов, но похоже что простого способа его установки сейчас нет? Pastebin.com - Not Found (#404) вродеб всём что осталось только тут: https://github.com/IgorTimofeev/GUI Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zigo 0 Опубликовано: 12 февраля, 2024 5 часов назад, Bumer_32 сказал: вродеб всём что осталось только тут: https://github.com/IgorTimofeev/GUI Я брал с текущей разработки, не со старых ресурсов. Буквально по той же самой ссылке которой посвящена данная тема GUI/README.md at 0fadb161469d404d477dd9babfdc9a5aa42ff203 · IgorTimofeev/GUI · GitHub пастбинский инстайлер, ставящий все зависимости вместе с самой библиотекой, недоступен. а поскольку я тут делаю очередной интерфейс взаимодействующий с апплайтом и мне требуется поставить несколько разных систем, мне необходим простой способ установки gui, со всеми зависимостями сразу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 905 Опубликовано: 13 февраля, 2024 В 12.02.2024 в 04:07, Zigo сказал: похоже что пастбин забанил Ваш установщик библиотек Да, пару лет назад снесли аккаунт. Исходников инсталлера нет, библиотека забыта, саппорта не будет, репозиторий в архиве, писать заново лень. Так что придётся самому 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Teen_Romance 4 Опубликовано: 8 ноября, 2024 (изменено) А как сейчас этой либой и смежными ей можно воспользоваться без установки MineOs? Попросил чатик, он мне написал простенький скрипт чтобы скачать все файлы на комп: Чета типо этого Скрытый текст local internet = require("internet") local filesystem = require("filesystem") -- Базовый URL репозитория local baseURL = "https://raw.githubusercontent.com/IgorTimofeev/MineOS/master/Libraries/" -- Список файлов для загрузки local files = { "Base64.lua", "BigLetters.lua", "Bit32.lua", "Color.lua", "Component.lua", "Compressor.lua", "Event.lua", "Filesystem.lua", "GUI.lua", "Image.lua", "Internet.lua", "JSON.lua", "Keyboard.lua", "Network.lua", "Number.lua", "Paths.lua", "SHA-256.lua", "Screen.lua", "Sides.lua", "System.lua", "Text.lua", "Vector.lua", "XML.lua" } -- Целевая директория для сохранения библиотек local targetDir = "/lib/" -- Функция для загрузки файла local function downloadFile(url, path) local handle, err = internet.request(url) if not handle then io.stderr:write("Ошибка подключения: " .. (err or "неизвестная ошибка") .. "\n") return false end local file, err = io.open(path, "wb") if not file then io.stderr:write("Ошибка создания файла: " .. (err or "неизвестная ошибка") .. "\n") return false end for chunk in handle do file:write(chunk) end file:close() return true end -- Создание целевой директории, если она не существует if not filesystem.isDirectory(targetDir) then filesystem.makeDirectory(targetDir) end -- Загрузка файлов for _, file in ipairs(files) do local url = baseURL .. file local path = targetDir .. file print("Загрузка " .. file .. " из " .. url) if downloadFile(url, path) then print("Файл успешно сохранён: " .. path) else print("Не удалось загрузить: " .. file) end end print("Загрузка завершена. Библиотеки сохранены в " .. targetDir) После установки я попробовал запустить простенькую программу: Скрытый текст local component = require("component") local event = require("event") local gpu = component.gpu local GUI = require("GUI") -- Создаем графическое окно local workspace = GUI.workspace() -- Создаем главный контейнер local mainContainer = workspace:addChild(GUI.container(1, 1, gpu.getResolution())) -- Заголовок mainContainer:addChild(GUI.label(1, 1, mainContainer.width, 3, 0xFFFFFF, "Простой Калькулятор")) :setAlignment(GUI.ALIGNMENT_HORIZONTAL_CENTER, GUI.ALIGNMENT_VERTICAL_TOP) -- Поля для ввода чисел local input1 = mainContainer:addChild(GUI.input(10, 5, 20, 3, 0xFFFFFF, 0x000000, 0xAAAAAA, 0xFFFFFF, 0x000000, "", "Число 1")) local input2 = mainContainer:addChild(GUI.input(10, 9, 20, 3, 0xFFFFFF, 0x000000, 0xAAAAAA, 0xFFFFFF, 0x000000, "", "Число 2")) -- Место для результата local resultLabel = mainContainer:addChild(GUI.label(10, 13, 30, 3, 0xFFFFFF, "Результат: -")) -- Кнопка для выполнения сложения local addButton = mainContainer:addChild(GUI.button(10, 15, 20, 3, 0xAAAAAA, 0x000000, 0x888888, 0xFFFFFF, "Сложить")) -- Обработчик события для кнопки addButton.onTouch = function() local number1 = tonumber(input1.text) local number2 = tonumber(input2.text) if number1 and number2 then resultLabel.text = "Результат: " .. (number1 + number2) else resultLabel.text = "Ошибка ввода!" end end -- Запуск программы workspace:draw() workspace:start() И при запуске у меня все время какие то ошибки в либах этих выскакивают: /lib/Event.lua: attempt to index a nil value (global 'computer') фиксишь его - потом еще в filesystem component nil, потом filesystem мне комп ломает почему то тем что из за ошибок я файлы редактировать не могу. Я не верю что на гите код какой то кривой лежит, но где меня чатик обманул? upd: я так понял не получится ничего потому что Изменено 8 ноября, 2024 пользователем Teen_Romance Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kaka888 10 Опубликовано: 1 декабря, 2024 (изменено) В 08.11.2024 в 22:49, Teen_Romance сказал: А как сейчас этой либой и смежными ей можно воспользоваться без установки MineOs? Попросил чатик, он мне написал простенький скрипт чтобы скачать все файлы на комп: Чета типо этого Показать содержимое local internet = require("internet") local filesystem = require("filesystem") -- Базовый URL репозитория local baseURL = "https://raw.githubusercontent.com/IgorTimofeev/MineOS/master/Libraries/" -- Список файлов для загрузки local files = { "Base64.lua", "BigLetters.lua", "Bit32.lua", "Color.lua", "Component.lua", "Compressor.lua", "Event.lua", "Filesystem.lua", "GUI.lua", "Image.lua", "Internet.lua", "JSON.lua", "Keyboard.lua", "Network.lua", "Number.lua", "Paths.lua", "SHA-256.lua", "Screen.lua", "Sides.lua", "System.lua", "Text.lua", "Vector.lua", "XML.lua" } -- Целевая директория для сохранения библиотек local targetDir = "/lib/" -- Функция для загрузки файла local function downloadFile(url, path) local handle, err = internet.request(url) if not handle then io.stderr:write("Ошибка подключения: " .. (err or "неизвестная ошибка") .. "\n") return false end local file, err = io.open(path, "wb") if not file then io.stderr:write("Ошибка создания файла: " .. (err or "неизвестная ошибка") .. "\n") return false end for chunk in handle do file:write(chunk) end file:close() return true end -- Создание целевой директории, если она не существует if not filesystem.isDirectory(targetDir) then filesystem.makeDirectory(targetDir) end -- Загрузка файлов for _, file in ipairs(files) do local url = baseURL .. file local path = targetDir .. file print("Загрузка " .. file .. " из " .. url) if downloadFile(url, path) then print("Файл успешно сохранён: " .. path) else print("Не удалось загрузить: " .. file) end end print("Загрузка завершена. Библиотеки сохранены в " .. targetDir) После установки я попробовал запустить простенькую программу: Показать содержимое local component = require("component") local event = require("event") local gpu = component.gpu local GUI = require("GUI") -- Создаем графическое окно local workspace = GUI.workspace() -- Создаем главный контейнер local mainContainer = workspace:addChild(GUI.container(1, 1, gpu.getResolution())) -- Заголовок mainContainer:addChild(GUI.label(1, 1, mainContainer.width, 3, 0xFFFFFF, "Простой Калькулятор")) :setAlignment(GUI.ALIGNMENT_HORIZONTAL_CENTER, GUI.ALIGNMENT_VERTICAL_TOP) -- Поля для ввода чисел local input1 = mainContainer:addChild(GUI.input(10, 5, 20, 3, 0xFFFFFF, 0x000000, 0xAAAAAA, 0xFFFFFF, 0x000000, "", "Число 1")) local input2 = mainContainer:addChild(GUI.input(10, 9, 20, 3, 0xFFFFFF, 0x000000, 0xAAAAAA, 0xFFFFFF, 0x000000, "", "Число 2")) -- Место для результата local resultLabel = mainContainer:addChild(GUI.label(10, 13, 30, 3, 0xFFFFFF, "Результат: -")) -- Кнопка для выполнения сложения local addButton = mainContainer:addChild(GUI.button(10, 15, 20, 3, 0xAAAAAA, 0x000000, 0x888888, 0xFFFFFF, "Сложить")) -- Обработчик события для кнопки addButton.onTouch = function() local number1 = tonumber(input1.text) local number2 = tonumber(input2.text) if number1 and number2 then resultLabel.text = "Результат: " .. (number1 + number2) else resultLabel.text = "Ошибка ввода!" end end -- Запуск программы workspace:draw() workspace:start() И при запуске у меня все время какие то ошибки в либах этих выскакивают: /lib/Event.lua: attempt to index a nil value (global 'computer') фиксишь его - потом еще в filesystem component nil, потом filesystem мне комп ломает почему то тем что из за ошибок я файлы редактировать не могу. Я не верю что на гите код какой то кривой лежит, но где меня чатик обманул? upd: я так понял не получится ничего потому что Так в этой же теме ECS дал ссылку на корректную либу GUI.lua для OpenOS... Вот доки (там же отроешь и исходники): https://github.com/IgorTimofeev/GUI/blob/0fadb161469d404d477dd9babfdc9a5aa42ff203/README.md Изменено 1 декабря, 2024 пользователем kaka888 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах