问题
I am working on a game, in which i am trying to fire two different types if bullets on single tap and double tap respectively.
Heres what I am doing in my touch began method:
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for( UITouch *touch in touches )
{
CGPoint location = [touch locationInView: [touch view]];
location = [[CCDirector sharedDirector] convertToGL: location];
NSLog(@"TOUCH LOCATION IN TOUCH BEGAN = (%f , %f)", location.x , location.y);
NSUInteger tapCount = [touch tapCount];
switch (tapCount)
{
case 1:
{
NSDictionary * touchloc = [NSDictionary dictionaryWithObject:[NSValue valueWithCGPoint:location] forKey:@"location"];
[self performSelector:@selector(startTimer:) withObject:touchloc afterDelay:3];
break;
}
case 2:
{
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(startTimer) object:nil];
[self performSelector:@selector(removeBall) withObject:nil afterDelay:1];
break;
}
default:
{
break;
}
}
}
Now in my perform selector(startTimer:)
I get the co-ordinates of point where I touch in NSPoint
(As I am using NSDictionary
)
All I want to know is.. how we can convert those points to CGPoints.. ?
Any idea how can I do it?
Any help will be truly appreciated.
回答1:
if you are using NSValue
you can get CGPoint
back from that using CGPointValue
.
e.g.
NSDictionary * touchloc = [NSDictionary dictionaryWithObject:[NSValue valueWithCGPoint:location] forKey:@"location"];
CGPoint points = [[touchloc valueForKey:@"location"] CGPointValue];
回答2:
CGPointCreateDictionaryRepresentation
and CGPointMakeWithDictionaryRepresentation
回答3:
The docs say that NSPoint is:
typedef struct _NSPoint {
CGFloat x;
CGFloat y;
} NSPoint;
and CGPoint is:
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
so they're equivalent structs, and you should be able to simply cast to convert from one to the other. Neither is an object type, so you can't store either in a dictionary directly but have to box them up in a NSValue to turn them into objects. You're probably getting NSValue objects from your dictionary, and NSValue has accessors for both types, so you can get the one you need directly without a cast:
CGPoint a = [somePoint CGPointValue];
NSPoint b = [somePoint pointValue];
回答4:
For me, the correct function for save and return cgpoint to nsdictionary is is the following:
NSDictionary * touchloc = [NSDictionary dictionaryWithObject:[NSValue valueWithPoint:cgPointPositionTouchPoint] forKey:@"location"];
CGPoint points = [[touchloc valueForKey:@"location"] pointValue];
来源:https://stackoverflow.com/questions/10737835/nsdictionary-to-cgpoint