1

我正在使用CCPanZoomController使我的“地图”(一个图像)可缩放和平移。在这张地图上,我希望有可点击/可触摸的精灵,当点击它时会改变精灵中的图像。

问题是当用户捏住屏幕(缩小/缩小)时,他们可能会触摸精灵,这会改变精灵的图像,这是我不想要的。

我有一个想法来解决这个问题,但由于我是 Cocos2d 的新手,所以我不知道如何实现它:我认为我可以检测到用户何时触摸屏幕/精灵,并且不移动他们的触摸(就像捏或平移一样)通过检测用户第一次触摸屏幕的时间(将初始触摸转换为坐标),然后当用户停止触摸屏幕(将其转换为坐标),并比较两者,以及如果它们没有变化(或变化很小),那么改变精灵的图像?

我该怎么做呢?非常感谢任何可以提供帮助的人!!

4

2 回答 2

1

所以我自己在我的游戏中一直在使用 CCPanZoomController 并且遇到了和你类似的问题,但是有很多不同的方面,比如当他们触摸一个精灵时,我不想让背景随之移动,或者我想要当背景缩放时,精灵不会移动。所以我所做的是为我不想做出反应的层创建方法来“关闭”触摸,并在另一层中的操作完成后重新启用它们。

我在每一层中创建了以下方法来禁用它或启用它以用于我从不同的触摸事件调用的触摸。

// Public Method: Allows for disabling touch for this layer and re-enabling it
-(void)enableTouches:(BOOL)enable
{
    // Check if the bool value is to enable or disable touches
    if (enable) {
        // Call for the removal of all touch locations in array in the CCLayerPanZoom instance
        [_panZoomLayer removeTouchesFromArray];

        // Call the touch dispatcher and add the CCLayerPanZoom back as a delegate for touches
        [[CCTouchDispatcher sharedDispatcher] addStandardDelegate:_panZoomLayer priority:0];

        CCLOG(@"PanZoomWrapperLayer:enableTouches - LayerPanZoom touches enabled");

    } else {

        // Call the touch dispatcher to remove the CCLayerPanZoom as a delegate to disable touches
      [[CCTouchDispatcher sharedDispatcher] removeDelegate:_panZoomLayer];

      CCLOG(@"PanZoomWrapperLayer:enableTouches - LayerPanZoom touches disabled");
    }
}
于 2012-08-23T20:02:02.950 回答
0

我找到了解决这个问题的简单方法。但是它可能不适合您的需求!

  1. 我将 CCMenu 类子类化并覆盖-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event如下:

    -(void) ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event { [_selectedItem unselected]; _selectedItem = 无;}

  2. 我已touchSwallow将该新菜单实例的属性设置为NO.

于 2013-08-22T13:29:49.213 回答