2016-07-15 2 views
0

В беспорядке в xcode, и у меня есть плитки в нижней части моей игры, которые просто выглядят как маленькие блоки. Я сделал все блоки, перемещая их слева в функции обновления, которая поставляется с файлами проекта игры. Но как только один из плит выходит из экрана, я переставляю его на другую сторону, чтобы попытаться заставить его продолжать, но он становится статичным и не будет двигаться здесь, это мой код.Sprite-Kit Sprites не перемещается вправо в моем заявлении 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 не имеет смысла, поэтому для меня его можно удалить. –

Смежные вопросы