【问题标题】:Add SKSpriteNode multiple times but with different location多次添加 SKSpriteNode 但位置不同
【发布时间】:2014-09-12 00:14:21
【问题描述】:

我正在尝试将相同的SKSpriteNote 添加到同一个场景四次,但我不知道该怎么做。

我找到了旧教程,但我很难在 swift 中成功实现它。

GameScene.swift

import SpriteKit

class GameScene: SKScene {

var brick = SKSpriteNode(imageNamed: "brick")

func addBricks(size:CGSize){
    for var i = 0; i < 4; i++ {

        // Brick settings
        self.brick.physicsBody = SKPhysicsBody(rectangleOfSize: brick.frame.size)
        self.physicsBody!.dynamic = false

        // Brick positioning
        var xPos = brick.size.width/5 * (i + 1)
        var yPos = brick.size.height - 50
        self.brick.position = CGPointMake(xPos, yPos)

        self.addChild(brick)
    }
}

override func didMoveToView(view: SKView) {

    self.addBricks(size)

    }

}

我在创建var xPos = brick.size.width/5 * (i + 1) 的行中收到错误。

我想要达到的理想最终效果更像是这样。

请指教,谢谢。

【问题讨论】:

  • 什么错误?请发布确切的错误消息
  • 您好,感谢您的回复,但我设法以某种方式解决了它。如果有人感兴趣,我在下面发布了解决方案以供将来参考。我不确定代码是否针对此任务进行了适当优化。如果您找到更充分的方法,请分享。再次感谢!

标签: swift sprite-kit skspritenode


【解决方案1】:

我设法解决了这个问题,但我不确定代码优化...不知何故它工作:)

如果有人知道如何制作更简单,请告诉我。这是最终的代码。

    func addBricks(size:CGSize){
    for var i = 0; i < 4; i++ {

        let brick = SKSpriteNode(imageNamed: "brick")

        // Brick settings
        brick.physicsBody = SKPhysicsBody(rectangleOfSize: brick.frame.size)
        brick.physicsBody!.dynamic = false

        // Brick positioning
        var xPos = size.width/5 //CGFloat
        var xPosInt = Int(xPos) * (i + 1) // Int
        xPos = CGFloat(xPosInt) // Convert to CGFloat again
        var yPos = size.height - 50

        brick.position = CGPointMake(xPos, yPos)

        self.addChild(brick)


    }
}

最终结果如愿。

【讨论】:

  • 原始问题中出现错误的原因是因为您不能多次将节点添加为子节点。您最初的问题将brick 声明为实例属性,并且每次调用addBricks 它都试图重新初始化和重新addChild 同一个节点(不允许)。在您的回答中,brick 被声明为addBricks 主体内的局部变量,因此每次调用addBricks 时它都是一个不同的节点。将同一节点多次添加到场景中的唯一其他解决方案是 copy() 该节点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
相关资源
最近更新 更多