Итак, прямо сейчас мой код представляет 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;
}
}
}
Зазор Мне нужно закрыть на нижней playerCards