swift - SKSpriteNode 卡在 init 中(edgeLoopF​​rom :) - SKPhysicsBody

标签 swift sprite-kit skspritenode skphysicsbody

我有一个名为“Floor”的单独类(class),如下所示。

class Floor: SKNode {
    override init() {
        super.init()
        //let edgeFrame = CGRect(origin: CGPoint(x: 1,y: 1), size: CGSize(width: 1078, height: 1950))
        //self.physicsBody = SKPhysicsBody(edgeLoopFrom: edgeFrame)

        let borderBody = SKPhysicsBody(edgeLoopFrom: self.frame)
        borderBody.friction = 0
        self.physicsBody = borderBody

        // Apply a physics body to the node
       // self.physicsBody?.isDynamic = false

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

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

我基本上有掉落的 SKSpriteNode,它们从屏幕顶部开始,到达底部,接触“地板”并自行移除,然后再次从顶部重新启动。我遇到的问题是我的所有 SKSpriteNode 一直卡在顶部而不是从屏幕框架周围的边框掉下来。我如何告诉我的应用程序忽略这些特定节点并让它们进入?感谢任何帮助!


这是在屏幕上左右移动的对象,但它只是从屏幕一侧掉落而没有 EdgeLoop

if let accelerometerData = motionManager.accelerometerData {
            if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft {
                balloon.physicsBody?.velocity = CGVector(dx: accelerometerData.acceleration.x * -500.0, dy: 0)
            } else {
                balloon.physicsBody?.velocity = CGVector(dx: accelerometerData.acceleration.x * 500.0, dy: 0)
                }
            }
        }

最佳答案

发生的情况是您的对象碰到了边缘循环的顶部边界,并且无法进入场景。

有几种方法可以做到这一点,如果您绝对需要侧面的边缘循环,我建议将循环拉长到高于场景,并在循环内但在可见区域上方创建对象。然而,由于您没有给出任何迹象表明您实际上需要侧面的循环,所以我要做的就是摆脱边缘循环检测。

创建一个与场景宽度相同的盒子,高度为 100 像素,然后在其上放置一个 floorCategory 类型的物理体。然后将此框放置在屏幕底部下方 50 px 处。假设您的地板 Sprite 框的 anchor 为 0.5,0.5 这会将框隐藏在屏幕下方,并且框的顶部将与屏幕底部齐平。

现在,您将能够检测到您的对象何时到达屏幕底部,并且您将不再需要担心它们会穿过顶部的边缘循环。

或者

延长循环的一个例子是......

您创建一个比屏幕高的矩形(图像中的绿色边框)来应用边缘循环,而不是屏幕尺寸本身

enter image description here

关于swift - SKSpriteNode 卡在 init 中(edgeLoopF​​rom :) - SKPhysicsBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47779185/

相关文章:

ios - 在 Swift 中根据触摸正确移动 Sprite

ios - Swift - 如何从 json 获取数据类型

swift 4 : How to set top constraint when you have a navigation controller?

ios - Swift 中的@IBOutlet 变量

Swift:SKAction.runBlock -> 调用中缺少参数 'completion' 的参数,但为什么?

ios - 在 Swift 中触摸 SKSpriteNode 时无法激活代码

swift - 在运行时更改 SkspriteNode PhysicsBody 大小

swift - Firebase + swift : removeAllObservers not working?

ios - SKShapeNode 或其他东西上的 anchor

Swift SpriteKit 创建可变路径 (CGMutablePathRef)