2012-08-16 79 views
1

使用Cocos2D進行簡單的遊戲。用戶可以觸摸並追蹤小移動物體的路徑。對象然後遵循路徑。這與飛行控制遊戲機制相似。使用Cocos2D進行iPhone繪製

我的代碼幾乎可以在任何時候運行。不過,有時我試圖觸摸並拖動一個對象,但觸摸回調不會觸發。這裏是我的代碼是如何工作一般:

  • 小型物體在移動繼承CCLayer
  • 我使用的是有一個單一的觸摸參數(ccTouchMoved:withEvent:等)
  • 所有的回調,像ccTouchBegan:withEvent:觸摸回調是對對象(而不是主遊戲層)

我該如何改進觸摸處理以避免上述錯誤?

到目前爲止,我的想法可能是觸摸回調沒有觸發,因爲對象(總是在移動)在用戶嘗試觸摸對象時會稍微移動。這可以通過使用具有觸摸集合作爲參數的回調來處理主遊戲層上的觸摸來解決。由於總物體數量相對較小(比如小於50),因此我可以將每個觸摸位置與每個物體進行比較。

我也嘗試增加對象的可觸摸區域(注意1.5乘法)。這似乎有所幫助,但沒有消除這個問題。

- (BOOL) ccTouchBegan:(UITouch *) touch withEvent:(UIEvent *) event { 
    CGSize size = self.contentSize; 
    CGRect rect = CGRectMake(-size.width/2.0, 
          -size.height/2.0, 
           size.width * 1.5, 
           size.height * 1.5); 
    return CGRectContainsPoint(rect, [self convertTouchToNodeSpace:touch]); 
} 

另一件要嘗試的事情是提高對象的速度並查看回調是否不會更頻繁地觸發。目前物體移動緩慢。

任何幫助非常感謝!

回答

1

IIRC,節點的原點位於其左下角。嘗試

CGRect rect = CGRectMake(0, 0, size.width, size.height); 
return CGRectContainsPoint(rect, [self convertTouchToNodeSpace:touch]); 
+0

我相信你是對的。我注意到我上面的代碼中有一個錯誤。我現在使用的矩形是'(寬度, - 高度,2 *寬度,2 *高度)'這似乎已經解決了這個問題。 – SundayMonday 2012-08-16 16:38:39