【问题标题】:Why does this only detect touches in the center of the CCSprites?为什么这只检测到 CCSprites 中心的触摸?
【发布时间】:2010-10-21 04:22:30
【问题描述】:

我正在尝试使用以下代码让手指拖动 CCSprite:

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
    CGPoint location = [touch locationInView: [touch view]];
    CGPoint convertedCoordinate = [[CCDirector sharedDirector] convertToGL:location];

    CGRect redCircleRect = CGRectMake(redCircle.position.x, redCircle.position.y, redCircle.contentSize.width, redCircle.contentSize.height);
    CGRect redCircle2Rect = CGRectMake(redCircle2.position.x, redCircle2.position.y, redCircle2.contentSize.width, redCircle2.contentSize.height);

    if(CGRectContainsPoint(redCircleRect, convertedCoordinate)) {
        //redCircle.position = ccp(convertedCoordinate.x, convertedCoordinate.y);
        NSLog(@"Touched");
        spriteIndex = 1;
    }
    else if(CGRectContainsPoint(redCircle2Rect, convertedCoordinate)) {
        //redCircle2.position = ccp(convertedCoordinate.x, convertedCoordinate.y);
        NSLog(@"Touched2");
        spriteIndex = 2;
    }
    else {
        spriteIndex = 0;
    }
    return YES;
}
-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event {
    CGPoint location = [touch locationInView: [touch view]];
    CGPoint convertedCoordinate = [[CCDirector sharedDirector] convertToGL:location];   

    if (spriteIndex == 1) {
        redCircle.position = ccp(convertedCoordinate.x, convertedCoordinate.y);
    }
    else if (spriteIndex == 2) {
        redCircle2.position = ccp(convertedCoordinate.x, convertedCoordinate.y);
    }

    //CGRect RedCircleRect = CGRectMake(redCircle.position.x, redCircle.position.y, redCircle.contentSize.width, redCircle.contentSize.height);
    //CGRect RedCircle2Rect = CGRectMake(redCircle.position.x, redCircle.position.y, redCircle.contentSize.width, redCircle.contentSize.height);

}

我的逻辑如下:

ccTouchesBegan 中,我得到了触摸的位置,将其转​​换为正确的坐标,然后制作了两个 CGRect,据说它们与我声明的两个精灵的尺寸和位置相同。然后,我检查手指是否使用CGRectContainsPoint 触摸这两个矩形之一。在那里,我有一个名为 spriteIndex 的全局 int,我根据所触摸的圆圈分配一个值。

接下来,在ccTouchesMoved 中,我检查是否为spriteIndex 提供了我要移动的两个精灵之一的“索引”,如果是,则设置所选精灵的位置以进行触摸位置。

问题:

此代码仅能正常工作。它允许我拖动 CCSprites,但前提是我单击中心。而且精灵是 40 x 40 像素,所以一点也不小。

【问题讨论】:

    标签: iphone cocos2d-iphone collision-detection


    【解决方案1】:

    another forum找到答案:

    CGRect redCircleRect = CGRectMake(redCircle.position.x, redCircle.position.y, redCircle.contentSize.width, redCircle.contentSize.height);
    CGRect redCircle2Rect = CGRectMake(redCircle2.position.x, redCircle2.position.y, redCircle2.contentSize.width, redCircle2.contentSize.height);
    

    应该是:

    CGRect redCircleRect = CGRectMake(redCircle.position.x-20.0, redCircle.position.y-20.0, 40.0, 40.0);
    CGRect redCircle2Rect = CGRectMake(redCircle2.position.x-20.0, redCircle2.position.y-20.0, 40.0, 40.0);
    

    这是因为,CGRect 副本是从中心指针制作的,它应该从左下角制作。

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      相关资源
      最近更新 更多