Я работаю над игрой вроде Scrabble на SpriteKit и застрял на масштабировании и прокрутке Scrabble Board. Сначала позвольте мне объяснить работу за игрой: На моей GameScene у меня:
-
Подкласс SKNode под названием GameBoard Layer (с именем NAME_GAME_BOARD_LAYER), содержащий следующие Дети:
A SKNode subclass for Scrabble Board named NAME_BOARD. A SKNode subclass for Letters Tile Rack named NAME_RACK.
Плитки писем выбраны из плитки и упали на доску Scrabble.
Проблема здесь в том, что мне нужно подражать масштабированию и прокрутке, которые могут быть достигнуты с помощью UIScrollView, который, я думаю, не может быть добавлен в SKNode. Функции, которые мне нужно подражать, следующие:
- Увеличить в точном месте, где пользователь имеет двойное нажатие
- Прокрутка (Tried PanGestures, как-то создает проблему с перетаскиванием плит)
- Сохранять масштабированный SKNode в конкретной области (например, UIScrollView сохраняет увеличенное содержимое в границах scrollView)
Вот код, который я использовал для масштабирования, используя UITapGestures:
В моем 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];
}
}
}
В моем GameBoardLayer Node:
- (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]];
}
}
Будет ли кто-то любезно руководить мной, как я могу достичь этой функциональности?
Спасибо всем.