2015-01-13 2 views
0

Привет всем: Мне интересно, это просто ошибка xcode, или если я просто пропущу что-то действительно глупое. У меня есть игра, в которой прокручивается фон. Каждый гаджет обновления, я рассчитываю количество времени с момента последнего обновления, умножаю его на константу и перемещаю фон на эту сумму.Изменение положения.x вызывает отображение skspritenode

Вот что странно ... Ниже приведенный ниже фрагмент кода приводит к тому, что bg1, bg2, fg1 и fg2 НЕ отображаются в сцене.

func updatePos(timeSinceLast:CGFloat) 
{ 
    bgSpeed = BG_TIME_SPEED*timeSinceLast 
    fgSpeed = FG_TIME_SPEED*timeSinceLast 

    //move both background nodes 
    bg1.position.x -= bgSpeed 
    bg2.position.x -= bgSpeed 

    //move both foreground nodes 
    fg1.position.x -= fgSpeed; 
    fg2.position.x -= fgSpeed; 

Этот фрагмент кода, при запуске, работает просто отлично и все, дисплеи:

func updatePos(timeSinceLast:CGFloat) 
{ 
    bgSpeed = 3.97734984755516 // <--- I CHANGED TO A CONSTANT INSTEAD OF A CALCULATION 
    fgSpeed = 3.97734984755516 

    //move both background nodes 
    bg1.position.x -= bgSpeed 
    bg2.position.x -= bgSpeed 

    //move both foreground nodes 
    fg1.position.x -= fgSpeed; 
    fg2.position.x -= fgSpeed; 

Пожалуйста, помогите мне! У меня абсолютно нет CLUE, что происходит. Благодаря!

UPDATE: uliwitness, вот printlns:

func updatePos(timeSinceLast:CGFloat) 
{ 
    println("timeSinceLast: \(timeSinceLast)") 
    println("BG_TIME_SPEED: \(BG_TIME_SPEED)") 

    bgSpeed = BG_TIME_SPEED*timeSinceLast 
    fgSpeed = FG_TIME_SPEED*timeSinceLast 

    println("bgSpeed: \(bgSpeed)") 

    bg1.position.x -= bgSpeed 
    bg2.position.x -= bgSpeed 

    fg1.position.x -= fgSpeed; 
    fg2.position.x -= fgSpeed; 

и Heres вывод на консоль:

timeSinceLast: 0,0165845339652151

BG_TIME_SPEED: 120,0

bgSpeed: 1,99014407582581

ОБНОВЛЕНИЕ # 2: Код, который c alls updatePos:

override func update(currentTime: CFTimeInterval) { 

    timeSinceLastUpdate = currentTime - lastUpdateTime 
    lastUpdateTime = currentTime 
    backGroundNode.updatePos(CGFloat(timeSinceLastUpdate)) 
+0

Вы пытались распечатать значения timeSinceLast и BG_TIME_SPEED? Кто они такие? Как и где вы их объявляете? Когда они получают присвоенные значения? – uliwitness

+0

Добавлен вывод консоли в сообщение - см. Выше. Благодаря! –

+0

опубликуйте код, который вызывает updatePos ... вы можете запустить его в цикле? – LearnCocos2D

ответ

0

Arg! Я понял. самый первый запуск обновления, свойство currentTime функции обновления составляет примерно 50000, а переменная lastUpdateTime инициализируется в 0.0. Таким образом, передний спрайт перемещается на 50 000 единиц первого кадра. Спасибо всем за ответы! Предложение Cocos2D помогло мне найти проблему.

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