Create \(Use) SKView as \(in a) factory \(static class)

前端 未结 2 447
孤城傲影
孤城傲影 2020-12-20 05:02

I want to make an SKView I can use as a factory to make SKShapeNodes and \"render\" them to textures.

But I can\'t find how I would initialise such a thing, and am h

2条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-20 05:50

    (Posted on behalf of the OP).

    Problem solved!

    For those of you that understand coding better than I, the following commentary is not for you. It's for all the fools and aspiring tools, like me.

    Thanks to the wondrous patience and mine of knowledge that is @MobileBen, I am able to do exactly as desired, ie have a factory for creating SKShapeNodes from anywhere in the project, via an SKView instance in a Static Class of no type, whose only purpose is to be this factory.

    1. A class can have no superclass or inheritance in Swift. This means it's possible to make perfectly isolated Class files that have no purpose other than to store functionality and properties for universal access within a project.

    2. This is somewhat considered "wrong" in OOP programming, but from a conception and usage point, and the urgency of getting things done neatly and easily to find and read, it's invaluable, in my NAIVE opinion.

    3. Despite SKView being an intimidatingly high class within the UIKit world, it's possible to simply make an instance of an otherwise unused and unrecognised SKView within a static class for the purposes of exploiting its functionality

    4. The resulting usage is elegant and simple, thanks to MobileBen, like this:

    a factory, with completely incorrect use of capitals for the naming, so I can instantly see it in code:

    import SpriteKit
    
    class MAKE {
    
    private static let view:SKView = SKView()
    
    static func circle(radius: CGFloat) -> SKSpriteNode {
        let myShapeNode = SKShapeNode(circleOfRadius: radius)
        myShapeNode.fillColor = SKColor.lightGray
        myShapeNode.strokeColor = SKColor.gray
        let tex = view.texture(from: myShapeNode)
        return SKSpriteNode(texture: tex)
        }
    }
    

    With this in the project, from within just about any other part of the project, the following creates a circle and stores it in myCircle:

    let myCircle = MAKE.circle(radius: 50)
    

提交回复
热议问题