【问题标题】:Swift: SKAction not working on touch斯威夫特:SKAction 不能在触摸上工作
【发布时间】:2017-07-07 14:11:01
【问题描述】:

我一直在尝试遵循 swift 教程,但我在尝试遵循的每个教程中都遇到了一些非常令人沮丧的事情,每当使用 SKAction 时,我都无法遵循任何教程,因为我的程序永远无法运行。多个程序都发生过这种情况,我永远无法弄清楚。

这是程序的代码:

import SpriteKit
import GameplayKit

class GameScene: SKScene{

let player = SKSpriteNode(imageNamed: "playerShip")

override func didMove(to view: SKView) {

    let background = SKSpriteNode(imageNamed: "background")
    background.size = self.size
    background.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
    background.zPosition = -1
    self.addChild(background)


    player.setScale(1)
    player.position = CGPoint(x: self.size.width / 2, y: self.size.height * 0.2)
    player.zPosition = 2
    self.addChild(player)


}

func fireBullet(){

    let bullet = SKSpriteNode(imageNamed: "bullet")
    bullet.setScale(1)
    bullet.zPosition = 1
    bullet.position = player.position

    let moveBullet = SKAction.moveTo(y: self.size.height + bullet.size.height, duration: 1)
    let deleteBullet = SKAction.removeFromParent()
    let bulletSequence = SKAction.sequence([moveBullet, deleteBullet])
    bullet.run(bulletSequence)

}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    fireBullet()
}

}

每当我在模拟器中构建和运行程序时,一切都很好并且构建成功。但是,每当我点击什么都没有发生时,每次我尝试用 SKAction 做任何事情时都会发生这种情况。我应该提一下,每次单击时屏幕右下角的 FPS 都会发生变化,但没有其他反应,节点数保持不变,屏幕保持不变,子弹不发射。

这是我正在尝试遵循的教程:https://www.youtube.com/watch?v=mvlwZs2ehLU

【问题讨论】:

    标签: ios swift sprite-kit skaction


    【解决方案1】:

    我注意到您在实例化之后实际上并没有将bullet 精灵添加到您的场景中。确保添加addChild(bullet)。我建议实施这样的事情:

    func fireBullet() {
    
        let bullet = SKSpriteNode(imageNamed: "bullet")
        bullet.setScale(1)
        bullet.zPosition = 1
        bullet.position = player.position
        addChild(bullet)
    
        let moveBullet = SKAction.moveTo(y: self.size.height + bullet.size.height, duration: 1.0)
        let deleteBullet = SKAction.removeFromParent()
        let bulletSequence = SKAction.sequence([moveBullet, deleteBullet])
        bullet.run(bulletSequence)
    
    }
    

    【讨论】:

    • 我复制粘贴了代码,但再次没有错误,但就像之前一样,唯一改变的是 fps。节点计数器没有增加,也没有出现项目符号。
    • @Richard Parker 我刚刚意识到你需要将子弹添加到场景中
    • @RichardParker - 看看我的更新让我知道是否有帮助
    • 哦,我的印象是 run 处理好了。教程中的人从未使用过它,这一定是 swift 3 的新增功能。我非常感谢帮助,考虑到我在 swift 2 中找到的所有内容,很难获得答案,而且很难购买 swift 3 特定的解决方案。
    • @RichardParker - 没问题!乐意效劳。这是人们常犯的错误。这在 Swift 2 中也是必要的,但是制作教程的人很可能不小心把它遗漏了。如果你想学习如何使用 Swift 3 制作 2D 游戏,我可以推荐一本对我很有帮助的很棒的电子书。
    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多