【问题标题】:How to create walls with SKShapenode?如何使用 SKShapenode 创建墙壁?
【发布时间】:2015-12-04 00:18:33
【问题描述】:

我正在尝试使用 SKShapenode 在 Swift 中创建墙。即使将碰撞位掩码设置为“全部”,角色仍然会在矩形中移动并且不会与之交互。

设置物理类别:

struct PhysicsCategory {
    static let None      : UInt32 = 0
    static let All       : UInt32 = UInt32.max
    static let Monster   : UInt32 = 0b1
    static let Projectile: UInt32 = 0b10
    static let Walls     : UInt32 = 0b11
    static let Player    : UInt32 = 0b100
}

我如何尝试设置墙壁:

let rectangle = SKShapeNode(rectOfSize: CGSize(width:390, height:200))
rectangle.position = CGPointMake(frame.midX-10, frame.midY + 50)
rectangle.strokeColor = SKColor.blackColor()
rectangle.glowWidth = 1.0

rectangle.physicsBody = SKPhysicsBody(edgeLoopFromRect: rectangle.frame)
rectangle.physicsBody?.dynamic = false
rectangle.physicsBody?.categoryBitMask = PhysicsCategory.Walls
rectangle.physicsBody?.contactTestBitMask = PhysicsCategory.None
rectangle.physicsBody?.collisionBitMask = PhysicsCategory.All
self.addChild(rectangle)

【问题讨论】:

    标签: ios swift skphysicsbody skshapenode


    【解决方案1】:

    您必须将contactTestBitMask 设置为“全部”而不是collisionBitMask

    rectangle.physicsBody.contactTestBitMask = PhysicsCategory.All
    

    【讨论】:

    • contactTestBitMask 用于检查是否发生接触,并调用didBeginContact 方法,collisionBitMask 是创建对象不通过的墙的合适方法
    【解决方案2】:

    人物的设定是什么?他们的physicsBody也必须正确设置才能正常工作。

    另外,至少有一个SKNode的physicsBody必须设置为dynamic = true,如果两者都有dynamic = false,则不起作用。

    【讨论】:

    • 其他所有的物理实体都设置为 dynamic = true 并且它们的所有碰撞位掩码都设置为“墙”。
    • @nick 很多事情......你想让我随机猜测吗?我建议你做一个最小的项目,看看是否可行,如果不发布代码,如果可以,看看你的真实项目在哪里不同,并尝试找出哪里出错了?
    • 不,我希望您可能会看到“rectangle.physicsBody = SKPhysicsBody(edgeLoopF​​romRect: rectangle.frame)”这一行是错误的,您需要使用“edgeLoopF​​romPath”才能使其正常工作。
    • edgeLoopF​​romPath 可以在 edgeLoopF​​romRect 不可以工作的地方工作是没有意义的,其他东西也必须改变,或者你遇到了一个错误。但我很高兴你解决了你的问题。
    猜你喜欢
    • 2018-12-17
    • 2013-05-11
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多