循环延迟仅发生一次

时间:2016-12-29 01:44:17

标签: swift loops sprite-kit

在我的代码中,我试图拥有它,以便实体移动一定次数,并在每次移动之间延迟。

这些动作是必不可少的小型传送,可以减慢或加快移动距离(这是代码的RGBA部分通过在另一个未显示的图像的像素上使用绿色来实现的)。 / p>

我得到的问题是移动实体时。

它会移动正确的距离,但一次全部移动。因此,如果我认为我告诉它在10秒内移动10个单位,它等待10秒然后移动10个单位。

这是一个问题,因为它看起来很糟糕,因此实体"超越"选择它去哪里(这就是循环中的" if"语句,它会在实体关闭时停止它。)

注意:此函数位于SKNode的类中。

这是代码(注意:" moveTo"在函数之外定义):

 func moveGo(){
    var dX: CGFloat
    var dY: CGFloat
    var magnitudeOfVector: Double
    var originalX: CGFloat = self.position.x
    var originalY: CGFloat = self.position.y
    dX = ((moveTo?.x)! - (self.position.x))
    dY = ((moveTo?.y)! - (self.position.y))
    let wantedX: CGFloat = (moveTo?.x)!
    let wantedY: CGFloat = (moveTo?.y)!
    magnitudeOfVector = sqrt(((Double)(dX) * (Double)(dX) + (Double)(dY) * (Double)(dY)))
    dY = dY/(CGFloat)(magnitudeOfVector)
    dX = dX/(CGFloat)(magnitudeOfVector)
    var currentX = self.position.x
    var currentY = self.position.y
    for _ in 1...100{
        SKAction.wait(forDuration: 0.1)
        if let (r,g,b,a) = pixel(in: image, at: self.position) {
            print ("Red \(r), Green: \(g), Blue :\(b), Alpha: \(a)")
            stepDebuff = 2*(CGFloat)(r)/255
        }
        dX = ((moveTo?.x)! - (originalX))
        dY = ((moveTo?.y)! - (originalY))
        dY = dY/(CGFloat)(magnitudeOfVector)
        dX = dX/(CGFloat)(magnitudeOfVector)
        dY = dY * defaultStepSize * stepDebuff
        dX = dX * defaultStepSize * stepDebuff
        currentX += dX
        currentY += dY
        self.position = CGPoint(x: currentX, y: currentY)
        if abs(wantedX - currentX) < 2 && abs(wantedY - currentY) < 2{
            if abs(wantedX - currentX) < 0.01 && abs(wantedY - currentY) < 0.01{
                dY = 0
                dX = 0
            } else{
                dX = ((moveTo?.x)! - (self.position.x))
                dY = ((moveTo?.y)! - (self.position.y))
            }
        }
        print("\(magnitudeOfVector)")
        print("\(dX)")
        print("\(currentX)")
    }
}

循环次数是任意的。 defaultStepSize = 1。

0 个答案:

没有答案