暂时禁用CCLayerPanZoom触摸

时间:2012-08-09 18:18:59

标签: cocos2d-iphone

我最近在我的项目中添加了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.");
    }
}

1 个答案:

答案 0 :(得分:3)

我终于想通了,并想我会在这里发回答案分享。我发布的代码不起作用,因为我发回的是self而不是_panZoomLayer。所以这是让你自己工作的步骤。

  1. 按照文档的说明将CCLayerPanZoom实施到您的项目中。
  2. 添加以下代码作为调用新CCLayerPanZoom类的方法。

    -(void)enableTouches:(BOOL)enable {
       if(enable) {
          [[CCTouchDispatcher sharedDispatcher] addStandardDelegate:_panZoomLayer priority:0];
          CCLOG(@"LayerPanZoom enabled.");
       } else {
          [[CCTouchDispatcher sharedDispatcher] removeDelegate:_panZoomLayer];
          CCLOG(@"LayerPanZoom disabled.");
       }}
    
  3. 注意:确保将父类的实例作为要删除的委托。

    1. 为了重新启用并使其正常运行,您必须在调用重新注册委托之前从CCLayerPanZoom类中的数组中删除所有条目。我在CCLayerPanZoom类中创建了一个新方法,如下所示,只需在上面的addStandardDelegate方法之前调用它。

      - (void)removeTouchesFromArray {     [self.touches removeAllObjects]; }

    2. 然后这一切都很棒!花了一些时间来学习如何使用这个扩展,但是一旦你弄明白它就完美了。我可以单指平移,双指缩放/平移,设置整个场景的中心位置,限制平移过去的边缘,并设置最小/最大比例。我知道人们在这方面遇到了很多问题,但这是一个很好的扩展,只需要花点时间来理解它。如果您有任何疑问,请告诉我。希望这有助于其他人。