更改SKSpriteNode的x位置

时间:2016-07-29 18:03:04

标签: ios sprite-kit position

我在游戏中运行了一个生成SKSpriteNodes的for循环。

我希望我的第一个块从(20,40)开始,并为每个新块添加20到x位置和40到y位置。

第一块(20,40) 第二块(40,80) 第三区(60,120) 等等。

y位置的行为与我想要的方式相同,但是x位置会随机地从我的屏幕上的任何位置开始,然后为每个生成的新块添加20个位置。

以下是我的代码。

       func generateBlocks() {

            for _ in 1..<5 {

                xP += 20
                yP += 40

                let xx = CGFloat (xP)
                let yy = CGFloat (yP)

                print("x position: \(xx)")
                print("y position: \(yy)")

                let resourcePath = NSBundle.mainBundle().pathForResource("Blocks", ofType: "sks")
                let blocks = MSReferenceNode(URL: NSURL (fileURLWithPath: resourcePath!))

                blocks.goals.position = CGPoint (x: xx,y: yy)
                addChild(blocks)
    }

    }

我还添加了print语句,说明运行代码时的样子。

下面是块的x和y位置的print语句。 enter image description here

我尝试切换xP和yP初始化的顺序。那没用。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我更倾向于使用while loops进行此类操作,您必须从一开始就施加条件,例如限制:

class GameScene: SKScene {
    let deltaX:CGFloat = 20.0
    let deltaY:CGFloat = 40.0
    override func didMoveToView(view: SKView) {
        let widthLimit = self.frame.width-40
        let heightLimit = self.frame.height-140
        let startX:CGFloat = 80.0
        drawStair(startX,limits:CGSizeMake(widthLimit,heightLimit))
    }
    func drawStair(startFromX:CGFloat,limits:CGSize) {
        var currentX:CGFloat = startFromX
        var currentY:CGFloat = startFromX+deltaY
        while currentX<limits.width && currentY<limits.height {
            drawBlock(CGPointMake(currentX,currentY))
            currentX += deltaX
            currentY += deltaY
        }
    }
    func drawBlock(position: CGPoint,size:CGSize = CGSizeMake(40,40)) {
        let block = SKSpriteNode(color: UIColor.redColor(), size: size)
        block.position = position
        block.name = "block"
        addChild(block)
    }
}

<强>输出

enter image description here