Состояние переменной теряется при установке в функции распознавания жестов - PullRequest
0 голосов
/ 23 июля 2011

Я использую UIPanGestureRecognizer, чтобы обнаружить пролистывания в моем приложении. Распознаватель жестов срабатывает правильно, но когда я устанавливаю переменную или пытаюсь вызвать функцию из нее, переменные устанавливаются, но на следующей итерации (например, для моей функции tick) переменная не устанавливается. Это как если бы он устанавливал его на другой экземпляр? Может ли кто-нибудь помочь мне здесь?

Так что _ApplyForce устанавливается в значение true в функции handlePan, НО всегда ложно, когда я пытаюсь прочитать его в другом месте (в моей функции тиков).

Обновление: Я добавил все места, которые _ApplyForce используется, чтобы помочь показать, как он используется. Кроме того, причина, по которой я использую эту переменную для запуска импульса силы, заключается в том, что этот вопрос , где я не мог вызвать силу изнутри функции жеста, после того, как выяснилось, что я не смог изменить или измените любую переменную класса - отсюда и новый вопрос.

AppDelegate.mm:

- (void) applicationDidFinishLaunching:(UIApplication*)application
{
    ....
    HelloWorldLayer *layer = (HelloWorldLayer *) [[HelloWorldLayer scene].children objectAtIndex:0];
    UIPanGestureRecognizer *gestureRecognizer = [[[UIPanGestureRecognizer alloc] initWithTarget:layer action:@selector(handlePanFrom:)] autorelease];
    [viewController.view addGestureRecognizer:gestureRecognizer];
}

HelloWorldLayer.h

@interface HelloWorldLayer : CCLayer
{
    ...

    bool _ApplyForce;
}

HelloWorldLayer.mm

- (id)init {
    if ((self=[super init])) {
         _ApplyForce = false;
    }
}

- (void)tick:(ccTime) dt {
    _world->Step(dt, 10, 10);

    if (_ApplyForce)
    {
        NSLog(@"apply force");
        b2Vec2 force = b2Vec2(200, 200);
        _body->ApplyLinearImpulse(force,_body->GetWorldCenter());
        _ApplyForce = false;
    }
}

- (void)handlePanFrom:(UIPanGestureRecognizer *)recognizer {
    if (recognizer.state == UIGestureRecognizerStateEnded) {
            _ApplyForce=true;
    }      
}

1 Ответ

0 голосов
/ 24 июля 2011

Разве это не потому, что в вашем тиковом методе, если _ApplyForce имеет значение true, конец оператора устанавливает его в false? Что означало бы, что сразу после того, как оно истинно, оно ложно.

Я мог бы рекомендовать добавить несколько NSLogs для отслеживания тиков и состояний _ApplyForce.

...