2016-06-27 4 views
-1

Я использую урок Ray Wenderlich под названием UberJump (https://www.raywenderlich.com/87232/make-game-like-mega-jump-sprite-kit-swift-part-2), и я столкнулся с логической ошибкой. Код, используемый для удаления объектов, не работает, и я не могу понять, почему. Я загрузил его исходный код, и его код тоже не работает.UberJump Tutorial Ошибка SpriteKit

Вот что у меня возникают проблемы с:

 override func update(currentTime: NSTimeInterval) { 

    //new max height? 
    //1 
    if Int(player.position.y) > maxPlayerY { 
     //2 
     GameState.sharedInstance.score += Int(player.position.y) - maxPlayerY! 
     //3 
     maxPlayerY = Int(player.position.y) 
     //4 
     lblScore.text = String(format: "%d", GameState.sharedInstance.score) 
    } 


    // Remove game objects that have passed by 
    foregroundNode.enumerateChildNodesWithName("NODE_PLATFORM", usingBlock: { 
     (node, stop) in 
     let platform = node as! PlatformNode 
     platform.checkNodeRemoval(self.player.position.y) 
    }) 

    foregroundNode.enumerateChildNodesWithName("NODE_STAR", usingBlock: { 
     (node, stop) in 
     let star = node as! StarNode 
     star.checkNodeRemoval(self.player.position.y) 
    }) 


    //calculate player y offset 

    if player.position.y > 200.0 { 
     backgroundNode.position = CGPoint(x: 0.0, y: -((player.position.y - 200.0)/10)) 
     midgroundNode.position = CGPoint(x: 0.0, y: -((player.position.y - 200.0)/4)) 
     foregroundNode.position = CGPoint(x: 0.0, y: -(player.position.y-200.0)) 
    } 




} 

«Удалить игровые объекты, которые прошли по» код не работает. Предполагается удалить платформы, когда персонаж прыгает на них. Я написал код неправильно? Благодарю.

EDIT: Вот также функция checkNodeRemovalFunction.

class GameObjectNode: SKNode { 
func collisionWithPlayer(player: SKNode) -> Bool { 
    // Award score 

    return false 
} 

func checkNodeRemoval(playerY: CGFloat) { 
    if playerY > self.position.y + 300.0 { 
     self.removeFromParent() 
    } 
} 
+0

Можете ли вы опубликовать код для функции checkNodeRemoval? – claassenApps

+0

Правильно ли ваш метод 'checkNodeRemoval()'? Можете ли вы добавить его к своему вопросу? – skunkmb

+0

Привет, спасибо за запрос, просто добавила функцию checkNodeRemoval. @skunkmb – danya

ответ

0

Похоже, что может быть проблема с вашей checkNodeRemoval функции в зависимости от того, как вы унаследовав от GameObjectNode. Что-то, что вы могли бы попробовать, это сделать функцию checkNodeRemoval и проверить непосредственно в вашем методе обновления.

// Remove game objects that have passed by 
foregroundNode.enumerateChildNodesWithName("NODE_PLATFORM", usingBlock: { 
    (node, stop) in 
    print("found platform node") 
    if self.player.position.y > node.position.y + 300.0 { 
     print("attempt to remove platform") 
     platform.removeFromParent() 
    } 
}) 

foregroundNode.enumerateChildNodesWithName("NODE_STAR", usingBlock: { 
    (node, stop) in 
    print("found star node") 
    if self.player.position.y > node.position.y + 300.0 { 
     print("attempt to remove star") 
     star.removeFromParent() 
    } 
}) 
+0

Большое спасибо за ваш ответ, но по какой-то причине он по-прежнему не работает. @claassenApps – danya

+0

Давайте попробуем удалить литье узла как PlatformNode или StarNode и напрямую работать с узлом. Попробуйте запустить этот код с помощью операторов печати, чтобы показать, находится ли enumerateChildNodesWithName в платформах и звездах и когда они должны быть удалены. См. Изменения к моему оригинальному сообщению. – claassenApps

+0

Большое спасибо, я сделал это, и единственное, что было напечатано, это «найденный узел платформы» и «найденный звездный узел». «попытка удалить платформу» и «попытка удалить звезду» не печатались. @claassenApps – danya

Смежные вопросы