0

我目前正在尝试使用 Cocos2D 在 iOS 设备上读取和存储触摸。我的方法是在 ccTouchBegan、ccTouchMoved、ccTouchCanceled 和 ccTouchEnded 函数中单独处理每个触摸(启用多点触控)。

重要的变量是:

  • activeTouches(当接收到新的有效触摸(有效表示不在操纵杆附近)时递增或递减的 int)。
  • acceptingGestures(用于忽略任何新触摸的布尔值)
  • 手势定时器(float,在更新函数中由 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。然后我对屏幕应用第二次触摸,代码接受触摸并增加 activeTouches 变量!它不应该这样做!

我使用调试器设置了一个断点,并试图捕捉这个奇怪的事件。即使acceptingGestures 是FALSE(断点处的acceptingGestures 表达式确实是FALSE),代码仍然通过If 语句!在随附的屏幕截图中,请注意 acceptingGestures 为 FALSE。

我将不胜感激任何帮助!谢谢!

调试器截图。 请注意,acceptingGestures 是 FALSE。

4

1 回答 1

2

我发现了我的问题。我的 if 语句后面有一个分号!呜呜呜。我想删除我的帖子,但也许有人会看到我的手势代码并从中获得一些东西?

于 2013-04-05T19:57:31.810 回答