Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 24.03.2005, 18:00 Titel: Squirrelgen |
|
|
Servus!
zuerstmal an Patrick: weggucken. Pöses Projekt für Scriptsprachen .
Squirrel ist eine Scriptsprache, die auf lua basiert, mit besserer unterstützung für oop und C-style syntax. (wer sie mal benutzen will: http://squirrel.sf.net)
Wie auch bei allen anderen scriptsprachen hatte ich das problem, dass man umständlich glua code für di eigenen funktionen schreiben muss.
Bei Python gibts dafür boost::python und für lua gibt es toLua und luabind. Für squirrel gibt es da nichts (was mit vc7.1 kompilierbar wäre).
Das Prinzip:
squirrelgen parst abgespeckte C++ header dateien und erzeugt eine cpp datei mit sämtlichen wrappern. Zum parsen benutze ich boost::spirit.
Status:
Momentan lassen sich funktionen exportieren, die parameter werden überprüft und automatisch ausgelesen. (auch std::string funktioniert).
Nächsten Milestones:
- rückgabewerte (hab die vergessen)
- enums, Konstanten
- classen
- virtuelle in squirrel überladbare funktionen
Beispiel:
test.pkg: // abgespeckte squirrelgen header datei
Code: | #include "test.h"
void test( int val );
void greet( std::string name ); |
test.h: // normale c++ header datei
Code: |
extern void test( int val );
extern void greet( std::string name ); |
main.cpp: // kleines test programm
Code: | #include "test.h"
extern void registertest( HSQUIRRELVM vm ); // wird von der generierten cpp datei exportiert
[...]
void test( int val ){ /*machwas*/
void greet( std::string name ){ /*machwas*/ }
[...]
void main()
{
[...] lade squirrel
registertest( vm );
[...] starte script test.nut
} |
test.nut: // das script wo wirs nun benutzen können
Code: |
test( 10 );
greet( "hallo jli" ); |
wenn ich etwsa weiter gebastelt habe kann ich es mal veröffentlichen.
Zuletzt bearbeitet von xardias am 24.03.2005, 18:01, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 24.03.2005, 18:01 Titel: |
|
|
prost patrick (btw: wie öffnet man mit den händen überm kopf ein bier?) |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 24.03.2005, 21:33 Titel: |
|
|
also, da ich keine Ahnugn von sowas habe:
Du machst also so eine Art Konverter, damit jeder Depp (z. B. ich) sehr einfach die Skriptsprache in sien Projekt aufnehmen kann? DAnn schreibt man so ne Art LUAskript, mit dme man dann Funktionen des Programms aufrufen kann? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 24.03.2005, 21:39 Titel: |
|
|
Hi Patrick was fuer Bier ist das Dose oder Flasche ^^ |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 24.03.2005, 21:40 Titel: |
|
|
City Hunter hat Folgendes geschrieben: | Hi Patrick was fuer Bier ist das Dose oder Flasche ^^ |
Es war ein schönes kühles Stubbi was man wie es sich gehört aus der Flasche trinkt
Aber jetzt zurück zum Thema _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 24.03.2005, 21:40 Titel: |
|
|
rofl! 3 von 5 (jetzt 4 von 6) Posts hier sind Offtopic...
lassen wir das lieber _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 24.03.2005, 21:42 Titel: |
|
|
Haste es mit den Zaehnen uff gemacht? Wie biste uff die sprache Squirrel gekommen? haste das schon laenger geplandt? |
|
Nach oben |
|
|
abc_d JLI Master Trainee
Alter: 34 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 24.03.2005, 21:43 Titel: |
|
|
@Jonathan das geht ja noch, Nahar hat es geschafft in einem thread 8/11(oder sowas in der art) posts zu schreiben
Ups schon wieder ein Offtopic post
Edit:
Kann mich auch geierrt haben, und es war ein anderer. _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
Never touch a running System - der Systemling
Zuletzt bearbeitet von abc_d am 24.03.2005, 22:00, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 24.03.2005, 21:47 Titel: |
|
|
BlackLordOfDragons hat Folgendes geschrieben: | @Jonathan das geht ja noch, Nahar hat es geschafft in einem thread 8/11(oder sowas in der art) posts zu schreiben
Ups schon wieder ein Offtopic post |
Ist doch egal Black |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 24.03.2005, 23:22 Titel: |
|
|
offtopic: hey, wie wärs mit nem neuen nick für blacklordofdragons? blacky statt bld
zum thema:
Ich habe vor 1-2 wochen ne scriptsprache gesucht (nachdem ich versucht habe java als scriptsprache zu misbrauchen *g*) da bin ich auf squirrel gestoßen und find sie super. es ist größtenteils lua (70% des codes oder so *g*), nur find ich es angenehmer zu benutzen.
Jonathan:
genau das soll es machen.
Du musst nur deine klassen die du "exportieren" willst in eine datei schreiben (test.pkg s.o.) und squirrelgen drüber laufen lassen.
Ich habe übrigens klassen eingebaut. das ging verdammt fix (spirit ist was feines).
Schaut dann so aus:
test.pkg:
Code: | #include "stdafx.h"
class TestClass
{
int test( int val );
void greet( std::string name );
};
|
test.nut // das script
Code: | local test = TestClass();
print( "returned: " + test.test( 5 ) );
test.greet( "world" ); |
es mag etwas verwirrend ausschauen, dass die pkg dateien wirklich fast genauso aussehen wie c++ header. sie sind aber keine. ihc habe das aber bewusst so gemacht, damit man den kram aus seinen vorhandenen header ohne viele änderungen herauskopieren kann. |
|
Nach oben |
|
|
abc_d JLI Master Trainee
Alter: 34 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 24.03.2005, 23:26 Titel: |
|
|
xardias hat Folgendes geschrieben: | offtopic: hey, wie wärs mit nem neuen nick für blacklordofdragons? blacky statt bld
|
Kommt drauf an ob du deinen nick in xardienchen umänderst
So, genug offtopic _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
Never touch a running System - der Systemling |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 25.03.2005, 20:22 Titel: |
|
|
es geht weiter man exportiere folgende sachen:
Code: | class TestClass
{
TestClass();
void setMsg( std::string msg );
virtual void greet();
};
void performTest( TestClass* test ); |
wobei performTest eine funktion ist, die vom parameter die greet funktion aufruft.
und schon kann man folgendes machen:
Code: | class ScriptTest extends TestClass
{
function greet()
{
print( "ScriptTest::greet greets you\n" );
}
}
local test = ScriptTest();
performTest( test ); |
man kann die klasse im script ableitne und die virtuelle funktion greet überladen das funktioniert sogar, wenn man die instanz aus dem script bekommt und in c++ aufruft.
Sowas ist IMO ziemlich praktisch um z.B. SpielObjekte zu scripten. man kann eine klasse GameObject exportieren z.B. mit einer virtuellen onFrame funktion und die im script überschreiben |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 26.03.2005, 13:20 Titel: |
|
|
Das übergeben von c++ instanzen an squirrel funktioniert jetzt auch *g*
Code: | class Player extends GameObject
{
function onFrame( frameEvent )
{
::print( "Player.onFrame() time passed: " );
::print( frameEvent.getTimeSinceLastFrame() );
::print( "\n" );
}
function onSpawn()
{
::print( "Player.onSpawn() \n" );
}
}
class Enemy extends GameObject
{
function onFrame( frameEvent )
{
::print( "Enemy.onFrame() \n" );
}
function onSpawn()
{
::print( "Enemy.onSpawn() \n" );
}
}
::print( "adding objects\n" );
::addGameObject( ::Enemy() );
::addGameObject( ::Player() ); |
als kleines anwendungsbeispiel |
|
Nach oben |
|
|
|