Autor Wątek: Dodanie języka skryptowego do silnika.  (Przeczytany 6989 razy)

Offline HawkDeath

  • Użytkownik

# Sierpień 30, 2015, 21:15:42
Witam,
zacząłem tworzenie własnego silnika (w formie edytora) i mam już większość kwestii ustalone pozostało mi jeszcze wybrać język skryptowy. Chciałbym wykorzystać te języki (albo przynajmniej jeden z tej listy):
  • C/C++
  • C#
  • Angel Script
  • Python
Tylko nie mam pojęcia w jaki sposób miałbym zintegrować to z resztą silnika (z modułem graficznym, fizycznym, itd...) oraz w jaki sposób miałbym tworzyć plik wykonywalny (pod windows *.exe).
Moim pytaniem jest który z tych języków będzie najlepszy oraz w jaki sposób skompilować projekt który stworzony w silniku do pliku wykonywalnego ?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline DezerteR

  • Użytkownik

# Sierpień 30, 2015, 22:22:23
Integrowałem ostatnio swój projekt z pytonem z wykorzystaniem boost.python, trochę zabawy z kompilacją boosta(niestety boost.python trzeba samemu kompilować), ale już samo użytkowanie jest bardzo przyjemne i bezbolesne.
Jeśli jesteś zainteresowany mogę trochę więcej napisać.

Offline Xirdus

  • Redaktor

  • +3
# Sierpień 30, 2015, 22:51:17
w jaki sposób skompilować projekt który stworzony w silniku do pliku wykonywalnego ?
Nie kompilować - trzymać jako zwykłe pliki wczytywane w runtimie, obok map, grafik, tekstów, dźwięków itd. Ot, kolejny typ zasobu.

Integracja z projektem to już bardzo mocno zależy od samego projektu, i pewnie będziesz musiał samodzielnie wykminić rozwiązanie szyte na miarę.

Offline timus

  • Użytkownik

# Sierpień 30, 2015, 23:00:27
Integracje skryptów można załatwić przez syscall'e czyli zestaw funkcji exportowany przez silnik np. GetGameObject(string name), SetMaterial(GameObject object, Material material), itd.

Exeka możesz zrobić uniwersalnego precompilowanego który odczytuje np folder Assets gdzie są skrypty i inne assety.

Co do języków to:
  • C/C++ prosta integracja, kompilujemy kod do DLL i wczytujemy w runtime, ale raczej na język skryptowy zbyt toporne.
  • C# integracja na windowsie dość prosta, na innych systemach trochę gorzej ale tez możliwe(mono). Skrypty kompiluje się do DLL które jest wczytywana przez CLR/Mono w runtime. Patrząc po unity nadaje się na język skryptowy.
  • Angel Script/Python nie używam to się nie wypowiem.
Więcej szczegółów o cechach konkretnych języka dostarcza wujek google.



Offline Xender

  • Użytkownik

# Sierpień 31, 2015, 00:13:32
Python AFAIK jest gruby - nie wiem, na ile jest to akceptowalne w Twoim silniku.
No i szybkość CPythona nie powala, PyPy już lepiej.

Za to Lua ma powodzenie jako mały i lekki język skryptowy. Nie wiem, na ile szybki.

O C/C++ do skryptowania (z czytaniem kodu skryptu ze źródła w runtime) raczej bym zapomniał.
Da się, ale za dużo roboty.

C# może wtedy, jeśli sam silnik jest w C#, inaczej też nie widzę sensu, chyba, że o czymś nie wiem.

Offline DezerteR

  • Użytkownik

# Sierpień 31, 2015, 00:28:14
Zgodzę się z Xenderem, eksport kilku klas zaowocował wzrostem rozmiaru exeka o 13MiB, czas linkowania również podskoczył. Co do wydajności to się nie wypowiem, nie używałem go do krytycznych rzeczy.

Za to sama integracja jest bardzo prosta bo poza zdefiniowaniem klas/funkcji/etc. których chcemy używać w pythonie nie musimy robić nic więcej. Używanie obiektów pyhonowych w c++ i odwrotnie jest bezproblemowe, no i można korzystać z chyba wszystkich featurów obu języków.

Offline koirat

  • Użytkownik

# Sierpień 31, 2015, 01:49:42
C# może wtedy, jeśli sam silnik jest w C#, inaczej też nie widzę sensu, chyba, że o czymś nie wiem.
Możesz nie wiedzieć że można embedować Mono do aplikacji napisanej np w C++. I mieć komunikacje pomiędzy Mono <-> c++. (To co robi unity3d)

Nie wiem natomiast jak wygląda kwestia licencji.

Offline Xender

  • Użytkownik

# Sierpień 31, 2015, 11:02:46
@up - Móc można, ale czy nie będzie to za dużo roboty i/lub rozmiaru exeka względem AngelScriptu czy Lua?

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Sierpień 31, 2015, 11:30:56
Ja ze swojej strony mogę:
- polecić Squirrela - bardzo mocno pachnie Lua, tyle że ze składnią bliżej C/C++
- odradzić Angel Code jeśli myślisz o przenośności - Angel Code jest nafaszerowany różnymi trikami ze stosem i pamięcią zależnymi od platformy

Offline koirat

  • Użytkownik

# Sierpień 31, 2015, 12:10:01
@up - Móc można, ale czy nie będzie to za dużo roboty i/lub rozmiaru exeka względem AngelScriptu czy Lua?
Mono około 12MB

Offline HawkDeath

  • Użytkownik

# Wrzesień 04, 2015, 13:03:58
A co z typami, funkcjami zdefiniowanymi przez użytkownika ? Przecież silnik/język skryptowy musi wiedzieć o nowym typie danych.

Offline Avaj

  • Użytkownik

# Wrzesień 04, 2015, 15:35:07
Dobrym pytaniem jest też jaki jest język w którym piszesz. Bo np. jeśli piszesz w Pythonie, to embed pythona masz za free. W Javie też praktycznie pythona/javascript za darmo masz (Jython/Nashorn).

Offline FoToN

  • Użytkownik

# Wrzesień 05, 2015, 23:51:24
Ja polecam LuaJIT. Implementacja Lua z dodatkowym kompilatorem JIT oraz bardzo szybkim interpreterem. Dodatkowo ma FFI dzięki któremu eksport API silnika do skryptów jest bardzo prosty (łatwo można napisać skrypt, który będzie na podstawie kodu źródłowego generował cały łącznik skrypt <-> silnik).

Offline Estivo

  • Użytkownik
    • Blog

# Wrzesień 06, 2015, 00:54:23
Za to Lua ma powodzenie jako mały i lekki język skryptowy. Nie wiem, na ile szybki.

Jeżeli będzie się go używać z głową (mało globalnych) to można na tym oprzeć dużą część gry. U mnie w pracy mamy teraz projekt, który bardzo mocno opiera się na lua i cała reprezentacja graficzna leci właśnie po lua. Lecą do niej tylko dane no i czasami z niej do natywnego. Wszystko chodzi mega sprawnie i wydajnie.

Offline HawkDeath

  • Użytkownik

  • +1
# Wrzesień 13, 2015, 18:34:06
Bardzo spodobał mi się Squirrel Script, czy możliwe jest prze-kompilowanie skryptów do pliku exe ?