2012-05-24 2 views
0

Я работаю над игрой, в которой я пытаюсь запустить два разных типа, если пули на одном кране и два крана соответственно.NSDictionary to CGPoint

Вот что я делаю в моих прикосновениях начали метод:

- (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; 
      } 
     } 
    } 

Теперь в моем perform selector(startTimer:) я получаю координаты точки, где я касаюсь в NSPoint (Как я использую NSDictionary) Все, что я хочу знать .. как мы можем преобразовать эти точки в CGPoints ..?

Любая идея, как я могу это сделать?

Любая помощь будет по-настоящему оценена.

ответ

14

если вы используете NSValue вы можете получить CGPoint назад от использования CGPointValue.

например.

NSDictionary * touchloc = [NSDictionary dictionaryWithObject:[NSValue valueWithCGPoint:location] forKey:@"location"]; 
    CGPoint points = [[touchloc valueForKey:@"location"] CGPointValue]; 
+0

Jadhav: Спасибо братан :) Он работал как шарм – Shailesh

+0

для меня, правильной функции для сохранения и возврата CGPoint к NSDictionary является следующим: NSDictionary * touchloc = [Словарь NSDictionaryWithObject: [Значение NSValueWi thPoint: cgPointPositionTouchPoint] forKey: @ "location"]; CGPoint points = [[touchloc valueForKey: @ "location"] pointValue]; –

1

CGPointCreateDictionaryRepresentation и CGPointMakeWithDictionaryRepresentation

0

документы говорят, что NSPoint является:

typedef struct _NSPoint { 
    CGFloat x; 
    CGFloat y; 
} NSPoint; 

и CGPoint является:

struct CGPoint { 
    CGFloat x; 
    CGFloat y; 
}; 
typedef struct CGPoint CGPoint; 

поэтому они равноценные структур, и вы должны быть в состоянии просто отбрасывать конвертировать из один к другому. Также не существует типа объекта, поэтому вы не можете хранить его в словаре напрямую, но его нужно поместить в NSValue, чтобы превратить их в объекты. Вы, вероятно, получить объекты NSValue из словаря, и NSValue имеет аксессоры для обоих типов, так что вы можете получить нужную вам напрямую, без броска:

CGPoint a = [somePoint CGPointValue]; 
NSPoint b = [somePoint pointValue];  
+0

: Спасибо вам большое, гораздо более понятно. На самом деле .. будучи новичком в Objective C .., это был первый раз, когда я использовал NSDictionary, и поэтому был смущен. – Shailesh

0

Для меня, правильной функции для сохранения и возврата CGPoint к NSDictionary является следующим:

NSDictionary * touchloc = [NSDictionary dictionaryWithObject:[NSValue valueWithPoint:cgPointPositionTouchPoint] forKey:@"location"]; 

CGPoint points = [[touchloc valueForKey:@"location"] pointValue]; 
Смежные вопросы