2016-06-22 1 views
5

Tout d'abord, je m'excuse pour le post long. J'ai posé quelques questions à propos de haxe et de sa pertinence en tant qu'outil pour résoudre un problème auquel je suis confronté. J'ai une connaissance très limitée de haxe mais ce que je sais est mon rôle idéal pour haxe dans mon projet n'est pas l'utilisation normale de haxe. Donc, ce que j'essaie d'éviter, c'est perdre du temps, je n'ai pas appris ce langage (malgré qu'il semble vraiment amusant et puissant) seulement pour trouver que ce n'est pas fait pour le but. Donc j'espère obtenir des conseils de la part de vétérinaires chevronnés sur la question de savoir si elle est appropriée. J'espère vraiment que c'est le cas.Utiliser haxe comme un transpiler entre C++ et JavaScript

Voici ce que je suis en train de réaliser:

Je travaille dans l'industrie du jeu et je dois créer un jeu dans les deux C++ et JS. C++ pour un système embarqué et JS pour en ligne et mobile. Je suis très expérimenté en C++ et JS.

Les jeux que je développe Je veux seulement écrire une fois. Maintenant, je pourrais utiliser quelque chose comme emscripten pour passer de C++ à JS mais cela se traduira par du code JS compilé qui ne peut pas être débogué avec les outils de développement de chrome facilement. Je suis convaincu que je vais courir dans les bogues cas de bord avec le JS compilé que je ne peux pas revenir facilement au C++ d'origine. De plus, certaines plates-formes pour le jeu exigeraient que les laboratoires d'équité regardent le code source qui serait un problème pour les JS compilés. Ce dont j'ai vraiment besoin, c'est d'un compilateur source-à-source qui produise du code C++ et JS lisible et humain, que je peux ensuite utiliser et modifier dans sa forme native si nécessaire, donc haxe. J'ai regardé le code produit par haxe pour C++ et JS. JS semble parfaitement facile à comprendre et à utiliser. C++ pas tellement, mais encore à peu près acceptable. Je peux même empêcher haxe de compiler et de relier C++ dont je n'ai pas besoin. Je ne veux que le code source.

Jusqu'à présent, si bon.

Maintenant, j'ai un cadre de jeu en C++ que oxygine utilise le moteur 2d. Il est capable d'afficher des sprites etc. ainsi qu'un framework que j'ai créé pour les bus de messages et les machines à états finis (charge aussi des classes plus utiles). J'ai aussi un framework similaire dans JS qui utilise Pixijs pour son moteur 2d et qui a son propre bus de messages etc tout comme le moteur C++. Maintenant, ce que je veux être en mesure de faire est d'écrire des modules dans haxe que lorsque je transpile à la fois C++ et JS que le code peut être inclus dans le cadre et travailler avec son moteur de langage respecté. Chaque objet que je crée dans haxe sera très encapsulé et devra juste s'abonner au bus de messages, gérer les messages et renvoyer les messages. Il peut également avoir besoin de savoir comment utiliser sa machine d'état de moteurs. Donc je ne sais pas si cela est possible avec haxe car le bus de messages (avec d'autres objets) ne sera pas écrit en haxe mais sera fourni au module après qu'il ait été transpilé et construit dans son projet natif. Peut-être que je peux écrire ma propre bibliothèque haxe qui connaît la syntaxe de mes deux moteurs de jeu et qui peut transpiler en fonction de sa langue cible? Je ne suis pas sûr que ce soit possible.

Merci d'avoir pris le temps de lire, et les conseils que vous pouvez donner.

+0

Je pense que Haxe est fait pour exactement ce problème. Je pense que votre question est très large, mais vous pouvez faire une distinction entre ce qui est utilisé dans le C++/js en utilisant la compilation conditionnelle. Cela signifie que vous devriez faire '#if js' ou' #if cpp' Voir http://haxe.org/manual/lf-condition-compilation.html –

+0

J'essayais de réaliser quelque chose de similaire (compiler Haxe en C++ et importer mon Modules Haxe dans un projet C++ existant) mais sur #Haxe IRC, les gens fortement découragés de le faire. D'après ce que j'ai trouvé après une recherche, je pense qu'ils ont tout à fait raison. Ils m'ont expliqué que le code C++ généré est parfait pour être compilé directement par un compilateur C++, mais rien de plus. –

+0

Il existe [une autre discussion pertinente] (https://groups.google.com/forum/#!topic/haxelang/gSnoTKv7HEY) sur un transpileur C++-to-Haxe. –

Répondre

1

Vous pouvez utiliser

#if cpp 
// c++ implementation 
#elseif js 
// javascript implementation 
#end 

pour permettre des différentes implémentations pour différentes cibles, cela peut aller nulle part dans votre code, vous pouvez passer une valeur Haxe à des fonctions différentes pour différentes cibles.

Pour utiliser les définitions externat:

Avec C++ spécifiquement, il pourrait être plus complexe que vous devez regarder CFFI ou Linc https://snowkit.github.io/linc/
La complexité est probablement faire passer les types. Rappelez-vous que Haxe C++ a géré la mémoire de votre moteur pourrait faire les choses différemment. HL arrive bientôt et peut avoir quelques avantages.

En regardant oxygine2d cela ressemble un peu à l'API Flash? Et je sais que pixijs est basé sur l'API Flash. Je crois que OpenFL utilise maintenant pixijs pour le rendu WebGL. Vous voudrez peut-être aussi regarder NME (a presque la même interface pour C++ que OpenFL, mais NME a des choses comme l'installation de Cppia et est parfois plus stable). Si le JS ou C++ est trop lent, vous devez regarder dans les shaders et Luxe/Kha pour le rendu et vous pouvez aussi essayer Heaps il utilise Lime (openfl) et quelques haxe js webgl je pense.
Si vous avez besoin de physique en 2D, alors utilisez Nape, il peut être utilisé avec n'importe quel toolkit Haxe (Luxe, OpenFL, Kha, Flambe), il y a physaxe mais ce n'est pas beaucoup utilisé. Kha et Nape information par exemple: https://github.com/lewislepton/kha-examples/blob/master/NAPE/Sources/Project.hx

Je pense vraiment que votre rendre votre vie difficile en voulant utiliser différents moteurs pour différentes plates-formes quand probablement HaxeFlixel ou Punk pourrait vous donner tout ce dont vous avez besoin en cours d'exécution avec Nuque sur un de la cible croix boîtes à outils, mais il est très faisable de le faire à votre façon. Peut-être regarder Tink ou Thx pour les signaux des événements et autres, les macros (comme celles utilisées dans Tink) permettent de construire beaucoup de structures à la compilation et peuvent donc réduire la surcharge en faisant cela avant l'exécution , donc les tweens peuvent être pré-calculés par le compilateur. Il y a un débogueur hxcpp et si vous exécutez Haxe en chrome, il devrait vous donner le numéro de ligne Haxe via le mappage source js.

J'espère avoir couvert certains aspects de votre grande question. Haxe vous permet de mélanger et de faire correspondre avec natif, mais je pense que Pixijs et oxygine 2d n'est probablement pas idéal car il y a forcément assez d'outils de jeu en pur Haxe avec des optimisations de cibles intégrées, il vous suffit de Allez sur Kha IRC, Luxe gitter, et sur le forum Haxe IRC et OpenFL et posez quelques questions.