在手势识别器功能中设置时,可变状态丢失

时间:2011-07-23 13:05:34

标签: iphone object cocos2d-iphone box2d uigesturerecognizer

我正在使用UIPanGestureRecognizer检测我的应用中的滑动。手势识别器正确触发,但是当我设置变量或尝试从其中调用函数时,变量被设置但是,在下一次迭代(例如我的tick函数)中,未设置变量。就好像它是在不同的实例上设置它?任何人都可以帮助我吗?

所以_ApplyForcehandlePan函数中设置为true但是当我尝试在其他地方读取它时(在我的tick函数中)它总是假的。

更新:我添加了所有地方_ApplyForce用于帮助显示它的使用方式。此外,我使用此变量触发力冲动的原因是因为this question我无法在手势功能中触发力,经过一些调查后发现我无法改变或改变任何力类变量 - 因此是新问题。

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 :(得分:0)

是不是因为在你的tick方法中,如果_ApplyForce为true,语句的结尾会将其设置为false?这意味着在它成立之后立即就是假的。

我可能会建议添加一些NSLog来跟踪刻度和_ApplyForce状态。