微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的 SKShapeNode 子类在我运行我的应用程序时没有出现?

如何解决为什么我的 SKShapeNode 子类在我运行我的应用程序时没有出现?

我试图让对象从屏幕顶部落下,所以我创建了一个继承自 FallingBlockSKShapeNode 子类。但是,每当我运行我的代码时,这些块都不会出现在屏幕上。我知道这些块在屏幕上是因为它们与其他物体接触,但它们无法被看到。下面是我的代码

import SpriteKit

class FallingBlock: SKShapeNode {
  
    let color = [UIColor.red,UIColor.cyan,UIColor.green,UIColor.yellow,UIColor.orange,UIColor.systemPink].randomElement() as! UIColor
    
    init(side: CGPoint) {
        super.init()
        
        self.path = CGPath(roundedRect: CGRect(x: side.x,y: side.y,width: 20,height: 20),cornerWidth: 3,cornerHeight: 3,transform: nil)
        self.fillColor = color
        self.strokeColor = color
        self.position = side
        self.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 20,height: 20))
        self.physicsBody?.affectedByGravity = true
        self.zPosition = 1
        
        self.physicsBody?.categoryBitMask = PhysicsCategories.obstacleCategory
        self.name = ObjectNames.obstacle
        
    }
  
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    deinit {
        print("falling block reference deleted")
    }
}

在我的 GameScene 中,我正在运行以下函数

func newObstacle() {
        let side = [25,frame.width-25].randomElement() as! CGFloat
        obstacle = FallingBlock(side: CGPoint(x: side,y: frame.maxY+15))
        worldNode.addChild(obstacle)
        deallocateObstacle()
    }

解决方法

当类继承自 SKShapeNode 时,我无法找到解决方案;但是,当它继承自 SKNode 时,我能够弄清楚如何做到这一点。所需要做的就是初始化 SKNode,然后添加一个 SKShapeNode - 具有您想要的属性 - 作为 SKNode 的子项,如下所示:

class FallingBlock: SKNode {
 
    init(side: CGPoint) {
        super.init()
        self.addNewBlock(side)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    deinit {
        print("falling block reference deleted")
    }
    
    private func addNewBlock(_ side: CGPoint) {
        var color = [UIColor.red,UIColor.cyan,UIColor.green,UIColor.yellow,UIColor.orange,UIColor.systemPink].randomElement() as! UIColor

        let obstacle = SKShapeNode(rectOf: CGSize(width: 20,height: 20),cornerRadius: 3)
        obstacle.fillColor = color
        obstacle.strokeColor = color
        obstacle.position = side
        obstacle.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 20,height: 20))
        obstacle.physicsBody?.affectedByGravity = true
        obstacle.zPosition = 1
        
        obstacle.physicsBody?.categoryBitMask = PhysicsCategories.obstacleCategory
        obstacle.name = ObjectNames.obstacle
        self.addChild(obstacle)
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。