游戏编程:关键区域保护

时间:2013-04-21 23:23:20

标签: ios objective-c cocos2d-iphone

您将如何保护cocos2d中的共享资源,以便一次只允许一个类或方法访问或更改它?我最初的目的是设置一个处理锁定/解锁协调的类,如下所示:

- (BOOL)requestLock {
    if (self.lockAvailable == YES) {
        self.lockAvailable = NO;
        return YES;
    }
    return NO;
}

- (void)returnLock:(CGFloat)time {
    self.timer = 0;
    self.timeToUnlock = time;
}

- (void)update:(CGFloat)dt {
    self.timer += dt;
    if (self.timer > self.timeToUnlock) {
        self.lockAvailable = YES;
    }
}

@end

但它似乎没有按预期工作。在我的一个类抓取一个锁之后,它调用执行一些操作,然后returnLock执行该操作所需的时间。然而,结果是出乎意料的,因为似乎任何其他尝试请求锁定的类都可以这样做,无论解锁前提供的时间如何。我在这里有某种缺陷吗?

另一方面说明:这在某种程度上最终会变得非常低效吗?我有大约3个类试图在每次更新时访问相同的资源。每次他们一遍又一遍地叫“requestLock”。

1 个答案:

答案 0 :(得分:0)

如果确实这是cocos2d安排的'更新',即使您在同一更新周期中有多个访问者,它们也永远不会同时访问 - AFAIK cocos2d在单个线程上运行。