#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
}
}
Есть и другие мелочи, которые вам понадобятся, например, удаление меню после выбора башни и обеспечение того, чтобы нажатие возвращало имя узлов, если они расположены странно, но, я думаю, в этом суть.