BLOGワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。Luaこんにちは、エンジニアの成田です。PhoneなどクロスプラットフォームのゲームをC++で開発できることが大きな特徴ですが、C++以外にもJavascriptバインディングやLuaバインディングがあることはご存知でしょうか?今回はC++からLuaを呼び出し、Cocos2d-xのAPIを操作してみます。1.なぜスクリプト言語を用いるのか実装に入る前に、Luaの生い立ちなど細かいことはWikipediaに譲るとしまして、JavascriptもLuaもスクリプト言語です。ゲームでスクリプト言語を用いるのでしょうか。第一は、ゲームから変数やゲームデータ(e.g.シナリオ、ステージ毎のオブジェクト配置)を外部に分離することができます。ゲーム本体側からはXMLやJSONを読み込む際に必要になるパーサを書く必要はなく、スクリプト言語を呼び出すだけでOKです。第二に生産性の向上があります。開発が進んでいくとゲームは通常巨大化していき、ビルドに時間を要するようになっていきます。パラメータを変更しただけなのに毎度ビルドを行わなければいけないのは大変な苦痛ですが、パラメータがスクリプトという形で外部化されていれば再ビルドの必要はなくなります。第三には、書いたり理解するのが比較的簡単です。C++のような汎用的な低級言語と比べ、スクリプト言語は自由で理解しやすく、また別段コンパイラもIDEも必要ないため、デザイナー・プロデューサーなど非プログラマが調整を行いたい時に自分で触ることもできます。これらのメリットのため、スクリプト言語はコンシューマゲームで利用実績が多数あります。逆にデメリットとしては、C/C++のようなネイティブコードと比較して実行速度が遅い、スクリプト部分がアプリケーション中にテキストファイルとして含まれるため、ハックされやすい等が挙げられます。2.実装それではCocos2d-xのLuaバインディングを試してみましょう。今回は、まずC++ベースのCocos2d-xプロジェクトを作成してから、そこへライブラリを追加することでLuaプログラムを動せるようにします。これにより、C++でのCocos2d-x環境からLuaを動かせるようになるまでの要件が明白になるようにしたいと思います。C++ベースのCocos2d-xプロジェクトを作成します。「cocos2dx」テンプレートを選択してください。下に「cocos2dx_lua」というのが見えますが今回は選択しません。worldアプリケーションが作成されたと思います。Luaプログラムを呼び出すためには、まずCocos2d-xのディレクトリからLuaヘッダ群を持ってくる必要があります。以下ではCocos2d-xのインストールディレクトリを[cocos2dx]、プロジェクトのルートディレクトリを[project-root]とします。下に、新たにluaディレクトリを作成します。ヘッダ群をコピーします。コピーこれらのディレクトリをプロジェクトに追加します。cocos2dx_supportディレクトリに関しては、次のファイルだけを追加するようにします。tolua_fix.hこれで準備ができました。最終的にこのようなディレクトリ構造になっているかと思います。それではLuaプログラムを書いてみましょう。簡単な足し算を行ってみます。ファイルを追加し、次のように記述します。end引数xとyを加算して返すだけの単純な関数addです。#include文を追記し、init()に関数addの呼び出しを追加します。問題がなければコンソールに次のような出力が得られます。return=3これでC++からLuaへ引数を渡し、Luaからの戻り値をC++で取得できることが確認できました。Luaスクリプトではプリミティブ型の計算しか行っていません。今度こそCocos2d-xのLuaバインディングを使用してみましょう。ファイルに次のような関数を追加します。正常に実行できれば次のような画面になります。シーンはC++側で生成し、画面中央のテキストラベルをLua側で生成できました。このようにC++とLuaで密接に連携することもできます。いかがでしたでしょうか。ゲームの生産性や拡張性向上に寄与するスクリプト言語。みなさんも積極的に使ってみてください。Lua!Tweet関連記事2015-02-17Cocos2d-xのゲームを遠隔操作してみよう(コマンド追加編)エンジニアブログ担当の岩原です。今回は前回紹介した遠隔操作...2014-11-28Cocos2d-xのゲームを遠隔操作してみよう今回のエンジニアブログ担当の岩原です。触ってみるこんにちは。今回ブログを担当します長屋です。作っ...こんにちは。先日、ふと思い立っ...2013-09-14cocos2d-xでお手軽オフスクリーンレンダリング今回のエンジニアブログを担当する安藤です。iPhone5SでSSAOを実装してみる。採用情報ワンダープラネットではモバイルゲーム開発者を募集しております。(S編)C/C++でネットワークプログラミングをやってみよう(2)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。