2015-02-17 4 views
0

Итак, прямо сейчас мой код представляет 7 игральных карт. Если игровая карта нажата, она перемещает удаляет карту из массива playerCard и добавляет ее в массив playedCards. Проблема в том, что перемещение карты я нацеливаю на нее с помощью SKNode в методе touchesBegan;SKSpriteNode Targeting

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInNode:self]; 
    SKNode *node = [self nodeAtPoint:location]; 
    if ([node isKindOfClass:[CardSpriteNode class]]) { 

Хорошо, без проблем карта поднимается вверх. Проблема в том, что все остальные карты, оставшиеся в playerCards, теперь нужно переместить i.e (затянуть), поскольку они были изначально. Вот моя формула расстояний между ними;

int cardsLaid = i * (cardDisplay.size.width/3); 

Так что теперь я могу получить карты, которые первоначально отображаются и те, которые прикасались, чтобы сформировать хороший зазор между ними.

Что мне нужно сделать, это переместить карты обратно в хороший разрыв, после того, как одна из карт между ними была перенесена

 for (int i = 0; i < [playerCards count]; i++) { 
      int cardsLaid = i * (cardDisplay.size.width/3); 
      CGPoint forPoint = CGPointMake((0.5 - (self.frame.size.width/4)) + cardsLaid, 0.0); 

      playerCards[i] //Here I need to target each skspritenode.name for each playerCards 

      [??? runAction:[SKAction moveTo:forPoint duration:0.6]]; 
     } 

Так что мне нужно, чтобы предназначаться каждый SKSpritenode.name самая имена, сохраненные в файле playerCards MutableArray. Затем, как только я нацелился на spritenode, мне нужно переместить его, где находится ???.

Это мой метод touchesBegan, если это помогает.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInNode:self]; 
    SKNode *node = [self nodeAtPoint:location]; 
    if ([node isKindOfClass:[CardSpriteNode class]]) { 
     int add = (int)[playerCards count] * (cardDisplay.size.width/3); 
     CGPoint origPos = CGPointMake(-self.frame.size.width/2.8 + add, -218); 

     if ([cardsPlayed containsObject:node.name]) { 
      //Card is already played, return to original position and remove from array. 
      CGPoint point = origPos; 

      [node runAction:[SKAction moveTo:point duration:0.6]]; 

      node.zPosition = zPosCount; 
      zPosCount += 1; 

      [cardsPlayed removeObject:node.name]; 
      [playerCards addObject:node.name]; 

      NSLog(@"this ran"); 
     } else { 
      //Card is not already played, position to add card and add to array. 
      amountOfCardsLaid = (int)[cardsPlayed count] * (cardDisplay.size.width/3); 
      CGPoint point = CGPointMake((0.5 - (self.frame.size.width/4 
      )) + amountOfCardsLaid, 0.0); 
      [node runAction:[SKAction moveTo:point duration:0.6]]; 

      node.zPosition = zPosCount; 
      zPosCount += 1; 

      [playerCards removeObject:node.name]; 
      [cardsPlayed addObject:node.name]; 

      for (int i = 0; i < [playerCards count]; i++) { 
       int cardsLaid = i * (cardDisplay.size.width/3); 
       CGPoint forPoint = CGPointMake((0.5 - (self.frame.size.width/4)) + cardsLaid, 0.0); 

       playerCards[i] 

       [??? runAction:[SKAction moveTo:forPoint duration:0.6]]; 
      } 
     } 

     //Hide.Unhide buttons 
     if ([cardsPlayed count] == 0) { 
      if (addButton.hidden == FALSE) addButton.hidden = true; 
      if (cancelButton.hidden == FALSE) cancelButton.hidden = true; 
     } else { 
      if (addButton.hidden == TRUE) addButton.hidden = false; 
      if (cancelButton.hidden == TRUE) cancelButton.hidden = false; 
     } 
    } 
} 

enter image description here

Зазор Мне нужно закрыть на нижней playerCards

ответ

0
SKNode *tempNode = [self childNodeWithName:playerCards[i]]; 

После нескольких дней. fml