在我的代码中,我试图拥有它,以便实体移动一定次数,并在每次移动之间延迟。
这些动作是必不可少的小型传送,可以减慢或加快移动距离(这是代码的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。