首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKSpriteNode -不同的精灵但功能相同

SKSpriteNode -不同的精灵但功能相同
EN

Stack Overflow用户
提问于 2015-11-20 14:38:18
回答 1查看 38关注 0票数 0

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

代码语言:javascript
复制
   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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-20 15:13:05

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

代码语言:javascript
复制
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
    }
}

那就这样叫你的泡泡吧:

代码语言:javascript
复制
var bubble1 = Bubble(imageNamed:"bubble_purple")
bubble1.name = "bubble1"
var bubble2 = Bubble(imageNamed:"bubble_green")
bubble2.name = "bubble2"

这样做将覆盖以前的方便方法,并且不允许您轻松地将其扩展到更多的类,因此,我建议创建一个新的方法来初始化您的精灵,以防您确实需要扩展这个init的特性,如下所示:

代码语言:javascript
复制
     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
    }

像这样叫你的泡泡:

代码语言:javascript
复制
var bubble1 = Bubble(named:"bubble_purple")
bubble1.name = "bubble1"
var bubble2 = Bubble(named:"bubble_green")
bubble2.name = "bubble2"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33829332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档