2013-04-21 85 views
0

你将如何去保护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'。

回答

0

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

+0

问题在于其他地方,那么,因为它的所有cocos2d预定更新。 UIGestures线程安全吗?这可能是问题所在 – Clev3r 2013-04-22 02:17:54