cocos2d-x 3.0 + C Une super introduction au développement de jeux à partir de ++ 11 strong> div>
Liaison Lua jusqu'à cocos2d-x 2.x
La liaison de script nécessite un code (Glue Code) pour relier les deux langues.
Dans le passé, un fichier de définition spécial appelé * .pkg
était écrit et généré automatiquement à l'aide d'un utilitaire appelé tolua ++
. C'est pratique.
↑ Ce code est généré automatiquement.
Pour plus de détails, veuillez consulter l'article suivant.
Comment utiliser tolua ++ (principalement Mac) -Programming monster
Cependant, il a fallu du temps pour écrire toutes les classes et méthodes dans * pkg, et cela devenait difficile lorsque le nombre était grand, et il y avait aussi des bogues causés par cela.
L'histoire de la fusion après avoir corrigé le bogue dans cocos2d-x --5.1 Saraudon
Reliure Lua de cocos2d-x 3.0
À partir de cocos2d-x 3.0, vous pouvez utiliser un utilitaire appelé binding-generator
pour rechercher automatiquement des classes et des méthodes à partir de l'en-tête et générer automatiquement un Glue Code.
De plus, les paramètres peuvent être décrits de manière assez flexible, ce qui simplifie la création de fichiers de définition, qui était traditionnellement effectuée manuellement.
cocos2d/bindings-generator
Configuration sur Mac
Je vais vous l'expliquer car c'est un peu gênant à mettre en place
Voir la page ci-dessous. Actuellement non compatible avec Windows.
bindings-generator/README.md at master · cocos2d/bindings-generator
Installation de cocos2d-x 3.0
Téléchargez cocos2d-x 3.0 alpha1 (à partir du 15/12) à partir d'ici et décompressez-le. Placez-le dans $ HOME / cocos2d-x-3.0
.
http://www.cocos2d-x.org/download
Installer des packages Python
Installez les packages Python requis. Si vous utilisez Python standard, utilisez ʻeasy_install`.
sudo easy_install pyyaml, cheetah
or
pip install pyyaml, cheetah
Introduction de llvm-clang-3.3
Veuillez télécharger Clang Binaries pour Mac OS X
à partir de la page suivante. Il semble que Homebrew sera également inclus, mais cela n'a pas été vérifié.
C'était 3.1 dans la documentation, mais cela n'a pas fonctionné sans 3.3, donc veuillez le télécharger.
Cette fois, il est installé dans $ HOME / llvm + clang-3.3
.
http://llvm.org/releases/download.html#3.3
Présentation d'Android NDK
À partir de la page suivante.
http://developer.android.com/tools/sdk/ndk/index.html
Cette fois, il est installé dans / Applications / Android / android-ndk
.
Il semble que Homebrew sera également inclus.
brew install android-ndk
Définition des variables d'environnement
Définissez divers paramètres d'environnement. Veuillez spécifier le chemin que vous avez installé jusqu'à présent.
Depuis que j'ai installé Python avec pyenv, le PATH est le suivant, mais généralement / usr / bin / python
est OK.
export PYTHON_BIN=$HOME/.pyenv/shims/python
export COCOS2DX_ROOT=$HOME/cocos2d-x-3.0
export NDK_ROOT=/Applications/Android/android-ndk
export CLANG_ROOT=$HOME/clang+llvm-3.3
Générer un code de colle pour cocos2d-x
Essayons de générer le code pour Lua Binding de cocos2d-x.
cd $COCOS2DX_ROOT/tools/tolua
./genbindings.sh
Si tout se passe bien, un énorme code source de 93000 lignes et 2,6 Mo devrait être généré automatiquement dans $ COCOS2DX_ROOT / scripting / auto-generated / lua-bindings
. Tu l'as fait!
En même temps, un fichier de configuration appelé ʻuserconf.iniest généré. C'est un fichier qui définit les variables d'environnement, et le
genbindings.sh` attaché le générera automatiquement pour vous.
Essayez de générer dans votre propre projet
La configuration jusque-là était gênante et j'étais déjà assez fatiguée, mais cette fois je vais la générer à partir de mon propre projet du sujet principal.
Écrivez your_game.ini
En décrivant le paramètre du Glue Code généré dans your_game.ini
, vous pouvez spécifier la méthode de classe à générer ou à ignorer comme indiqué ci-dessous.
En gros, copiez cocos2dx.ini
et réécrivez-le si nécessaire.
#Spécifiez le PATH de l'en-tête à analyser
headers = %(cocosdir)s/cocos2dx/include/cocos2d.h %(cocosdir)s/CocosDenshion/include/SimpleAudioEngine.h ../Classes/LuaBindSample.h
#Décrivez la liste des classes générées (les expressions régulières sont possibles)
classes = ^GameObject$
#Décrivez la paire de classe et de méthode à ignorer (une expression régulière est possible)
skip = IgnoredClass::[ignoredMethod{0-9} anotherMethod],
LuaBindSample/binding-generator/bind_sample.ini at master · giginet/LuaBindSample
La méthode de description est écrite dans le commentaire, je vais donc omettre l'explication détaillée.
Veuillez consulter cocos2dx.ini pour plus de détails.
Il semble qu'il fonctionne sur un moteur de modèle appelé CHEETAH créé par Python, ce qui suit peut être utile pour la grammaire, etc.
Cheetah - The Python-Powered Template Engine
Écrivez userconf.ini
En décrivant le PATH spécifié dans la variable d'environnement plus tôt dans un fichier appelé ʻuserconf.ini`, il semble qu'il sera lu et exécuté sans permission.
Les variables environnementales ne peuvent pas être utilisées, donc je pense qu'il est préférable de les créer en fonction de chaque environnement.
Par exemple, cela ressemble à ce qui suit.
[DEFAULT]
androidndkdir=/Applications/Android/android-ndk-r8e
clangllvmdir=/Users/giginet/clang+llvm-3.3
cocosdir=/Users/giginet/cocos2d-x-3.0
cxxgeneratordir=/Users/giginet/cocos2d-x-3.0/tools/bindings-generator
extra_flags=
Exécutez le script
Tout ce que vous avez à faire est de passer les arguments appropriés à generator.py dans binding-generator
.
Puisqu'il y a de nombreux arguments, il est pratique d'écrire un wrapper comme celui-ci
#!/bin/bash
GENERATOR_ROOT=${COCOS2DX_ROOT}/tools/bindings-generator
INI_FILE=bind_sample.ini
SECTION_NAME=your_game
OUTPUT_PATH=../Classes/LuaGlue
OUTPUT_NAME=lua_your_game_auto
LD_LIBRARY_PATH=${CLANG_ROOT}/lib $PYTHON_BIN ${GENERATOR_ROOT}/generator.py $INI_FILE -s $SECTION_NAME -t lua -o ${OUTPUT_PATH} -n $OUTPUT_NAME
En faisant cela, lua_your_game_auto.h / cpp
sera généré sous ../ Class / LuaGlue
. génial!
Exemple de projet
J'ai créé un référentiel de vérification sur Github, je vais donc le mettre là-bas.
LuaBindSample/binding-generator at master · giginet/LuaBindSample
Il fonctionne lorsqu'il est cloné sous $ COCOS2DX_ROOT / projects
.
Qu'en est-il de la liaison JavaScript?
Je ne l'ai pas essayé, mais je sens que je peux aussi y aller. Veuillez écrire à quelqu'un.
Résumé
Construire l'environnement a demandé beaucoup de travail, mais c'est formidable de pouvoir générer facilement un Glue Code. Il est également bon de pouvoir décrire de manière flexible avec des expressions régulières.
J'en ferai un usage efficace la prochaine fois que je créerai un jeu.
Articles liés à Lua
Ce sont des informations utiles liées à Lua que j'ai écrites précédemment.
J'ai essayé d'automatiser la vérification de la syntaxe de Lua avec Jenkins --5.1 Sara Udon
Expliquons la liaison Lua de cocos2d-x --5.1 Saraudon
Publicité
Nous avons sorti un jeu appelé "VOXCHRONICLE", un RPG à défilement arrière créé par cocos2d-x qui joue des sons.
Le jeu est totalement gratuit, donc si vous trouvez cet article utile, essayez-le. Lua Binding est principalement utilisé dans ce jeu.
VOXCHRONICLE - sur l'App Store sur iTunes
Le RPG à défilement arrière "VOXCHRONICLE" qui joue le son est sorti --5.1 Sara Udon
Une histoire d'essayer de la musique interactive avec un jeu iPhone --5.1 Saraudon
giginet/VOXCHRONICLE