2012-08-09 91 views
0

我最近添加了CCLayerPanZoom cocos2d擴展到我的項目,並讓我的遊戲場景縮放和滾動就像我想要的。現在,當玩家採取某些行動時,我希望能夠在他們執行某個動作時臨時禁用平移/縮放,但無法弄清楚如何執行此操作。我搜索了一下,在論壇中發現了下面的代碼,但它不起作用,或者我不知道如何使用它。暫時禁用CCLayerPanZoom觸摸

有誰知道如何正確使用不同的代碼或下面的代碼?

-(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

_panZoomLayer.isTouchEnabled = YES和NO行不應該在我的例子中。我正在測試並嘗試停止觸摸,但在重新啓用時觸發所有事情。對不起,錯字。 – XBXSlagHeap 2012-08-09 19:53:13

回答

3

我終於弄明白了,想通了,我會將答案發回這裏分享。我發佈的代碼無效,因爲我發送的是自己而不是_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."); 
        }} 
    

注意:請務必把父類的實例作爲委託刪除。

  • 爲了重新啓用,並讓它正常運行,必須調用重新註冊該委託之前去除從CCLayerPanZoom類陣列中的所有條目。我在CCLayerPanZoom類中創建了一個新方法,並在上面的addStandardDelegate方法之前調用它。

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

  • 那麼這一切都很好!花了我一段時間來學習如何使用這個擴展,但一旦你全力以赴,它就會很完美。我可以單手指平移,雙指放大/平移,設置整個場景的中心位置,限制平移過去的邊緣,並設置最小/最大比例。我知道人們在這方面遇到了很多問題,但這是一個很好的擴展,只是需要一些弄清楚才能理解它。如果您有任何問題,請告訴我。希望這可以幫助別人。