我最近在我的项目中添加了CCLayerPanZoom cocos2d扩展程序,让我的游戏场景变焦和滚动就像我想要的那样。现在,当玩家采取某些行动时,我希望能够在执行动作时暂时禁用平移/缩放,但无法弄清楚如何操作。我四处搜索,在论坛中发现了以下代码,但它不起作用,或者我不知道如何使用它。
有没有人知道如何使用不同的代码或下面的代码正确地执行此操作?
-(void)enableTouches:(BOOL)enable {
if(enable) {
[[CCTouchDispatcher sharedDispatcher] addStandardDelegate:self priority:0];
_panZoomLayer.isTouchEnabled = YES;
CCLOG(@"LayerPanZoom enabled.");
} else {
[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
_panZoomLayer.isTouchEnabled = NO;
CCLOG(@"LayerPanZoom disabled.");
}
}
答案 0 :(得分:3)
我终于想通了,并想我会在这里发回答案分享。我发布的代码不起作用,因为我发回的是self而不是_panZoomLayer。所以这是让你自己工作的步骤。
添加以下代码作为调用新CCLayerPanZoom类的方法。
-(void)enableTouches:(BOOL)enable {
if(enable) {
[[CCTouchDispatcher sharedDispatcher] addStandardDelegate:_panZoomLayer priority:0];
CCLOG(@"LayerPanZoom enabled.");
} else {
[[CCTouchDispatcher sharedDispatcher] removeDelegate:_panZoomLayer];
CCLOG(@"LayerPanZoom disabled.");
}}
注意:确保将父类的实例作为要删除的委托。
为了重新启用并使其正常运行,您必须在调用重新注册委托之前从CCLayerPanZoom类中的数组中删除所有条目。我在CCLayerPanZoom类中创建了一个新方法,如下所示,只需在上面的addStandardDelegate方法之前调用它。
- (void)removeTouchesFromArray { [self.touches removeAllObjects]; }
然后这一切都很棒!花了一些时间来学习如何使用这个扩展,但是一旦你弄明白它就完美了。我可以单指平移,双指缩放/平移,设置整个场景的中心位置,限制平移过去的边缘,并设置最小/最大比例。我知道人们在这方面遇到了很多问题,但这是一个很好的扩展,只需要花点时间来理解它。如果您有任何疑问,请告诉我。希望这有助于其他人。