Доступ к событию Sprite in Touch с целью C - PullRequest
0 голосов
/ 30 июня 2011

Я пытаюсь переместить спрайт в точку, к которой тронул пользователь.Моя проблема в том, что я объявляю спрайт внутри моего init следующим образом:

CCSprite *ball = [CCSprite spriteWithFile:@"ball.png"                            
rect:CGRectMake(0, 0, 20, 20)];

и внутри моего события касания:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{

Я ссылаюсь на шар, и он говорит, что он "неопределен"Из-за моего понимания области видимости в других языках, я бы предположил, что мне нужно сделать «шар» глобальной переменной, верно?Я читал, что глобальные переменные обычно "осуждаются" в target-C.Почему это так?Это связано с памятью?

Если вы предложите что-нибудь, пожалуйста, дайте мне знать, если мне нужно освободить его в конце моего приложения.Я действительно новичок в разработке для iOS.

Любой совет будет огромной помощью!

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Глобальные переменные не просто осуждаются в Цели C, они обычно являются плохой практикой для большинства языков.Это приводит к плохому дизайну программы.

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

В этом случае вы, кажется, используете cocos2d - так что, вероятно, ваша сцена должна иметь переменную экземпляра ball.Вы должны отпустить его (вы не называете dealloc в Цели C), когда ваша сцена освобождена, если не раньше.

Если вы не знаете, когда выпустить ее, вы, вероятно, захотитепрочитайте Руководство по программированию управления памятью .Для начала, если вы хотите, чтобы эта переменная экземпляра не вызывала сбой вашей программы, вам нужно сохранить этот спрайт.

0 голосов
/ 30 июня 2011

Вот как сделать CCSprite глобально доступным в вашем файле метода:

// in .h
@interface HelloWorld : CCLayer
{
    CCSprite *ball;
}

И тогда вы можете получить доступ к «шару» внутри файла метода

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