Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±

    Язык скриптинга для игрового движка

    Пишу простенький игровой движок, вроде как загрузка объектов из файла, камера, рендер - сделать получилось. Для начала думаю сделать обычный майнкрафт (чисто для теста первой версии движка), так как там столкновение с объектами просто проверять, не нужно какие-то супер знания в физике и моделировании. Ну вот нужно для этого приделать к движку какой-то язык скриптинга.

    Чтобы можно делать что-то на подобии (Pawn):

    Код:
    new
        playerid;
    
    public OnGameEngineInit()
    {
       playerid = CreatePlayer(0.0, 0.0, 1.0, 180.0);
       LoadInEngineObjectFile("file.cord");
       
       SetPlayerText(!"Добро пожаловать в игру");
    }
    
    public OnPlayerPressKey(id)
    {
       new
          Float:x, Float:y, Float:z;
    
       if(id == "A")
       {
          GetPlayerPos(playerid, x, y, z);
          SetPlayerPos(playerid, косинусы, синусы, плюс минус бла бла бла короче сдвинуть игрока влево);
       }
    }
    Ну и не знаю какой язык лучше выбрать, JS судя по мемам про очистку памяти лучше не нужно брать, Pawn ну хз, Lua мне синтаксис не очень нравится.

    (кто не против поучаствовать в разработке - пишите, знания DirectX, линейной и векторной алгебры, физики, HLSL не помешают, расскажу идею будущей игры и не надо предлагать Unity и UE, что то ... что то ...)

  2. #2
    Аватар для Fallen A.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Адрес
    Минск, БССР
    Сообщений
    236
    Репутация:
    19 ±
    ОФФТОП: ааааааа, пихапи давай!!!111!!11

  3. #3
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Я за JS, но если не хочешь, то Squirrel

  4. #4
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    AngelScript, Lua, JS, Squirrel
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  5. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Дисклеймер: для скриптинга я использую преимущественно Pawn, поэтому моё мнение может быть ангажированным.

    Выбор языка прежде всего зависит от целей создания игрового движка.
    • Если требуется язык с низким порогом вхождения, прекрасно подойдут Lua, Pawn или JavaScript.

    • Нужна динамичность? В этом плане в проигрыше разве что Pawn, т.к. в нём вся память статическая и нельзя динамически зарезервировать новый блок памяти. Обойти это можно разве что путём создания своих нативных функций для работы с памятью.

    • Нужно что-то надёжное? Динамические языки, такие как Lua, JavaScript и Squirrel вам вряд ли подойдут, поскольку в них нет даже такой элементарной штуки, как диагностические сообщения от компилятора, равно как и самого компилятора вообще (интерпретатору скармливается не скомпилированный файл, а исходный код скрипта). Как результат - обилие ошибок, о которых обычно становится известно только в самый последний момент.
      Пример на Lua:
      Код:
      local my_var
      
      -- При попытке присвоения в имени переменной допущена опечатка ("my_val" вместо "my_var").
      -- В результате будет создана глобальная переменная my_val, а в my_var ничего не запишется.
      my_val = 1
      Не знаю, можно ли допустить подобную ошибку ещё и в AngelScript, но компилятора для этого ЯП тоже нет, соответственно и диагностики при компиляции тоже.
      Отдельного упоминания стоит отсутствие статической типизации (даже опциональной) в Lua и JavaScript, из-за чего открывается возможность наплодить ещё больше багов (например, пропустить один из аргументов функции и передать строку вместо числа). Как сказал один человек, имя которого я, к сожалению, уже не помню, "Программисты бывают двух типов: те, кто знают, что статическая типизация иногда бывает нужна, и те, кому ещё нет 20."

    • При каждом кадре или апдейте игровой логики нужно обработать большой массив данных, и поэтому важна производительность? В Pawn с этим меньше всего проблем, т.к. всё статическое и архитектура интерпретатора очень простая. В свою очередь, в Lua и JavaScript могут быть проблемы, т.к. из-за динамичности языка интерпретатору нужно совершить кучу доп. проверок на каждый чих. Справедливости ради следует отметить, что в LuaJIT проблема частично решена путём отслеживания наиболее частого пути выполнения JIT-компилируемого кода и рекомпиляции с оптимизацией под этот путь.



    Также по своему опыту могу сказать, что Lua - ни что иное, как ловушка для разработчика: язык простой для освоения, но очень сложный в плане отладки и диагностики кода - года 3-4 назад мне немало часов пришлось потратить на поиск скрытых ошибок и костылизацию своего кода (например, блокировка модификации записей в таблицах, используемых в качестве классов), когда я пытался писать простые игры с помощью фреймворка LOVE.
    В JavaScript основные принципы практически те же самые, потому опыт может быть примерно тот же.
    При использовании в одном из своих приложений Pawn многого не хватало, пришлось самостоятельно сделать менеджер по загрузке и выполнению скриптов, нативные функции для работы с динамической памятью, аналоги CallLocalFunction, CallRemoteFunction и SetTimerEx из SA-MP, а также обработчик ошибок времени выполнения с трассировкой стека и отображением пути выполнения кода, как в crashdetect (сейчас как раз пытаюсь их выделить из приложения в отдельную библиотеку, в скором времени опубликую на GitHub).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. Пользователь сказал cпасибо:
    KrutoyKrosch (08.11.2017)
  7. #6
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Не знаю где может пригодится динамическая память для скриптинга... Например нужно узнать координаты какого-то объекта в игре (объекты динамические), но при этом мне не известны все их координаты потому что нету динамической памяти для их хранения. Но в движке то они есть, просто функцию сделать GetCountObjectInGame(); и GetObjectPos(); и все

    Насчет передать строку вместо числа... я писал сайт и там JS - передавал иногда число как строку и ничего не случалось, выводило нормально число. Тот же console.log(str);. Можно создать var str = 5; и потом спокойно в консоль 5 выведет. Но в других языках не знаю насчет этого.

    Все таки Pawn выберу, более как-то привычней. А как кстати он подключается?)0)) Просто по другим языкам много туториалов, а тут гугл ничего не выдал......

      Открыть/закрыть

    только это нашел, далее просто не мог искать

    Последний раз редактировалось KrutoyKrosch; 08.11.2017 в 06:34.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •