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

OpenGames 2

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

Привет! Последние 2 месяца я разрабатывал OE 2. Это проект очень схожий с Unity имея дочерний замысел с OpenGames где после изменения объекта не надо писать draw()...

Он еще не готов, я хотел релизнуть после того как я его доделаю, но случилось не предвиденное. Из AppMarket-a была удалена либа opengames, что напрямую убивает весь первый движок т.к. оно в зависимостях, и в зависимостях всех дочерних приложений. Мне удалять это было не зачем, да он был поломанный, там объект кнопки не работал. Но это как-то тупо сносить один элемент из 2-, не так-ли?

 

"Какая вообще разница?" Этот проект остался не доделанным, движок готов, установщик движка тоже. Не готов только редактор. Мне симпатизирует этот проект, но я прекращу (или сильно дестабилизирую) свою собственную поддержку данного проекта т.к. не исключаю случайное исчезновение моих продуктов в макрете.

 

Так-же одна из причин это полу-мёртвое комьюнити. За пол года существования первого OpenGames им увлёкся только один человек. И то всё его творчество (хоть и довольно спорное (вирусы(удаление одной папки\файла))) хоть и было довольно спорное, но было удалено самим им. А зачем удалять свой продукт?

Движок не нашел людей, а зачем разрабатывать предложение, если нету спроса.


Это репозиторий проекта, в нём есть подробная (имхо) вики которая поясняет как работать в движке из скрипта. Так-же есть 2 примера которые могут перекидываться сообщениями между друг-другом. Там целая куча файлов которая добавляет функций в движок с определённой задачей.

 

Цель этого поста: сказать что уже есть неплохие(имхо) наработки графического движка, если кто-то уже собрался что-то делать.

 

Скриншот первой программы для того что-бы разбавить текст:

Скрытый текст

image.thumb.png.cabaf52854f2e020c399f0fb56c4c0bc.png

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Oleshe сказал:

Цель этого поста: сказать что уже есть неплохие(имхо) наработки графического движка, если кто-то уже собрался что-то делать.

Тут есть смыл рассказать о возможностях этого движка, зачем он нужен, кому он может пригодиться, и как им пользоваться.

 

1 час назад, Oleshe сказал:

За пол года существования первого OpenGames им увлёкся только один человек.

Кстати, людей как раз и может привлечь хорошее описание. Какой бы хорошей ни была программа, пока ты о ней доходчиво не расскажешь, её даже скачивать, скорее всего, никто не будет. А убедить других программистов пользоваться своей библиотекой или движком будет ещё сложнее.

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


Ссылка на сообщение
Поделиться на других сайтах
18 часов назад, eu_tomat сказал:

Тут есть смыл рассказать о возможностях этого движка, зачем он нужен, кому он может пригодиться, и как им пользоваться.

А, да, извините.
Итак, для того что-бы им вообще можно было воспользоваться нужно загрузить 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 и я не очень разобрался...

Я не очень понимаю как находить сильные и слабые стороны в своём-же продукте...

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

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...