0

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

1 回答 1

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.");
       }}
    

注意:确保将父类的实例作为要删除的委托。

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

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

然后一切都很好!我花了一段时间来学习如何使用这个扩展,但是一旦你弄清楚了它就完美了。我可以单指平移、双指缩放/平移、设置整个场景的中心位置、限制平移过去的边缘以及设置最小/最大比例。我知道人们对此有很多问题,但它是一个很好的扩展,只是需要一些混乱来理解它。如果您有任何问题,请告诉我。希望这对其他人有帮助。

于 2012-08-09T20:45:05.077 回答