Aplicar zoom e rolar o SKNode no SpriteKit
Estou trabalhando em um jogo como o Scrabble no SpriteKit e fiquei preso no Zoom e na rolagem do tabuleiro do Scrabble. Primeiro, deixe-me explicar o trabalho por trás do jogo: No meu GameScene eu tenho:
Uma subclasse SKNode chamada GameBoard Layer (chamada NAME_GAME_BOARD_LAYER) contendo os seguintes filhos:
A SKNode subclass for Scrabble Board named NAME_BOARD.
A SKNode subclass for Letters Tile Rack named NAME_RACK.
As Cartas de Cartas são colhidas no Rack e jogadas no Scrabble Board.
O problema aqui é que preciso imitar o zoom e a rolagem que podem ser alcançados pelo UIScrollView, que acho que não podem ser adicionados a um SKNode. Os recursos que eu preciso imitar são:
Aumente o zoom no local preciso em que o usuário tocou duas vezesRolar ao redor (Tentei PanGestures, de alguma forma, cria um problema com blocos arrastando e soltando)Mantenha o SKNode com zoom na área específica (como o UIScrollView mantém o conteúdo com zoom nos limites do scrollView)Aqui está o código que usei para aplicar zoom, usando UITapGestures:
No meu GameScene.m
- (void)didMoveToView:(SKView *)view {
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleTapGesture:)];
tapGesture.numberOfTapsRequired = 2;
tapGesture.numberOfTouchesRequired = 1;
[self.scene.view addGestureRecognizer:tapGesture];
}
- (void)handleTapGesture:(UITapGestureRecognizer*)recognizer {
if ([self childNodeWithName:NAME_GAME_BOARD_LAYER]) {
GameBoardLayer *gameBoardLayer = (GameBoardLayer*)[self childNodeWithName:NAME_GAME_BOARD_LAYER];
SKNode *node = [Utils nodeAt:[recognizer locationInView:self.view]
withName:NAME_BOARD
inCurrentNode:gameBoardLayer];
if ([node.name isEqualToString:NAME_BOARD]) {
[gameBoardLayer handleDoubleTap:recognizer];
}
}
}
No meu nó GameBoardLayer:
- (void)handleDoubleTap:(UITapGestureRecognizer*)recognizer {
Board *board = (Board*)[self childNodeWithName:NAME_BOARD];
if (isBoardZoomed)
{
[board runAction:[SKAction scaleTo:1.0f duration:0.25f]];
isBoardZoomed = NO;
}
else
{
isBoardZoomed = YES;
[board runAction:[SKAction scaleTo:1.5f duration:0.25f]];
}
}
Alguém gentilmente me orientaria como posso obter essa funcionalidade?
Obrigado a todos.