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

Лидеры


Популярный контент

Показан контент с высокой репутацией 01.10.2023 во всех областях

  1. 1 балл
    А, да, извините. Итак, для того что-бы им вообще можно было воспользоваться нужно загрузить Main.lua как библиотеку. Это делается примерно так: local OE = loadfile("/OpenGames 2/Main.lua")() Поскольку он "модульный" можно менять расположение главной папки. Оно будет записано в System.getUserSettings.OpenGames2EnginePath (Если вы устанавливали с установщика). Сделаем для примера радужный квадрат который по клику переместиться к курсору. Создадим наш квадрат, это панель. Существует множество разных объектов которые подвластны нам, такие как ComboBox, Button, Input, Switch и т.д. local obj = OE.createObject() -- Создаём объект которые сам добавляется в сцену. obj:setRenderMode(OE.Render.renderTypes.PANEL) -- Рендерить как панель. local matID = obj:addComponent(OE.Component.componentTypes.MATERIAL) -- Что-бы у нашего квадрата был цвет obj.Transform.Scale.Width = 10 -- Размер длинны obj.Transform.Scale.Height = 5 -- Размер высоты, в два раза меньше длинны После сделаем окно и покажем пользователю: OE.Project.Window.Color = 0x505050 OE.Project.Window.Width = 160 OE.Project.Window.Height = 50 OE.Project.Window.Title = "Это куб" OE.initWindow() -- Принять нынешние значения и пересоздать окно с ними Создадим файл для нашего скрипта и добавим его к нашему объекту: local function update(...) local args = {...} args[1].Components[matID].Color.First = math.random(0x0,0xFFFFFF) -- Именение цвета. Поскольку update вызываеться asap оно бует менять его довольно выстро. Что нам вроде-бы и надо. if args[2].lastEvent[1] == "drag" or args[2].lastEvent[1] == "drop" or args[2].lastEvent[1] == "touch" then -- lastEvent это буквально последнее событие args[1].Transform.Position.x = args[2].lastEvent[3]-math.ceil(args[1].Transform.Scale.Width/2)-args[2].Render.Window.x -- args[1] Это объект от имени которого запустился скрипт. args[2] это OE для вызываемых скриптов. То-есть мы находим середину для x относительно того куда мы кликнули, .. args[1].Transform.Position.y = args[2].lastEvent[4]-math.ceil(args[1].Transform.Scale.Height/2)-args[2].Render.Window.y -- .. как и для y end end OE.Storage.createFile(OE.CurrentScene.Storage,'Script.lua',{Update=update}) obj.Components[obj:addComponent(OE.Component.componentTypes.SCRIPT)].file = "Script.lua" -- addComponent вернёт номер компонента в obj.Components, а мы его сразу подхватываем и изменяем значение file для скриптa на наш файл. Оно найдёт его везде, в файлах сцены или файлах проекта. OE.Script.Reload() -- Перезагружаем все наши скрипты добовляя наш. Добавим нашу милашку к рендеру и готово obj:addToRender() Итог: local OE = loadfile("/OpenGames 2/Main.lua")() local obj = OE.createObject() obj:setRenderMode(OE.Render.renderTypes.PANEL) local matID = obj:addComponent(OE.Component.componentTypes.MATERIAL) obj.Transform.Scale.Width = 10 obj.Transform.Scale.Height = 5 OE.Project.Window.Color = 0x505050 OE.Project.Window.Width = 160 OE.Project.Window.Height = 50 OE.Project.Window.Title = "Это куб" OE.initWindow() local function update(...) local args = {...} args[1].Components[matID].Color.First = math.random(0x0,0xFFFFFF) if args[2].lastEvent[1] == "drag" or args[2].lastEvent[1] == "drop" or args[2].lastEvent[1] == "touch" then args[1].Transform.Position.x = args[2].lastEvent[3]-math.ceil(args[1].Transform.Scale.Width/2)-args[2].Render.Window.x args[1].Transform.Position.y = args[2].lastEvent[4]-math.ceil(args[1].Transform.Scale.Height/2)-args[2].Render.Window.y end end OE.Storage.createFile(OE.CurrentScene.Storage,'Script.lua',{Update=update}) obj.Components[obj:addComponent(OE.Component.componentTypes.SCRIPT)].file = "Script.lua" OE.Script.Reload() obj:addToRender() Теперь давайте сделаем тоже самое в сырую... Итог: local GUI = require("GUI") local System = require('System') local wk,win = System.addWindow(GUI.titledWindow(1,1,160,50,'Это куб',true)) win.backgroundPanel.colors.background = 0x505050 win.titlePanel.colors.background = 0x505050 local panel = win:addChild(GUI.panel(1,1,10,5,0x0)) wk.eventHandler = function(_,_,...) local args = {...} panel.colors.background = math.random(0,0xFFFFFF) if args[1] == 'touch' or args[1] == 'drop' or args[1] == 'drag' then panel.localX = args[3]-math.ceil(panel.width/2)-win.localX panel.localY = args[4]-math.ceil(panel.height/2)-win.localY end end win:draw() По символам он меньше. В обоих OE есть редактор в котором можно наглядно отредактировать расположение объектов, а в сыром запускай кучу раз. Минусы и плюсы использование движка: + Просто для освоения + Наглядно - Грамоздко (большие файлы) - События медленные (Разница между сырым и движком видна, причём очень сильно. Не знаю с чем это связано.) Можно еще сравнить Unity и какой ни-будь pygame. Разница размера файлов колоссальная, но большинство используют юнити т.к. в pygame и я не очень разобрался... Я не очень понимаю как находить сильные и слабые стороны в своём-же продукте...
  2. 1 балл
    Я тоже такую оболочку делал, но идея себя быстро исчерпала.
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...