小编Bet*_*ski的帖子

Swift Sound重播

我有这个功能,我在第一个场景中生活:

    func ThemeSound() {
        if let path = NSBundle.mainBundle().pathForResource("InfinityThemeMain", ofType: "wav") {
            let enemy1sound = NSURL(fileURLWithPath:path)
            println(enemy1sound)

            var error:NSError?
            ThemePlayer = AVAudioPlayer(contentsOfURL: enemy1sound, error: &error)
            ThemePlayer.prepareToPlay()
            ThemePlayer.play()
        }
    }
Run Code Online (Sandbox Code Playgroud)

但问题是,它只播放一次主题.我需要它重复播放.我以为我知道如何实现这一目标.

runAction(SKAction.repeatActionForever(SKAction.sequence([SKAction.runBlock(ThemePlayer), SKAction.waitForDuration(2.55)]))
Run Code Online (Sandbox Code Playgroud)

但是我不能粘贴在ViewController中,因为runAction需要一个子连接它.我能用其他任何方式吗?

ios sprite-kit swift

11
推荐指数
1
解决办法
1万
查看次数

Swift/SpriteKit多重碰撞检测?

在此输入图像描述

你好.

我有一个多重碰撞问题.有一颗子弹击中敌人(红色矩形).然后,它得分.有一个螺旋(红色圆圈),当敌人(红色矩形)接触时,它会触发场景结束.

在这种情况下,当敌人击中螺旋,它工作,场景结束,我们进入菜单屏幕.但是,当子弹击中敌人时,同样的事情发生了,我不知道为什么.

现在,这是我的代码:

struct PhysicsCategory {
    static let None : UInt32 = 0
    static let All : UInt32 = UInt32.max
    static let enemyOne : UInt32 = 0b1
    static let enemyTwo : UInt32 = 0b1
    static let bullet : UInt32 = 0b10
    static let spiral : UInt32 = 0b111
}

 spiral.physicsBody = SKPhysicsBody(rectangleOfSize: spiral.size)
        spiral.physicsBody?.categoryBitMask = PhysicsCategory.spiral
        spiral.physicsBody?.contactTestBitMask = PhysicsCategory.enemyOne
        spiral.physicsBody?.collisionBitMask = PhysicsCategory.None
...
        enemyOne.physicsBody = SKPhysicsBody(rectangleOfSize: enemyOne.size)
        enemyOne.physicsBody?.dynamic = true
        enemyOne.physicsBody?.categoryBitMask = PhysicsCategory.enemyOne
        enemyOne.physicsBody?.contactTestBitMask = PhysicsCategory.bullet | PhysicsCategory.spiral
        enemyOne.physicsBody?.collisionBitMask …
Run Code Online (Sandbox Code Playgroud)

collision-detection collision ios sprite-kit swift

7
推荐指数
1
解决办法
7645
查看次数

Swift:在不同场景中更新变量

我的 GameScene 中有一个变量,它是分数变量,它与 SKLabelNode 一起显示在屏幕上。

每次发生碰撞时,都会将 1 添加到 score 中,将其作为字符串传输到 SKLabelNode,然后在屏幕上更新。

问题是,当我从我的 GameOverScene(最终得分与“游戏结束”一起显示的场景)调用它时,我得到第一个得分值,即 0。就像 GameOverScene 是读取变量,但不是更新的变量。如何获取更新的变量?任何人都可以帮忙吗?

代码:

class GameScene: SKScene, SKPhysicsContactDelegate {
    // S C O R E !
    var score = 0
    var scoreText: String = ""

    var scoreOnScreen = SKLabelNode()
...

override func didMoveToView(view: SKView) {
    // S C O R E
    scoreOnScreen.position = CGPoint(x: size.width / 2, y: size.height * 0.8)
    scoreText = String(score)
    scoreOnScreen.text = scoreText
Run Code Online (Sandbox Code Playgroud)

发生碰撞时,得分为+1

func bulletDidCollideWithEnemy(enemy: SKSpriteNode, bullet: SKSpriteNode) {

        score++
        scoreText = …
Run Code Online (Sandbox Code Playgroud)

var scene sprite-kit swift

5
推荐指数
1
解决办法
1989
查看次数

标签 统计

sprite-kit ×3

swift ×3

ios ×2

collision ×1

collision-detection ×1

scene ×1

var ×1