Добавление HUD в сцену GameScene (Cocos2d) - PullRequest
1 голос
/ 17 февраля 2012

Итак, вот ситуация: у меня есть класс GameScene в качестве основной сцены для моей игры.В моей реализации у меня есть +(id)scene, и мой appdelegate запускает игру, используя runWithScene и вызывая этот метод.

Аналогично, я создал класс ControlLayer.Я написал его как подкласс CCLayer, и я планировал добавить ControlLayer поверх основного GameScene.У него есть +(id)control для запуска.

Теперь я не совсем уверен, как все это собрать.Я попытался создать ControlLayer объект в +(id)scene и использовать addChild:z:, чтобы поставить ControlLayer поверх.Джойстики у меня двигаются, когда я прикасаюсь к ним, как они должны.Проблема, с которой я, кажется, сталкиваюсь, заставляет моего игрока двигаться.

Я запланировал GameScene вызывать метод checkJoystick: каждый кадр.Однако, поскольку я объявил объект ControlLayer в +(id)scene, очевидно, что checkJoystick не может получить доступ к моему ControlLayer объекту.Я также добавил объект ControlLayer в свой заголовок, но, очевидно, +(id)scene также не может получить к нему доступ.Я попытался изменить +(id)scene на -(id)scene, это исправляет проблемы с областью действия, но вызывает ошибки.

По сути, я думаю, что мой вопрос таков: как мне объявить этот ControlLayer объект в моем GameScene, чтобы весь класс мог его использовать?Возможно, это будет в init?

1 Ответ

2 голосов
/ 18 февраля 2012

Попробуй это. В вашем классе GameScene добавьте переменную-член в файл .h для класса ControllerLayer.

в GameScene.h

@property (nonatomic, retain) ControllerLayer* myControllerLayer; // don't forget to synthesize in Gamescene implementation

Затем в методе сцены GameScene + сделайте что-то вроде

CCScene* scene = [CCScene node];

GameScene* gameSceneLayer = [GameScene node];
[scene addChild:gameSceneLayer];

ControllerLayer* controllerLayer = [ControllerLayer node];
[scene addChild:controllerLayer];

gameSceneLayer.myControllerLayer = controllerLayer;

Теперь ваша GameScene имеет доступ к ControllerLayer через свойство myControllerLayer

ПРИМЕЧАНИЕ. Есть несколько других способов решения вашей проблемы, например, используйте [scene addChild: z: tag:], а затем используйте getChildByTag ... и т.д.

...