这个问题让我沮丧了好几个小时。我基本上有一个我需要使用的游戏UITapGestureRecognizer
,但是如果屏幕上有一个 CCButton,这个轻击手势会覆盖按钮上的轻击。为了解决这个问题,我在我的代码中实现了下面列出的方法-(BOOL)gestureRecognizer
。为了使这一点得到认可,我必须将UITapGestureRecognizer
's 委托设置为self
(至少据我所知)。
我的按钮本身就可以正常工作,没有错误。如果不声明 的委托UITapGestureRecognizer
,则轻拍被完美记录,一切正常,没有错误(我只是无法点击 CCButton)。当我一起实现这一切并设置委托并执行以下操作时,我得到了一个错误。我输入我的LevelScene
,点击我的 mainMenu 按钮,这使我回到我的主菜单,然后再次单击我的播放按钮,然后我的应用程序崩溃,并在我的文件中出现Thread 1: EXC_BAD_ACCESS (code = 1, address = 0xe000000c) 。main.m
我不确定为什么会发生这种情况,另外我正在使用 Spritebuilder,但我不确定这是否会影响任何事情。下面是相关代码(我是通过SpritebuilderGrid
添加到我的)。LevelScene
对不起,代码很长,但我认为这一切都是必要的。
主文件
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
//error occurs right below this line
int retVal = UIApplicationMain(argc, argv, nil, @"AppController");
return retVal;
}
}
水平场景.m
@implementation LevelScene {
Grid *_grid;
}
- (void)mainMenuFromLevelScene {
[[LevelManager sharedInstance] reset];
CCScene *levelScene = [CCBReader loadAsScene:@"MainScene"];
[[CCDirector sharedDirector] replaceScene:levelScene];
}
@end
网格.m
@implementation Grid
- (void)didLoadFromCCB {
UITapGestureRecognizer * gridTapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gridTapped)];
[[[CCDirector sharedDirector] view] addGestureRecognizer:gridTapped];
gridTapped.delegate = self;
}
- (void)gridTapped {
//correctly logs Grid tapped when screen is tapped
CCLOG(@"Grid tapped");
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
//everything works correctly here too
CGPoint touchLocation = [touch locationInNode:self];
if ((touchLocation.y < 0 || levelWonBool)) {
CCLOG(@"returning no");
return NO;
}
return YES;
}
网格.h
#import "CCNodeColor.h"
@interface Grid : CCNodeColor <UIGestureRecognizerDelegate>
@end