I have created a circle with draw
function in cocos2d, I am trying to detect touch point on circle line, lets say user touches bottom of the circle I want to print 270, if user touches top of the circle I want to print 90 etc....
I have looked this questions but they detect a sprite first then just compare if touches inside or outside of the circle
http://www.cocos2d-iphone.org/forum/topic/21629
how to detect touch in a circle
- (void) draw
{
CGSize winSize = [[CCDirector sharedDirector] winSize];
glLineWidth(10.0f);
ccDrawColor4F(0.2f, 0.9f, 0.02f, 0.6f);
CGPoint center = ccp(winSize.width*0.88, winSize.height*0.8);
CGFloat radius = 100.f;
CGFloat angle = 0.f;
NSInteger segments = 100;
BOOL drawLineToCenter = YES;
ccDrawCircle(center, radius, angle, segments, drawLineToCenter);
}
How can I detect a touch point on the circle line?
Try this , didnt test the code , improved it according to your needs
-(BOOL) ccTouchBegan:(UITouch*)touch withEvent:(UIEvent*)event
{
CGSize winSize = [[CCDirector sharedDirector] winSize];
CGPoint location = [[CCDirector sharedDirector] convertToGL:[touch locationInView:[touch view]]];
CGPoint center=ccp(winSize.width*0.88, winSize.height*0.8);
//now test against the distance of the touchpoint from the center change the value acording to your need
if (ccpDistance(center, location)<100)
{
NSLog(@"inside");
//calculate radians and degrees in circle
CGPoint diff = ccpSub(center, location);//return ccp(v1.x - v2.x, v1.y - v2.y);
float rads = atan2f( diff.y, diff.x);
float degs = -CC_RADIANS_TO_DEGREES(rads);
switch (degs)
{
case -90:
//this is bottom
break;
case 90:
//this is top
break;
case 0:
//this is left side
break;
case 180:
//this is right side
break;
default:
break;
}
}
return YES;
}