代码之家  ›  专栏  ›  技术社区  ›  Dewan

从SKNode地板类中移除重力

  •  1
  • Dewan  · 技术社区  · 7 年前

    我在比赛开始时有两个矩形,但一旦开始,重力就会把它们取下来。我把下面的代码放在一个单独的“Floor.swift”类中。我还有一个“BitMaskCategories.swift”文件,其中包含以下信息。

    let ballCategory : UInt32 = 0x1 << 1
    let avoidCategory : UInt32 = 0x1 << 2
    let floorCategory : UInt32 = 0x1 << 3
    let pointCategory : UInt32 = 0x1 << 4
    let lifeCategory : UInt32 = 0x1 << 5 
    

    这是我的“Floor.swift”课程

    import Foundation
    import SpriteKit
    
    class Floor: SKNode {
        override init() {
            super.init()
    
            let leftWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 50, height: 300))
            leftWall.position = CGPoint(x: 0, y: 100)
            leftWall.physicsBody!.isDynamic = false
            leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size)
            self.addChild(leftWall)
    
            let rightWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 50, height: 300))
            rightWall.position = CGPoint(x: 100, y: 200)
           rightWall.physicsBody!.isDynamic = false
            rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size)
            self.addChild(rightWall)
    
            // self.physicsBody?.affectedByGravity = false
            // self.physicsBody?.isDynamic = false
    
            // Set the bit mask properties
            self.physicsBody?.categoryBitMask = balloonCategory
            self.physicsBody?.contactTestBitMask = nailDropCategory | pointCategory | lifeCategory
            //self.physicsBody?.collisionBitMask = balloonCategory
        }
    
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemted")
        }
    }
    

    为什么会出现错误,“线程1:致命错误:在展开可选值时意外发现零”但使用“”时而不是“!”该应用程序可以工作,但矩形会下降。我需要那条线,让他们不要那样做,我甚至不明白这有什么意义。

    1 回复  |  直到 7 年前
        1
  •  3
  •   mugx    7 年前

    您正在尝试分配: .isDynamic = false 在对象初始化之前,

    你应该走了 leftWall.physicsBody!.isDynamic = false

    之后 leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size)

    以下情况也一样: rightWall.physicsBody!.isDynamic = false ,移动它

    之后 : rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size)

    因此,您的代码可能是:

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