в target-c инициализация объекта и присвоение ему имени экземпляра - PullRequest
0 голосов
/ 03 декабря 2010

в cocos2d-iphone У меня есть класс CCLayer под названием GameScene

Я хочу использовать этот класс из другого класса, однако я не знаю имя экземпляра класса GameScene

Я инициализировалЭкземпляр класса GameScene выглядит следующим образом:

  -(id) init {
        if ((self = [super init])) {

, однако это не даст мне имя экземпляра

. Я прочитал в документации, что можно использовать метод с именем initWithName, поэтому я попробовал что-то вродеэто, но это не работает, это дает мне предупреждение:

       In function '-[GameScene init]':
       warning: 'CCLayer' may not respond to '-initWithName:'

код, который я пробовал:

  -(id) init {
       if ((self = [super initWithName:"gamescene"])) {

Мне понадобится только один экземпляр этого класса в игре, но я не могу пойматьобработчик этого экземпляра, чтобы я мог использовать его из других классов?

любая идея

Большое спасибо


обновление:

Привет

Я собираюсь обновить код, чтобы вы знали, что я пробовал ваше решение, но оно пока не работает

в MyAppDelegate.h У меня есть эти строкикод:

во-первых, у меня есть defВ приложении делегат, чтобы поделиться им с другими классами

MyAppDelegate.h

    #define AD  (MyAppDelegate *)[[UIApplication sharedApplication] delegate]

и в MyAppDelegate.m у меня есть следующий код:

gs  = [[GameScene alloc] init];//this is the gamescene
sc = [gs scene]; //this calls the method -(id)(scene)
[[CCDirector sharedDirector] runWithScene: sc]; //runwithscene

сейчаскогда я пытался использовать gs в другом классе, например, player.m класс-

player.m

GameScene* gs = [AD gs]; //retrieving the instance from appdelegate
[gs updateScoreByAmount:5];/calling the method "updateScoreByAmount"

результаты, угадайте, что произойдет?

программа работает без ошибок, однако экземпляр gs, кажется, отличается от того, который запускается appdelegate, поскольку этот метод updateScoreByAmount не влияет на сцену, которая запускается runWithScene в appdelegate

любая идея?

Большое спасибо всем, кто пытался помочь

Ответы [ 2 ]

0 голосов
/ 04 декабря 2010

Ahmed,

Вместо хранения указателя на сцену верхнего уровня, вы можете сделать это, чтобы получить к ней доступ:

GameScene* myScene = (GameScene*)[[CCDirector sharedDirector] runningScene];

CCDirector является одноэлементным, и он знает, какая сцена в данный момент запущена, поэтому вам не нужно держать указатель на него, вы можете использовать вышеуказанный способ доступа к нему, когда вам это нужно.

Поскольку GameScene является дочерним элементом CCScene, ваша сцена бега будет вашим объектом GameScene.

Надеюсь, это поможет.

0 голосов
/ 03 декабря 2010

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

GameScene *gameScene = [[GameScene alloc] init];

Здесь gameScene будет ссылкой на нужный вам экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...