Как редактировать скорость «снаряда» в приложении для iOS - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь отредактировать скорость снаряда, когда высокий счет увеличивается до 30. Однако код работает нормально, и игра работает как обычно, но скорость, с которой движется снаряд, остается той же.

 let touchLocation = touch.location(in: self)

    // Setting up the initial location of projectile
    let particle2 = SKEmitterNode(fileNamed: "smoke.sks")
    let projectile = SKSpriteNode(imageNamed: "inky")
    projectile.position = player.position
    particle2!.targetNode = self
    projectile.addChild(particle2!)

    projectile.physicsBody = SKPhysicsBody(circleOfRadius: projectile.size.width/2)
    projectile.physicsBody?.isDynamic = true
    projectile.physicsBody?.categoryBitMask = PhysicsCategory.projectile
    projectile.physicsBody?.contactTestBitMask = PhysicsCategory.monster
    projectile.physicsBody?.collisionBitMask = PhysicsCategory.none
    projectile.physicsBody?.usesPreciseCollisionDetection = true

    // Determine offset of location to projectile
    let offset = touchLocation - projectile.position

    // Bail out if you are shooting down or backwards
    if offset.x < 0 { return }

    // OK to add now - you've double checked position
    addChild(projectile)

    // Get the direction of where to shoot
    let direction = offset.normalized()

    // Make it shoot far enough to be guaranteed off screen
    let shootAmount = direction * 1000

    // Add the shoot amount to the current position
    let realDest = shootAmount + projectile.position

    // Create the actions
    let actionMove = SKAction.move(to: realDest, duration: 2.0)
    let actionMoveDone = SKAction.removeFromParent()
    projectile.run(SKAction.sequence([actionMove, actionMoveDone]))

     if UserDefaults().integer(forKey: "highscore") >= 30 {
        let actionMove = SKAction.move(to: realDest, duration: 1.0)

}
}

1 Ответ

0 голосов
/ 25 января 2019

Отказ от ответственности : я вообще не эксперт в играх SpriteKit или iOS.Скорее всего, будет лучшее решение.

То, что вы пробовали, уже кажется разумным, кроме того, что вы набрали SKAction.move(to: realDest, duration: 2.0) до того, как проверили счет.

Я думаю, вам лучше сделать что-нибудьнапример:

let highScore = UserDefaults().integer(forKey: "highscore")
let duration: CGFloat = highScore >= 30 ? 1.0 : 2.0
let actionMove = SKAction.move(to: realDest, duration: duration)
// add move end, run the animation

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

...