У меня проблема с моими врагами. Я сделал 5 из них, и каждый из них выходит на сцену независимо друг от друга. Но дело в том, что они почти одинаковы, кроме взглядов. Им нравится появляться в группах, один на другой, потому что у них есть один случайный механизм для каждого. Я попытался использовать SKConstraint, чтобы сделать промежуток между ними, но он не работает для меня.Можно ли использовать какой-то контейнерный узел вместо SKSpriteNode для обозначения врагов?
Итак, я подумал о другом подходе: я хочу использовать что-то, как пустой узел, чтобы представлять врага, прежде чем он появится на сцене (они похожи на нижние трубы в птице птицы, идущей с правой стороны влево). И прежде чем они появятся на экране, я хочу, чтобы моя игра случайным образом выбирала между 5 узлами и выполняла правильную анимацию. Из-за этого моя групповая проблема будет решена.
Как я мог это сделать?
Теперь я использую их узел. Я предоставить код, если это поможет:
var robot = SKSpriteNode()
let robotAtlas = SKTextureAtlas(named: "robot")
var robotArray = [SKTexture]()
robotArray.append(robotAtlas.textureNamed("robot0"));
robotArray.append(robotAtlas.textureNamed("robot1"));
тогда я применяю physicBodies им
robot = SKSpriteNode(texture: robotArray[0]);
robot.position = CGPointMake(CGRectGetMaxX(self.frame), CGRectGetMidY(self.frame) - 138)
self.robot.name = "robot"
self.addChild(robot)
Как я могу это сделать, или, может быть, есть и другие способы, чтобы сделать такую вещь?
На данный момент, это моя схема: Это случайная функция:
func random() -> UInt32 {
var range = UInt32(60)..<UInt32(200)
return range.startIndex + arc4random_uniform(range.endIndex - range.startIndex + 1)}
У меня есть пользовательский класс внешнего вида:
class EnemyAppear {
var nowAppear = false
var waitToAppear = UInt32(0)
var currentInterval = UInt32(0)
init(nowAppear:Bool, waitToAppear:UInt32, currentInterval:UInt32) {
self.nowAppear = nowAppear
self.waitToAppear = waitToAppear
self.currentInterval = currentInterval }
func shouldRun() -> Bool {
return self.appearInterval > self.waitToAppear }
Тогда у меня есть статус, чтобы отслеживать враг:
var enemyStatus:Dictionary<String,EnemyAppear> = [:]
enemyStatus["robot"] = EnemyAppear(nowAppear: false, waitToAppear: random(), currentInterval: UInt32(0))
enemyStatus["drone"] = EnemyAppear(nowAppear: false, waitToAppear: random(), currentInterval: UInt32(0))
И в функции обновления У меня есть функция, которая перемещает их:
func enemyRun() {
for(enemy, enemyAppear) in self.enemyStatus {
var thisPet = self.childNodeWithName(enemy)!
if enemyAppear.shouldRun() {
enemyAppear.waitToAppear = random()
enemyAppear.currentInterval = 0
enemyAppear.nowAppear = true
}
if enemyAppear.nowAppear {
if thisPet.position.x > petMaxX {
thisPet.position.x -= CGFloat(self.groundSpeed)
}else {
thisPet.position.x = self.originalPetPositionX
enemyAppear.nowAppear = false
self.score++
self.scoreText.text = String(self.score)
}
}
}
Все, что мне нужно, это установить расстояние между врагами.
Я дважды читал ваш вопрос и до сих пор не знаю, чего вы пытаетесь достичь. Вы пытаетесь перемещать врагов в формации или создавать их случайно на экране и перемещать их по отдельности? – Whirlwind
Создайте пустой/прозрачный SKSpriteNode. – sangony
@Whirlwind К настоящему моменту моя программа порождает 5 разных врагов, 5 разных узлов. Я хочу, чтобы он породил только 1 врага, вы знаете, как скелет. И я хочу, чтобы он выбирал из 5 узлов, например, из пяти скинов, и клал один на этот скелет. Например, подумайте о автозаводе. Сначала автомобиль не имеет цвета. И есть пять разных цветов, чтобы нарисовать этот автомобиль. Я хочу, чтобы он случайным образом выбирал этот цвет и рисовал его. Имеет ли это смысл? – TimurTest