CCTouch边界框未创建

时间:2012-08-30 06:01:27

标签: ios cocos2d-iphone

我正在使用Cocos2d在iOS上制作游戏。

这是我用来检查是否触摸过多维数据集的方法

- (void)selectSpriteForTouch:(CGPoint)touchLocation {
    CubeSprite * newSprite = nil;
    for (CubeSprite *sprite in movableSprites) {
        NSLog(@"tested against sprite %i", sprite.boundingBox.origin.x);
        if (CGRectContainsPoint(sprite.boundingBox, touchLocation)) {      
            singleCube = true;
            newSprite = sprite;
            activeTag = sprite.tag;
            break;
        }
    }    
    if (newSprite != selSprite) {

        selSprite = newSprite;
    }
}

但由于某种原因,没有正确设置sprite.boundingBox。

“针对精灵测试”日志只打印出“针对精灵0的测试”,这似乎不可能,因为我可以在屏幕上看到精灵。

这是我用来将立方体添加到场景的方法,

-(void)addCube:(CubeSprite *)cube {
    int totalCubes = [cubes count];
    [cube setPosition:ccp(700 - (totalCubes * 50), 120)];
    [cubes addObject:cube];
    [movableSprites addObject:cube];
    [self addChild:cube];
}

可能出现什么问题?

提前致谢。

编辑,这是我的立方体初始化方法

-(id)initWithNumber:(int)number {
    if( (self=[super init])) {
        [self setTag:number];
        CCSprite* sprite = [CCSprite spriteWithFile:string];
        [self addChild:sprite];
        NSLog(@"Cube created with value of %i and with file %@", number, string);
    }
    return self;
}

3 个答案:

答案 0 :(得分:0)

尝试使用此

 for (CubeSprite *sprite in movableSprites) {
CGRect projectileRect = [sprite boundingBox];

if (CGRectContainsPoint(projectileRect, touchLocation)) {      
            singleCube = true;
            newSprite = sprite;
            activeTag = sprite.tag;
            break;
        }
    }    

答案 1 :(得分:0)

也许CGRectContainsPoint返回false possitive。如果你禁用“休息”;声明,它应该迭代所有的立方体。

有些事情可能是错的: - 立方体的边界框太大,位置不在你想象的位置 - 所有立方体都具有相同的位置 - touchLocation是(0,0)

答案 2 :(得分:0)

Xcode没有给出关于格式字符串格式错误的警告吗?

NSLog(@"tested against sprite %i", sprite.boundingBox.origin.x);

%i表示整数值。 CGPoint的坐标是浮点值。请改用%f