| 

.NET C# Java Javascript Exception

4
Ich will in einem Programm fuer Ios teile als Javascript einfuegen. Es sind Scripts um ein Spiel zu steuern. Die Scripts neu zu schreiben waere sehr unpraktisch, da die gleichen Skripte auf anderen Zielplattformen auch verwendet werden. Ich suche also eine Moeglichkeit in meinem Spiel die Javascript Datei als Steuerlogik des Spiels zu verwenden. Die Timer, Sounds abspielen und Animationen/Sprites bewegen usw. wird vom Programm selbst uebernommen und soll nur vom Skript aus angestossen werden koennen. Es ist also nur die Verdrahtung der Spielzustaende vom Skript zu regeln.
Gibt es dazu etwas oder von mir aus auch so, dass ich das Skript automatisch umsetzen lasse in nativen Code um dann als ganzes Paket auszuliefern.
31.12.2011
BerndLipp 23 3
2 Antworten
2
Mir ist nicht bekannt das es sowas fertig in Objective-C gibt, aber, in C++ gibt es solche Projekte in verschiedensten Ausbaustufen. Eventuell ist es dir möglich eines davon zu adaptieren:

Variante 1: Googles V8 Engine

V8 JavaScript Engine - Introduction
V8 JavaScript Engine - Embedder's Guide

Beispiel:

int main(int argc, char* argv[]) {

// Create a string holding the JavaScript source code.
String source = String::New("'Hello' + ', World'") ;

// Compile it.
Script script = Script::Compile(source) ;

// Run it.
Value result = script->Run() ;

// Convert the result to an ASCII string and display it.
String::AsciiValue ascii(result) ;
printf("%s\n", *ascii) ;
return 0;
}

Variante 2: tiny-js

tiny-js - A simple single-file javascript interpreter written in C++

Beispiel:

CTinyJS s;
registerFunctions(&s);
registerMathFunctions(&s);
s.root->addChild("result", new CScriptVar("0",SCRIPTVAR_INTEGER));
try {
s.execute(buffer);
} catch (CScriptException *e) {
printf("ERROR: %s\n", e->text.c_str());
}
bool pass = s.root->getParameter("result")->getBool();

------------------------------------------------------------------------------------------

Auch SpiderMonkey vom Mozilla ist in C++ geschrieben und wird von vielen anderen Projekte genutzt (z.B. Adobe Acrobat, Adobe Reader, Adrobe Flash, GNOME, MongoDB, ...)
31.12.2011
Floyd 11,0k 3 9
Hmmm... soweit ich weiss kann ich in ios auch gemischten code verwenden also sollte das ja gehen.
Danke fuer die tipps
BerndLipp 03.01.2012
1
Für iOS gibt es auch entsprechende Projekte. Schau dir mal die akzeptierte Antwort in dieser Frage an.
Eventuell könntest du sogar ein UIWebView direkt verwenden (Nitro Engine, ab iOS5)?
03.01.2012
puls200 3,3k 6
Danke fuer den Link zum Artikel. Ich werde mir mal iMonkey ansehen... wobei ich das nicht ganz so einfach finde weil es dazu scheinbar noch weniger als nichts an Infomrationen gibt.
Die Variante mit der UIWebView gefaellt mir zumindest auf den ersten blick nicht besonders, da das ganze ding im Speicher herumliegt...
BerndLipp 03.01.2012

Stelle deine Javascript-Frage jetzt!