2014-10-15 3 views
0

Я создал бесконечный прокручиваемый фон из 2 изображений. По мере увеличения скорости прокрутки между изображениями появляется промежуток. Вот мой код:Прокрутка Фон создает промежуток между изображениями - Swift

override func update(currentTime: CFTimeInterval) { 

    var fallingSpeed = 4 + speedIncrease 

    background.position.y = background.position.y - fallingSpeed 
    background2.position.y = background2.position.y - fallingSpeed 

    if background.position.y <= 0 { 
     background.position.y = size.height*2 - (fallingSpeed) 

    } 
    if background2.position.y <= 0 { 
     background2.position.y = size.height*2 - (fallingSpeed) 

    } 
} 

speedIncrease увеличивается +.1 каждый раз, когда пользователь нажимает на экран, потому что я хочу, чтобы фон двигаться быстрее, так как игра продолжается. Оба фонов имеют одинаковое изображение и размер.

Зазор возникает только при увеличении скорости. Увеличение. speedIncrease изначально устанавливается в 0, и фон прокручивается плавно без зазора. Когда я начинаю нажимать на экран и увеличивая скорость, увеличьте пробел.

Любые предложения относительно того, как я могу устранить пробел? Я все еще очень новичок в Swift и Obj-C, поэтому любые советы для новичка будут очень оценены.

ответ

0

У меня была аналогичная проблема, и мне удалось исправить ее, установив мою позицию в CGPoint со значениями целого пикселя (целое число). Мое предположение заключается в том, что ваша проблема схожа и вызвана тем, что ваш фон рисуется на долях пикселя.

Поскольку вы только изменения position.y, вам нужно CGFloat, так что вы могли бы просто вокруг номера: background.position.y = round(some_CGFloat) для Retina (@ 2x) экранов, пиксели на самом деле на каждый 0,5 от position.y. В этом случае вы можете сделать это: background.position.y = round(some_CGFloat * 2.0)/2.0

Попробуйте следующий код (в предположении, дисплей Retina):

override func update(currentTime: CFTimeInterval) { 

    var fallingSpeed = 4 + speedIncrease 

    background.position.y = round((background.position.y - fallingSpeed) * 2.0)/2.0 
    background2.position.y = round((background2.position.y - fallingSpeed) * 2.0)/2.0 

    if background.position.y <= 0 { 
    background.position.y = round((size.height * 2 - fallingSpeed) * 2.0)/2.0 
    } 
    if background2.position.y <= 0 { 
    background2.position.y = round((size.height * 2 - fallingSpeed) * 2.0)/2.0 
    } 
} 

Я понимаю, что это старше вопрос, но я надеюсь, что это может помочь людям с подобными проблемами.

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