cocos2dxだけではないのですが、ジョイスティックを一から実装してコードを書いたりするのはとてもメンドクサイです。(私には難しいすぎる作業です) ということで、今回はこの「ジョイスティック」や「ボタン」の機能を簡単に実装できる方法を紹介したいと思います。
とは言いましても、cocos2dでお世話になった「SneakyInput」をcocos2dxでも使ってみようという試みです。 実際にプログラミングが下手糞な私でも簡単に実装出来ました。
SneakyInputをダウンロードをする
以下のサイトから、SneakyInputの各クラスをプロジェクトに追加してください。 cpinan/SneakyInput-Cocos2dx-2.0.x · GitHub
画面の右の方に「Download ZIP」がありますので、ここからダウンロード。 そのままXcode上に追加をしてあげれば完了です。
バージョンは気にしない
バージョンが「Cocos2dx-2.0.x」となっていますが、現在私が開発している環境である「cocos2dx-2.1.3」でも使えました。 ですので、大幅なアップグレードがない限りは多分大丈夫でしょう。
ジョイスティックを実装する
まずは、画像を2種類用意してください。
- ジョイスティックの背景になる画像
- ジョイスティックの動く部分の画像
とりあえず、こんな感じの画像です。
実際のコード
これは、cocos2dの時とほぼ同じです。 以下の用に、ジョイスティックを配置します。 [c]SneakyJoystick *joystickbase = new SneakyJoystick();
joystickbase->initWithRect(CCRectMake(0, 0, 100.0f, 100.0f));
joystickbase->autorelease();
SneakyJoystickSkinnedBase *skinjoystick = SneakyJoystickSkinnedBase::create();
skinjoystick->setBackgroundSprite(CCSprite::create("jyostric1.png")); //ジョイスティックの背景
skinjoystick->setThumbSprite(CCSprite::create("jyostric2.png")); //ジョイスティックの動く画像
skinjoystick->setJoystick(joystickbase);
skinjoystick->setPosition(ccp(550,50));
//ヘッダーで SneakyJoystick *joystickと定義をしてます。
joystick = skinjoystick->getJoystick();
joystick->setAutoCenter(true);
joystick->setHasDeadzone(true);
this->setVisible(false);
this->addChild(skinjoystick,10);
[/c]
setAutoCenterは、自動的に真ん中に戻すかどうか。 setHasDeadZoneは、ジョイスティックが反応しないデッドスペースを設定出来ます。 [c]
//このようにデッドスペースの半径を設定します。 joystick->setDeadRadius(20.0f);
[/c]
[こちらを参考にしました。]
cpinan/SneakyInput-Cocos2dx-2.0.x · GitHub
ジョイスティックを使う
ジョイスティックの設定ができれば、後はジョイスティックを動かした値を取り出すだけです。 CCPointクラスで動かしているポイントを以下の用に取得できます。 [c]CCPoint moveingPoint = joystick->getVelocity();
[/c]
これを上手くゲーム内で利用しましょう。