1

Cocos2Dを使って簡単なゲームを作っています。ユーザーは、小さな移動オブジェクトのパスをタッチしてトレースできます。その後、オブジェクトはパスをたどります。これは、Flight Control ゲームの仕組みに似ています。

私のコードはほとんど常にうまく機能します。ただし、オブジェクトをタッチしてドラッグしようとしても、タッチ コールバックが起動しないことがあります。私のコードが一般的にどのように機能するかは次のとおりです。

  • 小さな動くオブジェクトは継承します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 つの試みは、オブジェクトの速度を上げて、コールバックが頻繁に起動しないかどうかを確認することです。現時点では、オブジェクトはゆっくりと移動します。

どんな助けでも大歓迎です!

4

1 に答える 1

1

IIRC、ノードの原点は左下隅にあります。試す

CGRect rect = CGRectMake(0, 0, size.width, size.height);
return CGRectContainsPoint(rect, [self convertTouchToNodeSpace:touch]);
于 2012-08-16T16:29:59.970 に答える