2015-06-29 4 views
-1

Я хочу знать, как дать игроку плюс 1 очко каждый раз, когда игрок сталкивается с определенным объектом. Каждый раз, когда объект сталкивается, он будет на предыдущей сумме. Пример: если у меня есть 5 монет, и я собрал 5 в этой текущей игре, общее количество монет у меня будет 10. Было бы больно, если бы вы могли связать меня с местом, в котором есть урок об этом, Objective-C.Swift/SpriteKit - Как добавить точки, когда объект сталкивается с игроком

Примечание: У меня есть все, что связано с нерестами монет и столкновениями, но когда игрок сталкивается с концами игры.

код, я удалил код, который не нужно:

import Foundation 

import SpriteKit 

class GameScene: SKScene, SKPhysicsContactDelegate { 

    var movingGround: PPMovingGround! 
    var square1: PPSquare1! 
    var wallGen: PPWallGen! 
    var diamondGen: PPDiamondGen! 

    var isStarted = false 
    var screenTapped = AVAudioPlayer() 
    var isGameOver = false 
    var isDiamondContact = false 

    override func didMoveToView(view: SKView) {     
     addMovingGround() 
     addSquare1() 
     addDiamondGen() 
     addWallGen() 
     start() 
     addDiamondsLabels()     
    } 

    func addMovingGround() { 
     movingGround = PPMovingGround(size: CGSizeMake(view!.frame.width, kMLGroundHeight)) 
     movingGround.position = CGPointMake(0, view!.frame.size.height/2) 
     addChild(movingGround) 
    } 

    func addSquare1() { 
     square1 = PPSquare1() 
     square1.position = CGPointMake(70, movingGround.position.y + movingGround.frame.size.height/2 + square1.frame.size.height/2) 
     square1.zPosition = 1 
     playerNode.addChild(square1) 
    } 

    func addDiamondGen() { 
     diamondGen = PPDiamondGen(color: UIColor.clearColor(), size: view!.frame.size) 
     diamondGen.position = view!.center 
     addChild(diamondGen) 
    } 

    func addWallGen() { 
     wallGen = PPWallGen(color: UIColor.clearColor(), size: view!.frame.size) 
     wallGen.position = view!.center 
     addChild(wallGen) 
    } 

    func addDiamondsLabels() { 
     let diamondsLabel = PPDiamondsLabel(num: 0) 
     diamondsLabel.name = "diamondPointsLabel" 
     diamondsLabel.alpha = 0.50 
     diamondsLabel.position.x = view!.center.x - 120 
     diamondsLabel.position.y = view!.center.y + 1000 
     diamondsLabel.fontColor = UIColor.whiteColor() 
     diamondsLabel.fontName = "Helvetica" 
     diamondsLabel.fontSize = 40 
     addChild(diamondsLabel) 

     let diamondTotalLabel = PPDiamondsLabel(num: 0) 
     diamondTotalLabel.name = "diamondHighscoreLabel" 
     diamondTotalLabel.alpha = 0.50 
     diamondTotalLabel.position = CGPointMake(view!.frame.size.width - 40, view!.frame.size.height - 60) 
     diamondTotalLabel.fontColor = UIColor.whiteColor() 
     diamondTotalLabel.fontName = "Helvetica" 
     diamondTotalLabel.fontSize = 24 
     addChild(diamondTotalLabel) 

     let diamondTotalTextLabel = SKLabelNode(text: "Diamonds: ") 
     diamondTotalTextLabel.alpha = 0.95 
     diamondTotalTextLabel.fontColor = UIColor.whiteColor() 
     diamondTotalTextLabel.fontSize = 22.0 
     diamondTotalTextLabel.fontName = "Helvetica" 
     diamondTotalTextLabel.position = CGPointMake(-90.0,2.0) 
     diamondTotalLabel.addChild(diamondTotalTextLabel) 
    } 


    func start() { 
     isStarted = true 

     square1.stop() 
     movingGround.start() 
     wallGen.startGenWallsEvery(1) 
     diamondGen.startGenDiamondsEvery(1) 
    } 

    func collisionWithDiamond() { 
     isDiamondContact = true 

    } 


    // MARK - Game Lifecycle 


    func gameOver() { 
     isGameOver = true 

     // everything stops 

     square1.fall() 
     wallGen.stopWalls() 
     diamondGen.stopDiamonds() 
     movingGround.stop() 
     square1.stop() 


     // create game over label 
     let gameOverLabel = SKLabelNode(text: "Game Over!") 
     gameOverLabel.fontColor = UIColor.whiteColor() 
     gameOverLabel.fontName = "Helvetica" 
     gameOverLabel.position.x = view!.center.x 
     gameOverLabel.position.y = view!.center.y + 80 
     gameOverLabel.fontSize = 22.0 
     addChild(gameOverLabel) 



    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 

    } 

    override func update(currentTime: CFTimeInterval) { 

    } 



    // MARK: - SKPhysicsContactDelegate 
    func didBeginContact(contact: SKPhysicsContact) { 

     if !isGameOver { 
      gameOver() 
     } else { 
      !isDiamondContact 
      collisionWithDiamond() 
     } 

    } 
+0

возможно дубликат [Как бы я сохранить «монету» в моей игре в Swift SpriteKit?] (http://stackoverflow.com/questions/28881480/how-would-i-save-coins-in-my-game-in-swift-spritekit) – Whirlwind

+0

Вы можете использовать NSUserDefaults для реализации сохранения данных ... Еще один способ использовать NSCoding ... Есть несколько примеров по теме, поэтому я думаю, вы легко найдете то, что вас интересует, если вы будете искать этот сайт. – Whirlwind

ответ

0

Вы можете создать SKSpriteNodes (которые будут сталкиваться) с .physicsBody.categoryBitMask = WhateverBitMask, а затем в didBeginContact вы можете проверить, если либо contact.bodyA.categoryBitMask == WhateverBitMask, либо contact.bodyB.categoryBitMask == WhateverBitMask. Если это истинное приращение вашей общей суммы монеты. Конечно, вы должны реализовать WhateverBitMask (см ниже)

Посмотрите раздел о столкновениях на http://www.raywenderlich.com/87231/make-game-like-mega-jump-sprite-kit-swift-part-1 для получения дополнительной информации

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