2016-07-15 25 views
0

在xcode中弄乱了我,并且在我的游戏体系中有瓷砖,看起来像是小块。我让所有的块移动到游戏项目文件附带的更新函数的左边。但是一旦有一块瓷砖离开屏幕,我将它重新放置到另一侧,试图让它继续前进,但它变成静态,不会移动到这里是我的代码。Sprite-Kit精灵在我的if语句中没有移动到右边

override func update(currentTime: CFTimeInterval) { 


    tileStone1.position = CGPoint(x: tileStone1.position.x - 4, y: tileStone1.position.y) 
    tileStone2.position = CGPoint(x: tileStone2.position.x - 4, y: tileStone2.position.y) 
    tileStone3.position = CGPoint(x: tileStone3.position.x - 4, y: tileStone3.position.y) 
    tileStone4.position = CGPoint(x: tileStone4.position.x - 4, y: tileStone4.position.y) 
    tileStone5.position = CGPoint(x: tileStone5.position.x - 4, y: tileStone5.position.y) 
    tileStone6.position = CGPoint(x: tileStone6.position.x - 4, y: tileStone6.position.y) 
    tileStone7.position = CGPoint(x: tileStone7.position.x - 4, y: tileStone7.position.y) 
    tileStone8.position = CGPoint(x: tileStone8.position.x - 4, y: tileStone8.position.y) 
    tileStone9.position = CGPoint(x: tileStone9.position.x - 4, y: tileStone9.position.y) 
    tileStone10.position = CGPoint(x: tileStone10.position.x - 4, y: tileStone10.position.y) 
    tileStone11.position = CGPoint(x: tileStone11.position.x - 4, y: tileStone11.position.y) 
    tileStone12.position = CGPoint(x: tileStone12.position.x - 4, y: tileStone12.position.y) 



    if (tileStone1.position.x < self.frame.size.width){ 

     tileStone1.anchorPoint = CGPointZero 

     tileStone1.position = CGPoint(x: 930 - 4, y: tileStone1.position.y) 




    } 
+1

该代码告诉我,有一次tile1在屏幕上,移动它到'930-4'。假设这是在屏幕上,那么下一帧将移动到'930-4' ......你应该把所有这些块放在一个数组中并循环使用它们,而不是有12个类变量...... – Putz1103

+1

(tileStone1.position。 x Shuri2060

+0

另外,这一行有什么意义:'tileStone1.anchorPoint = CGPointZero'? – Shuri2060

回答

2

正如Putz1103的建议,你真的应该使用数组来代替。然后,正如我在评论中质疑的,也许你正在寻找使用self.frame.minX而不是self.frame.size.width? (另外,未来,您可以使用self.frame.width而不是self.frame.size.width

它不移动的原因是因为位置始终小于宽度,当然这意味着位置正在每帧重置。

要绝对明确:.width得到屏幕的宽度,说1024,而.minX得到屏幕的最左边的位置,该位置通常为0

override func update(currentTime: CFTimeInterval) { 

    tileStone1.position = CGPoint(x: tileStone1.position.x - 4, y: tileStone1.position.y) 
    tileStone2.position = CGPoint(x: tileStone2.position.x - 4, y: tileStone2.position.y) 
    tileStone3.position = CGPoint(x: tileStone3.position.x - 4, y: tileStone3.position.y) 
    tileStone4.position = CGPoint(x: tileStone4.position.x - 4, y: tileStone4.position.y) 
    tileStone5.position = CGPoint(x: tileStone5.position.x - 4, y: tileStone5.position.y) 
    tileStone6.position = CGPoint(x: tileStone6.position.x - 4, y: tileStone6.position.y) 
    tileStone7.position = CGPoint(x: tileStone7.position.x - 4, y: tileStone7.position.y) 
    tileStone8.position = CGPoint(x: tileStone8.position.x - 4, y: tileStone8.position.y) 
    tileStone9.position = CGPoint(x: tileStone9.position.x - 4, y: tileStone9.position.y) 
    tileStone10.position = CGPoint(x: tileStone10.position.x - 4, y: tileStone10.position.y) 
    tileStone11.position = CGPoint(x: tileStone11.position.x - 4, y: tileStone11.position.y) 
    tileStone12.position = CGPoint(x: tileStone12.position.x - 4, y: tileStone12.position.y) 



    if (tileStone1.position.x < self.frame.minX){ 

     tileStone1.anchorPoint = CGPointZero 

     tileStone1.position = CGPoint(x: 930 - 4, y: tileStone1.position.y) 
    } 
} 

阵列版本(你必须初始化。数组,而不是这个版本是更好,因为它的工作原理然而,许多数tileStones你数组中有):

override func update(currentTime: CFTimeInterval) { 

    for tileStone in tileStonesArray { 

     tileStone.position = CGPoint(x: tileStone.position.x - 4, y: tileStone.position.y) 




     if (tileStone.position.x < self.frame.minX){ 

      tileStone.anchorPoint = CGPointZero 

      tileStone.position = CGPoint(x: 930 - 4, y: tileStone.position.y) 
     } 
    } 
} 

另外(althoug h我不完全确定这是否可能,因为某些属性是只读的 - 您必须亲自看看,但我认为它适用于Swift),也许可以直接更改tileStone.position.x

换句话说,您可以使用此行:

tileStone.position.x -= 4 

//or later 

tileStone.position.x = 926 

这是短得多,简单得多:

tileStone.position = CGPoint(x: tileStone.position.x - 4, y: tileStone.position.y) 

//or later 

tileStone.position = CGPoint(x: 930 - 4, y: tileStone1.position.y) 
+0

我同意你的答案。对于我来说,anchorPoint没有意义,它可以被删除。 –