【问题标题】:SpriteKit SKNode does not collide with edgeSpriteKit SKNode 不与边缘碰撞
【发布时间】:2015-09-26 05:22:13
【问题描述】:

我正在使用 Swift 在 SpriteKit 中制作游戏。我一生都无法弄清楚为什么我的节点不会像 SKSpriteNode 的默认行为那样碰撞并从屏幕上反弹。

这是我来自三个不同文件的所有代码:

游戏视图控制器:

override func viewDidLoad() {
    super.viewDidLoad()

    let skView = view as! SKView
    skView.showsFPS = true
    skView.showsNodeCount = true

    let battleScene = CSLevel()
    battleScene.size = view.frame.size
    battleScene.scaleMode = .AspectFill

    skView.presentScene(battleScene)
}

CS等级:

//sorry here's the real code     
class CSLevel: SKScene, SKPhysicsContactDelegate {

    var myWorld: SKNode!
    var leader: CSCharacter?

    override init(size: CGSize) {
        super.init(size: size)

        setUpScene()
        setUpCharacters()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func didMoveToView(view: SKView) {
        super.didMoveToView(view)


    }

    func setUpScene() {
        //Take care of setting up the world and bring in property list

        self.anchorPoint = CGPoint(x: 0.5, y: 0.5) //0,0 to 1,1

        myWorld = SKNode()
        self.addChild(myWorld)

        let map = SKSpriteNode(imageNamed: "map")
        map.position = CGPoint(x: 0, y: 0)

        myWorld.addChild(map)

        myWorld.xScale = 1
        myWorld.yScale = 1

        //Setup physics
        self.physicsWorld.gravity = CGVector(dx: 0, dy: -1)
        self.physicsWorld.contactDelegate = self

        myWorld.physicsBody = SKPhysicsBody(edgeLoopFromRect: screenFrame)
        myWorld.physicsBody?.categoryBitMask = wallCategory
    }

    func setUpCharacters() {
        leader = CSCharacter()
        myWorld.addChild(leader!)
    }

    override func update(currentTime: NSTimeInterval) {

    }

    func didBeginContact(contact: SKPhysicsContact) {
        let firstBody = contact.bodyA
        let secondBody = contact.bodyB

        if firstBody.categoryBitMask == wallCategory || secondBody.categoryBitMask == wallCategory {

        }
    }
}

CS字符:

class CSCharacter: SKNode {

    var character: SKSpriteNode! //this will be the actual image you see of the character

    override init() {
        super.init()

        character = SKSpriteNode(imageNamed: "character")
        self.addChild(character)

        self.physicsBody = SKPhysicsBody(circleOfRadius: character.frame.size.width / 2)
        self.physicsBody?.dynamic = true
        self.physicsBody?.restitution = 5
        self.physicsBody?.allowsRotation = true

        self.xScale = 2
        self.yScale = 2

        self.physicsBody?.categoryBitMask = playerCategory
        self.physicsBody?.collisionBitMask = wallCategory
        self.physicsBody?.contactTestBitMask = wallCategory
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

这是一个错误还是什么?运行 Xcode beta 7.1。我实际上是在遵循一个教程,它的行为与那个人的行为不同,即使我为他输入的函数键入函数。任何帮助或澄清表示赞赏!!!

【问题讨论】:

    标签: ios swift sprite-kit skspritenode skphysicsbody


    【解决方案1】:

    这里#(希望对您有所帮助)

    尝试在“skview.showsNodeCount = true”下方添加“skView.showsPhysics = true” 这将自动跟踪您的物理体周围的线条。 当您运行您的应用程序时,您应该会在边缘循环所在的场景周围看到一条细蓝线。 如果不是,您可能需要添加一个参数来“让battleScene = CSLevel()”。 所以“让battleScene = CSLevel()”现在是“让battleScene = CSLevel(size: skView.frame.size)”。

    换句话说,您的节点可能正在通过边缘循环,因为未指定边缘循环的大小

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多