Набор спрайтов, создающий меню выбора

#sprite-kit

#набор спрайтов

Вопрос:

я только что закончил реализацию основных функций в моей игре Sprite kit Tower Defense, и теперь пытаюсь усовершенствовать игру. Во-первых, я думал о создании меню выбора, чтобы выбрать, какую башню разместить. Это делается в таких играх, как Kingdom Rush, где вы можете выбирать между 4 разными башнями. Тем не менее, я немного растерялся относительно того, как это сделать.

http://i.ytimg.com/vi/ihc4G76jA_Q/0.jpg // изображение выбора башни

любые предложения будут высоко оценены!

Спасибо

Комментарии:

1. Я немного смущен тем, что вы хотите, я никогда не играл в игру, о которой вы упомянули. Это ситуация, когда вы нажимаете на местоположение, чтобы построить башню, которая затем вызывает небольшое меню с выбором башен для строительства? Если это так, то вы можете просто первым касанием проверить, было ли местоположение касания в «сюжете» башни, и если да, то откройте спрайт подменю с кнопками типа башни в качестве дочерних элементов, добавленных к этому спрайту. Следующее касание определит, какой из четырех типов башен в меню был затронут. Если мое описание соответствует тому, что вы не хотите просто сказать, и я добавлю некоторый код для вас.

2. @AndyHeard вау, абсолютно в точку! и спасибо за ваш ответ 🙂

3. @AndyHeard о, и ваше описание в точности соответствует тому, о чем я говорю

Ответ №1:

Как и было обещано, вот небольшой код, который поможет вам начать, на данный момент у меня нет моего Mac, поэтому может быть пара опечаток, но концепция есть:

Начните с определения того, какие области на вашей карте могут содержать башни, это можно сделать несколькими способами, но поскольку это SpriteKit, я буду использовать спрайт с именем towerPlot для представления области, которая может принимать башни.

Определите метод добавления графика в местоположение с помощью чего-то вроде:

 -(void)addTowerPlotAt:(CGPoint)location{
    SKSpriteNode* plot = [SKSpriteNode spriteNodeWithImageNamed: "@plotImage";
    plot.location = location;
    plot.name = @"towerPlot";
    plot.zPosition = 1;  //if needed
    [self addChild: plot];
}
  

И ваш метод viewDidLoad добавляет что-то вроде:

 [self addTowerPlotAt:CGPointMake(someX, someY)];
[self addTowerPlotAt:CGPointMake(otherX, otherY)];
  

Для того, чтобы добавить ваши графики в правильных позициях.

Следующий шаг — проверить, было ли касание расположено на графике;

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    /* Called when a touch begins */

    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode:self];
    SKNode *node = [self nodeAtPoint:location];

    //if the node is a plot, bring up the menu
    if ([node.name isEqualToString:@"towerPlot"]) {
        //add the menu frame
        SKSpriteNode* towerMenu = [SKSpriteNode spriteNodeWithImageNamed: "@TowerMenu";
        towerMenu.position = node.position;

        SKSpriteNode* towerType1= [SKSpriteNode spriteNodeWithImageNamed: "@Tower1";
        towerType1.position = CGPointMake(someX, someY); /* remember this is relative to the menu, the next tower type has an example */
        towerType1.name = @"towerType1";
        [towerMenu addChild:towerType1];

        SKSpriteNode* towerType2= [SKSpriteNode spriteNodeWithImageNamed: "@Tower2";
        towerType2.position = CGPointMake((towerType2.size.width/2)-(towerMenu.size.width/2), 0); /* would add it to to the middle left of the menu */
        towerType1.name = @"towerType2";
        [towerMenu addChild:towerType2];

        //add and position as many tower types as you need
        [self addChild: towerMenu];
    }

    if ([node.name isEqualToString:@"towerType1"]) {
        //code to build the tower here
    }
}
  

Есть и другие мелочи, которые вам понадобятся, например, удаление меню после выбора башни и обеспечение того, чтобы нажатие возвращало имя узлов, если они расположены странно, но, я думаю, в этом суть.