0

現在、Cocos2D を使用して iOS デバイスでタッチを読み取って保存しようとしています。私の方法は、ccTouchBegan、ccTouchMoved、ccTouchCanceled、および ccTouchEnded 関数で各タッチ (マルチタッチが有効になっている) を個別に処理することです。

重要な ivar は次のとおりです。

  • activeTouches (新しい有効なタッチ (ジョイスティックの近くにないことを意味する有効な意味) が受信されたときに増加または減少する int)。
  • acceptingGestures (新しいタッチを無視するために使用されるブール値)
  • GestureTimer (update 関数で ccTime によって連続的にインクリメントされるフロート。あるしきい値を超えると、acceptingGestures は FALSE に設定されます)

これが私のコードです:

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint touchLocation = [touch locationInView: [touch view]];
    touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];
    touchLocation = [self convertToNodeSpace:touchLocation];

    //check to see if touch is near joystick to prevent accidental gestures. may want to consider increasing the 'deadzone' value
    if(abs(self.joystickLocation.x - touchLocation.x) <= 35 && abs(self.joystickLocation.y - touchLocation.y) <= 35)
    {
        return NO;
    }

    if(self.activeTouches == 0)
    {
        [self setGestureTimerEnable:TRUE];
        [self setGestureTimer:0.0f];
    }

    if(self.acceptingGestures == TRUE);
    {
        if (self.firstTouch == nil)
        {
            self.firstTouch = touch;
            self.activeTouches++;
            return YES;
        }
        else if (self.secondTouch == nil)
        {
            self.secondTouch = touch;
            self.activeTouches++;
            return YES;
        }
    }

    CCLOG(@"touched: %f, %f\n",touchLocation.x, touchLocation.y);
    return NO;
}

ccTouchBegan 関数で奇妙な問題が発生しています。エミュレーターを使用した私のテスト シナリオでは、ソフトウェアによって 1 つのタッチが認識され、その後、gestureTimer が実行されています。x 時間後、gestureTimer はしきい値を超え、acceptingGestures を FALSE に設定します。次に、画面に 2 回目のタッチを適用すると、コードはタッチを受け入れ、activeTouches 変数をインクリメントします。それができないはずです!

デバッガーを使用してブレークポイントを設定し、この奇妙なイベントをキャプチャしようとしました。acceptGestures が FALSE であっても (ブレークポイントでの acceptGestures 式は実際には FALSE です)、コードは依然として If ステートメントを通過します! 添付のスクリーンショットで、acceptingGestures が FALSE になっていることに注意してください。

助けていただければ幸いです!ありがとうございました!

デバッガーのスクリーンショット。 acceptingGestures が FALSE であることに注意してください。

4

1 に答える 1