GLang - междвижковывй скриптовой язык
| |
andarky | Дата: Вторник, 29 Января 2013, 10:35 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| GameLanguage (GLang) ... с названием пока не придумал инетересного. Идея давно появилась. Были попытки что-то подобное сделать на Delphi: ASbes - интерпретатор языка QBasic для ускорения работы с DephiX (движок для Delphi на Directx7) У меня тогда было около 20 команд типа PRINT "",x,y PIXEL color,x,y DRAW color,x1,y,x2,y2 ну и т.п.
Как реализовать конструкции FOR и IF-THEN-ELSE я не смог только GOTO... забил я потом на всё это и на Delphi вцелом увлекся FLASH и потом даже нашел флешовый интерпретатор Паскаля!
И еще позже - уже где-то года 3 назад я познакомился с Blitz3D и тут возникла мысль: как-бы сделать что-то объединяющее Blitz3d и Flash...
Но еще больше я загорелся идеей когда начал осваивать Unity3d там очень простой JScript я быстро разобрался и загорелся идеей создать на Unity среду разработки для Blitz3D (хотя сейчас идея кажется смешной) и еще забыл упомянуть ZGameEditor! - для создание мини-мини-3Dприложений...
Вот и до сих пор живу с идеей придумать такой общий язык построения игрового мира и логики а потом уже на каждом движке написать интерпретаторы для него. Т.е. получается надо будет написать интерпретаторы для: ActionScript Blitz3D JScript (Unity3d) ZGameEditor
либо только для ActionScript а для остальных сделать DLLку (но я C++ незнаю и C# тоже)
Что я могу: Создавать/Удалять объекты, Читать/Сохранять файлы (текстовые)
Чего я не понимаю: как реализовать IF-ELSE CASE LOOP UNTIL FOR (range)
и как например писать функции (процедуры) и назначать их созданным объектам.... - хотя, понимаю что это наверное очень сложно и я до этого не дойду.
Мне бы хотя бы понять как работают простые ИФы и ФОРы
Моя страничка по дизайну GameDev//Design//3D Ютубчик
|
|
| |
daun | Дата: Вторник, 29 Января 2013, 13:55 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| Цитата (andarky) Т.е. получается надо будет написать интерпретаторы для: ActionScript Blitz3D JScript (Unity3d) ZGameEditor
Чо курим?
Щас буду умничать, но знаю не все, делаю так: ........................ Что необходимый минимум это: переменные, условия, циклы, подпрограммы, уже знаем, хорошо.
Дальше точная наука, ошибка в байт убьет все, вот отсюда жуткая морока.
Что такое адресация, надеюсь тоже знаем, потому что необходима память с точной адресацией, типа массив, для хранения (и не только команд).
Необходим механизм считывания команды из памяти для выполнения, типа каретка способная ездить и прыгать туды-сюды куды скажут команды управления кареткой, (есть такие, и это не goto). Точнее забыли все команды верхнего уровня, они для удобства прогера и только.
Каретка должна точно знать длину команды, размещенной в памяти, для перехода к следующей, после выполнения оной. Переменная типа string может иметь длину в пару гигов, каретка должна уметь считывать длину из команды (точно указанной в команде string, для скорости), для перехода. Ее не волнует содержание переменной, это дело функций выполнения команд (вызываются по указателю и инициированы заранее).
var x:byte=45; номер команды: нет размер: 1 байт (для 45) область переменных, каретка с этим не сталкивается. Может находится и в области команд, иметь номер, игнорироваться, или изменяться динамически в другую команду у киборгов второго поколения (: В общем зависит от глобальности переменных.
x:=x+10; номер: 1 размер: 4 (для номера команды; данных 10; в остальное записан адрес ячейки переменной "x" (зависит от размера массива)) Кстати понятие X уничтожается еще на стадии первого (: прогона компиляции в цифру (байт код), заменяется точным адресом, соотношение X=адрес сохраняется до конца полной компиляции. Выполнение: к содержимому адреса добавим 10.
y:=x+3; Тут надеюсь понятно, работаем с адресами и данной 3.
Цикл: перекидываем каретку на адрес начала цикла (известен), изменяем индекс.
Подпрограмма: перекидываем каретку на адрес пп, передаем параметры, возвращаем назад с результатом.
if(x=5){y=5 y=y+35 if(t>8){f=t} tt=''rerererererer''} С этим морока. Вторая часть {} не проблема, если истина, перебрасываем каретку на адрес команды y=5. Если ложно на адрес команды следующей за "}". Все адреса скобок определяются во время второго прогона компеля, когда длины команд уже известны. Ставятся метки, потом заменяются адресами. С первой частью не мудрил, создавал для каждого варианта свою команду. if(x=5) x - адрес, = > < - как бы вариантов не много
|
|
| |
andarky | Дата: Вторник, 29 Января 2013, 14:36 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| daun, ты меня пугаешь! Неужели всё так сложно?
у меня то сейчас типа обертки:
т.е. я у себя своим скриптом пишу SETSPHERE 1,1,1,3,#ff00ff,'tex.png',add интерпретатор при этом создает сферу (в Blitz3d и Unity по разному) устанавливает ее в поз. 1, 1, 1 назначает размер 3 цвет материала - #ff00ff создает текстуру из tex.png накладывает на сферу назначает материалу сферы шейдер аддитивного наложения
т.е. стандартный набор процедур заменяется одной командой а этот стандартный набор процедур в разных движках по разному выглядит а если например это выполнить в Flash то последний параметр не в счет (я использую PaperVision - он без шейдеров)
ну так и по остальным объектам...
Можно ли также сделать уже готовые шаблоны под ФОРы и ИФы и интепретатор только будет параметры давать туда. Или же всё так ужасно пугающе сложно как в Вашем вышеописанном??
Моя страничка по дизайну GameDev//Design//3D Ютубчик
|
|
| |
Undead | Дата: Вторник, 29 Января 2013, 15:26 | Сообщение # 4 |
NeoAxis User
Сейчас нет на сайте
| daun, Ну чего ты его пугаешь. Цитата (andarky) Неужели всё так сложно? Можно сделать так, как daun сказал, можно же работать на более высоком уровне. Нужно строить граф выполнения, создавать массивы типа Dictionary для переменных и функций.
Цитата (andarky) Можно ли также сделать уже готовые шаблоны под ФОРы и ИФы и интепретатор только будет параметры давать туда. Или же всё так ужасно пугающе сложно как в Вашем вышеописанном?? Можно. Не знаю, как на дельфях и флеше, на C# же эта задача не сложная. В сети есть туторы по разработке япов на .Net платформе.
Вcем зла.
|
|
| |
daun | Дата: Вторник, 29 Января 2013, 15:31 | Сообщение # 5 |
постоянный участник
Сейчас нет на сайте
| Цитата (andarky) т.е. я у себя своим скриптом пишу SETSPHERE 1,1,1,3,#ff00ff,'tex.png',add интерпретатор при этом создает сферу (в Blitz3d и Unity по разному) устанавливает ее в поз. 1, 1, 1 назначает размер 3 цвет материала - #ff00ff создает текстуру из tex.png накладывает на сферу назначает материалу сферы шейдер аддитивного наложения
Это слишком высокий уровень, вряд ли удастся организовать логику.
Цитата (andarky) а этот стандартный набор процедур в разных движках по разному выглядит а если например это выполнить в Flash то последний параметр не в счет (я использую PaperVision - он без шейдеров) Это уже кросплатформенность (или как там ее), придется писать исполняющую машину, понимающую самопальный скрипт, для каждого (и на каждом) движка. В java этой фигней и занимаются, правда обещали процессоры выпускать, понимающие байт код.
Цитата (andarky) Или же всё так ужасно пугающе сложно Это не так сложно, как кажется, при простых командах, просто много рутины, и ошибки плохо видны.
Цитата (andarky) Можно ли также сделать уже готовые шаблоны под ФОРы и ИФы и интепретатор только будет параметры давать туда.
Тут еще надо организовать их работу, не знаю, есть ли варианты помимо машинного кода.
|
|
| |
andarky | Дата: Вторник, 29 Января 2013, 16:31 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| Цитата (daun) Это уже кросплатформенность (или как там ее), придется писать исполняющую машину, так в этом и состоит моя зада!
Я пишу для каждого движка интерпретатор своего языка а потом просто могу компилировать один и тот же скрипт разными движками!
игровая логика ведь везде одна и та же: CREATEOBJECT DESTROY FORы IFы CASE WHILE UNTIL GOTO COLLISION HIT MOVE ну и т.п....
это будет оболочка на оболочку - т.к. любой двиг - такая же красивая обертка Directx/Opengl функций и пр... но так как я работаю и в Unity и в Flash и в Blitz и хочу освоить PureBasic - то вот для этого и хочу для себя такой универсальный скриптовой язык сделатьДобавлено (29.01.2013, 16:25) ---------------------------------------------
Цитата (daun) писать исполняющую машину, понимающую самопальный скрипт весь смысл в этом!Добавлено (29.01.2013, 16:31) --------------------------------------------- ах да! все же знают XML? это ведь тоже типа того.
Я и сейчас также красиво правильно написав XML могу его потом хоть в Unity хоть в Flashe читать даже для Blitza есть функции работы с XML.
Но там нет описания логики...
поэтому я и парюсь
Моя страничка по дизайну GameDev//Design//3D Ютубчик
|
|
| |
daun | Дата: Вторник, 29 Января 2013, 18:09 | Сообщение # 7 |
постоянный участник
Сейчас нет на сайте
| Цитата (Undead) на C# же эта задача не сложная. В сети есть туторы по разработке япов на .Net платформе. Везет вам сишникам, имеете полную совместимость.
Цитата (andarky) хочу для себя такой универсальный скриптовой язык сделать Логика требует постоянной прогонки, быстрых скоростей вызова функций на исполнение, да плюс еще в 3D, ой, ой, незнаю, незнаю.
|
|
| |
|