ios - SKSpriteNode - 不同的 Sprite 但功能相同

标签 ios sprite-kit skphysicsbody

基本上我的代码只适用于“bubble1”。如果我想要另一个气泡“bubble2”,我是否需要创建许多相同类型的函数

   func addBubbles() {


    let bubble1 = SKSpriteNode(imageNamed: "bubble_purple")

    //the new one I want to create
    let bubble2 = SKSpriteNode(imageNamed: "bubble_green")


    bubble1.name = "bubble1"
    bubble1.physicsBody = SKPhysicsBody(circleOfRadius: bubble1.size.width * 0.5, center: CGPointZero)

    bubble2.name = "bubble2"
    bubble2.physicsBody = SKPhysicsBody(circleOfRadius: bubble1.size.width * 0.5, center: CGPointZero)


    physicsWorld.contactDelegate = self
    physicsWorld.gravity = CGVectorMake(0, 0)



    //Physics implementation of the bubbles
    bubble1.physicsBody?.dynamic = true
    bubble1.physicsBody?.usesPreciseCollisionDetection = true
    bubble1.physicsBody?.categoryBitMask = PhysicsCategory.Bubble
    bubble1.physicsBody?.contactTestBitMask = PhysicsCategory.Cones
    bubble1.physicsBody?.collisionBitMask = 0
    bubble1.physicsBody?.allowsRotation = false

最佳答案

只需创建一个扩展 SKSpriteNode 的气泡类

class Bubble : SKSpriteNode
{
    convenience init(imageNamed name:String)
    {
        let texture = SKTexture(imageNamed:named)
        self.init(texture:texture,color:UIColor.clearColor(),size: texture!.size())
        self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width * 0.5, center: CGPointZero)

        //Physics implementation of the bubbles
        self.physicsBody?.dynamic = true
        self.physicsBody?.usesPreciseCollisionDetection = true
        self.physicsBody?.categoryBitMask = PhysicsCategory.Bubble
        self.physicsBody?.contactTestBitMask = PhysicsCategory.Cones
        self.physicsBody?.collisionBitMask = 0
        self.physicsBody?.allowsRotation = false
    }
}

然后像这样调用你的泡泡:

var bubble1 = Bubble(imageNamed:"bubble_purple")
bubble1.name = "bubble1"
var bubble2 = Bubble(imageNamed:"bubble_green")
bubble2.name = "bubble2"

这样做会覆盖以前的便捷方法,并且不允许您轻松地将它扩展到更多的类,因此我建议创建一个新方法来初始化您的 Sprite ,以防您确实需要扩展的功能这个初始化,像这样:

     init(named:String)
    {
        let texture = SKTexture(imageNamed:named)
        super.init(texture:texture,color:UIColor.clearColor(),size: texture!.size())
        self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width * 0.5, center: CGPointZero)

        //Physics implementation of the bubbles
        self.physicsBody?.dynamic = true
        self.physicsBody?.usesPreciseCollisionDetection = true
        self.physicsBody?.categoryBitMask = PhysicsCategory.Bubble
        self.physicsBody?.contactTestBitMask = PhysicsCategory.Cones
        self.physicsBody?.collisionBitMask = 0
        self.physicsBody?.allowsRotation = false
    }

然后像这样调用你的泡泡:

var bubble1 = Bubble(named:"bubble_purple")
bubble1.name = "bubble1"
var bubble2 = Bubble(named:"bubble_green")
bubble2.name = "bubble2"

关于ios - SKSpriteNode - 不同的 Sprite 但功能相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33829332/

相关文章:

ios - 推送通知 : I almost always get "Connection failed" but it worked few times

Swift - SpriteKit CGPoint 对齐

swift - 更改所有 SKTextures 的 SKTextureFilteringMode

swift - touches.anyObject() 不再工作

swift - 在 SKNode 上开一个洞并在 Swift 中更新它的 physicsBody

iphone - 将 subview 添加到不滚动的 tableview

ios - 无法使用 Swift 上的多部分请求将图像上传到 Paperclip

ios自动布局如何正确编写nslayoutconstraint?

swift - 从另一个类创建对象时,对象不会生成

ios - 加速 SKSpriteNode