Cocos2D与CGRects接触?

时间:2014-08-04 06:56:32

标签: ios cocos2d-iphone touch cgrect

我试图将屏幕分成四个不同的部分,有四个不同的部分,如下所示:

    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.width;
    CGFloat screenWidth = [UIScreen mainScreen].bounds.size.height;

    CGRect jumpleftRect = CGRectMake(0, screenHeight/2, screenWidth/2, screenHeight/2); //1
    CGRect runleftRect = CGRectMake(0, 0, screenWidth/2, screenHeight/2); //2
    CGRect jumprightRect = CGRectMake(screenWidth/2, screenHeight/2, screenWidth/2, screenHeight/2); //3
    CGRect runrightRect = CGRectMake(screenWidth/2, 0, screenWidth/2, screenHeight/2); //4

然后我骑自行车穿过touchArray并检查触摸位置是否在其中,例如对于这个问题,请说第一个矩形:

NSArray *touchArray = [NSMutableArray arrayWithArray:touchArray];
    for (UITouch *touchInArray in touchArray) {
        CGPoint toucharrayPosition = [touchInArray locationInNode:self];
        if (CGRectContainsPoint(jumpleftRect, toucharrayPosition)) { //1st rect }

然而,似乎矩形处于完全错误的位置。即使我的手指明显位于屏幕的左上角,这也永远不会被调用。我的锚点不受影响,正常,所以我不确定为什么这不起作用。是否有一些具体的原因,为什么触摸不会像在rects中那样注册,即使回想起它们应该是什么?

2 个答案:

答案 0 :(得分:0)

以下是有待观察的内容 -

您从UIScreen获得的值是否正确?你有没有理由使用UIScreen而不是CCDirector的viewSize属性(如果使用v3,如果使用v2则使用winSize)?

你是否启用了触摸功能,这是你在触摸开始或结束方法中的代码吗?如果是这样,那么当您调试时,您是否从locationInNode获得了正确的屏幕位置?在调试期间,rects仍然正确吗?

答案 1 :(得分:0)

不确定这是否是iOS 8中的新行为,但我只是将screenWidth和screenHeight改为:

CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;

现在事情变得非常顺利和顺利。