Таргетинг на SKSpriteNode

Итак, ПРЯМО СЕЙЧАС мой код представляет 7 игральных карт. Если игральная карта нажата, она перемещается, удаляет карту из массива playerCard и добавляет ее в массив playedCards. Проблема в том, что я перемещаю карту, я нацеливаю ее с помощью SKNode в методе 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]]) {

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

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. Затем, когда я нацелился на спрайт-узел, мне нужно переместить его туда, где находится ???.

Вот весь мой метод 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;
        }
    }
}

введите здесь описание изображения

Промежуток, который мне нужно закрыть, находится внизу playerCards


person user2415313    schedule 17.02.2015    source источник


Ответы (1)


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

Через несколько дней. фмл

person user2415313    schedule 17.02.2015