2010-10-21 1 views
0

Я пытаюсь позволить пальцем перетащить CCSprite со следующим кодом:Почему это только обнаруживает штрихи в центре CCSprites?

-(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. Там у меня есть глобальный int, называемый spriteIndex, который присваивает значение в зависимости от того, какой круг был затронут.

Далее, в ccTouchesMoved Я проверяю, был ли указатель spriteIndex «индексом» одного из двух спрайтов, которые я пытаюсь переместить, и если да, укажите расположение спрайта, выбранного в месте касания.

Проблема:

Этот код только вид работ. Это позволяет мне перетаскивать CCSprites, но только если я щелкнул по центру. И спрайт 40 на 40 пикселей, поэтому он отнюдь не мал.

ответ

0

Найдено ответ на 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 делаются из центра указателя, где он должен быть сделан из нижнего левого ,