我想要实现的是能够在我的 box2d/cocos2d 游戏中使用 Cocos2d SneakyInput SneakyJoystick 来控制我的 LHSprite(使用关卡助手创建)角色/播放器的移动。
我可以让它工作,但是,sneakyJoystick 操纵杆与我的游戏在同一层,并且看起来好像我的游戏屏幕“跟随”角色 - 当相机/屏幕移动时,操纵杆实际上从屏幕上移开.
我尝试将操纵杆设置在一个单独的层('MyUILayer')中,并使用它来控制我的'GameLayer'中的角色。
这是我尝试这样做的方法:
在“MyUILayer”中,我有设置以下sneakyJoystick 组件的代码:
@interface MyUILayer : CCLayer {
SneakyJoystick *leftJoystick;
SneakyButton * jumpButton;
SneakyButton * attackButton;
}
@property (readonly) SneakyButton *jumpButton;
@property (readonly) SneakyButton *attackButton;
@property (readonly) SneakyJoystick *leftJoystick;
现在,在“GameLayer”中,我尝试访问由“MyUILayer”中名为“leftJoystick”的sneakyJoystick 创建的值。
在声明文件(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());
}
我真的不明白为什么'GameLayer'中的'characterBody'不会根据'MyUILayer'中的'leftJoystick'的值移动。
对不起,如果它有点啰嗦!- 我也上传了我的项目文件,所以你可以看看项目本身:https ://dl.dropbox.com/u/2578642/ZOMPLETED%202.zip
非常感谢任何可以提供帮助的人!