JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=decb5f87fe9f4170b49c4192d0299d6fMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Squirrelgen
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Projekte
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

BeitragVerfasst am: 24.03.2005, 18:00    Titel: Squirrelgen Antworten mit Zitat

Servus!

zuerstmal an Patrick: weggucken. Pöses Projekt für Scriptsprachen Razz.

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 Rolling Eyes (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
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 18:01    Titel: Antworten mit Zitat

*Hände über den Kopf schlag und ein Bier öffne* Rolling Eyes
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 18:01    Titel: Antworten mit Zitat

prost patrick Wink (btw: wie öffnet man mit den händen überm kopf ein bier?)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 18:04    Titel: Antworten mit Zitat

Noch nie gemacht? Übung Wink
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 21:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
City Hunter
Super JLI'ler


Alter: 39
Anmeldedatum: 18.04.2004
Beiträge: 330
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 21:39    Titel: Antworten mit Zitat

Hi Patrick was fuer Bier ist das Dose oder Flasche ^^
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 21:40    Titel: Antworten mit Zitat

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 Very Happy

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 21:40    Titel: Antworten mit Zitat

rofl! 3 von 5 (jetzt 4 von 6) Posts hier sind Offtopic...
lassen wir das lieber
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
City Hunter
Super JLI'ler


Alter: 39
Anmeldedatum: 18.04.2004
Beiträge: 330
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 21:42    Titel: Antworten mit Zitat

Haste es mit den Zaehnen uff gemacht? Wie biste uff die sprache Squirrel gekommen? haste das schon laenger geplandt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
abc_d
JLI Master Trainee


Alter: 34
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 21:43    Titel: Antworten mit Zitat

@Jonathan das geht ja noch, Nahar hat es geschafft in einem thread 8/11(oder sowas in der art) posts zu schreiben Wink

Ups schon wieder ein Offtopic post Wink

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
City Hunter
Super JLI'ler


Alter: 39
Anmeldedatum: 18.04.2004
Beiträge: 330
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 21:47    Titel: Antworten mit Zitat

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 Wink

Ups schon wieder ein Offtopic post Wink

Ist doch egal Black Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 23:22    Titel: Antworten mit Zitat

offtopic: hey, wie wärs mit nem neuen nick für blacklordofdragons? blacky statt bld Razz

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
Benutzer-Profile anzeigen Private Nachricht senden
abc_d
JLI Master Trainee


Alter: 34
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 24.03.2005, 23:26    Titel: Antworten mit Zitat

xardias hat Folgendes geschrieben:
offtopic: hey, wie wärs mit nem neuen nick für blacklordofdragons? blacky statt bld Razz


Kommt drauf an ob du deinen nick in xardienchen umänderst Wink

So, genug offtopic Wink
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 25.03.2005, 20:22    Titel: Antworten mit Zitat

es geht weiter Very Happy 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 Wink 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 Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 26.03.2005, 13:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Projekte Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum