私が達成しようとしているのは、Cocos2d SneakyInput SneakyJoystick を使用して、box2d/cocos2d ゲームで LHSprite (レベル ヘルパーを使用して作成) キャラクター/プレイヤーの動きを制御する機能です。
私はそれを機能させることができますが、sneakyJoystick ジョイスティックは私のゲームプレイと同じレイヤーにあり、ゲーム画面がキャラクターに「追従」しているように見えます-カメラ/画面が移動すると、ジョイスティックは実際に画面から移動します.
ジョイスティックを別のレイヤー (「MyUILayer」) に設定し、それを使用して「GameLayer」でキャラクターを制御しようとしました。
これが私がこれをやろうとした方法です:
「MyUILayer」には、次の卑劣なジョイスティック コンポーネントを設定するコードがあります。
@interface MyUILayer : CCLayer {
SneakyJoystick *leftJoystick;
SneakyButton * jumpButton;
SneakyButton * attackButton;
}
@property (readonly) SneakyButton *jumpButton;
@property (readonly) SneakyButton *attackButton;
@property (readonly) SneakyJoystick *leftJoystick;
今、'GameLayer' で 'MyUILayer' の 'leftJoystick' と呼ばれる卑劣なジョイスティックによって作成された値にアクセスしようとしました。
宣言ファイル (GameLayer.h) で:
#import "MyUILayer.h"
@interface GameLayer : CCLayer {
//.............
LHSprite *character;
b2Body *characterBody;
SneakyJoystick *characterJoystick;
SneakyButton *jumpButton;
SneakyButton *attackButton;
//.............
}
GameLayer.mm で:
//in my INIT method
{
MyUILayer *UILAYER = [[MyUILayer alloc]init];
characterJoystick = UILAYER.leftJoystick;
[self scheduleUpdate];
// Define what 'character' is and what 'characterBody' is ('character is a LHSprite, and 'characterBody' is a b2Body)
}
//in my tick method
{
b2Vec2 force;
force.Set(characterJoystick.velocity.x * 10.0f, 0.0f);
characterBody->ApplyForce(force, characterBody->GetWorldCenter());
}
「MyUILayer」の「leftJoystick」の値に基づいて、「GameLayer」の「characterBody」が動かない理由がよくわかりません。
少し長くなってすみません!- プロジェクト ファイルもアップロードしたので、プロジェクト自体をご覧ください: https://dl.dropbox.com/u/2578642/ZOMPLETED%202.zip
助けてくれる人に感謝します!