使用SKSpriteNode physicsBody创建墙/障碍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SKSpriteNode physicsBody创建墙/障碍相关的知识,希望对你有一定的参考价值。

我的SKSpriteKit应用程序中有一个单独的“Floor”类。当我第一次创建这个类时,我在整个框架周围都有一个屏障

self.physicsBody = SKPhysicsBody(edgeLoopF​​rom:self.frame)

但这实际上阻止了SKSpriteNodes从屏幕顶部进入,所以现在我想弄清楚如何创建框架墙的左,右和底部而不是顶部。这样我就可以避开屏幕底部的一个SKSpriteNodes(用户仍然可以看到)从离开显示屏时左右移动。我正在尝试下面建造好像它会起作用但是当我启动游戏时我看不到墙壁?我不太确定我做错了什么

skView.showsPhysics = true

    import Foundation
import SpriteKit

    class Floor: SKNode {
        override init() {
            super.init()

            let leftWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 100, height: frame.height))
            leftWall.position = CGPoint(x: 100, y: 100)
            leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size)
            leftWall.physicsBody!.isDynamic = false
            self.addChild(leftWall)

            let rightWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 100, height: frame.height))
            rightWall.position = CGPoint(x: 200, y: 200)
            rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size)
            rightWall.physicsBody!.isDynamic = false
            self.addChild(rightWall)

            // Set the bit mask properties
            self.physicsBody?.categoryBitMask = balloonCategory
            self.physicsBody?.contactTestBitMask = nailDropCategory
            //self.physicsBody?.collisionBitMask = balloonCategory
        }

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

重力正在影响你的墙壁,所以它们永远都会被遗忘。

当您创建边循环时,您不必担心这一点,因为边循环始终是静态的,因为它没有任何体积

现在您正在使用基于体积的身体,因此您需要考虑重力和其他影响身体的力量。

要让你的身体忽略这些力量,只需设置isDynamic = false

let leftWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 100, height: frame.height))
leftWall.position = CGPoint(x: 100, y: 100)
leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size)
leftWall.physicsBody!.isDynamic = false
self.addChild(leftWall)

let rightWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 100, height: frame.height))
rightWall.position = CGPoint(x: 200, y: 200)
rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size)
rightWall.physicsBody!.isDynamic = false
self.addChild(rightWall)

以上是关于使用SKSpriteNode physicsBody创建墙/障碍的主要内容,如果未能解决你的问题,请参考以下文章

如何使 SKSpriteNode 跟随另一个 SKSpriteNode

SKSpriteNode 多个纹理

SKSpriteNode - 创建一个圆角节点?

使用场景编辑器获取 SKSpriteNode 的 userData

以编程方式使用资产创建 SKSpriteNode

Swift - 使用纹理数组更改 SKSpriteNode 纹理