2016-04-27 2 views
0

Так что, по сути, я делаю платформенную игру. когда игрок сталкивается с платформой, игрок получает силовой альбом вверх по оси Y. Код ниже, который я получил, имитирует вид, следующий за игроком. Он также следует за игроком, когда ГГ направляется вниз по оси Y. Я этого не хочу. Только хотите, чтобы подземелья, переднего плана и фона двигались вниз, когда игрок движется вверх.Только перемещайте groundparallax, когда игрок движется вверх по оси Y

Gamescene.swift:

class GameScene: SKScene, SKPhysicsContactDelegate { 

var background:SKNode! 
var midground:SKNode! 
var foreground:SKNode! 




required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 

} 

override init(size: CGSize){ 
    super.init(size: size) 

    background = createBackground() 
    addChild(background) 

    midground = createMidground() 
    addChild(midground) 

    foreground = SKNode() 
    addChild(foreground) 

    player = createPlayer() 
    foreground.addChild(player) 

} 

override func update(currentTime: CFTimeInterval) { 

    if player.position.y > 200{ 
     background.position = CGPoint(x: 0, y: -((player.position.y - 200)/10)) 
     midground.position = CGPoint(x: 0, y: -((player.position.y - 200)/4)) 
     foreground.position = CGPoint(x: 0, y: -((player.position.y) - 200)) 
    } 

}

ответ

1

Вы можете проверить игрока позиции.

var PlayerPosition1 = 0 

override func update(currentTime: CFTimeInterval) { 

    if player.position.y > 200{ 
     if player.position.y > PlayerPosition1{ 
      background.position = CGPoint(x: 0, y: -((player.position.y - 200)/10)) 
      midground.position = CGPoint(x: 0, y: -((player.position.y - 200)/4)) 
      foreground.position = CGPoint(x: 0, y: -((player.position.y) - 200)) 
     } 
    } 

    PlayerPosition1 = player.position.y 
} 

Нечто подобное должно работать ..

Edit: Ах хорошо .. это на самом деле не «лаг» .. фон просто возвращается в «старой» позиции при прикосновении к платформе. Попробуйте следующее:

var PlayerMaxY = CGFloat() 

    if player.position.y > 200 { 
     if player.position.y > PlayerMaxY{ 
      PlayerMaxY = player.position.y 
      background.position = CGPoint(x: 0, y: -((player.position.y - 200)/10)) 
      midground.position = CGPoint(x: 0, y: -((player.position.y - 200)/4)) 
      forefround.position = CGPoint(x: 0, y: -((player.position.y - 200))) 
     } 
    } 
+0

Я пробовал что-то подобное, но как только игрок сталкивается с платформой, что-то лагирует все это вверх. Не как память lagg, есть что-то с этим полностью выключено, когда оно запускается из plattform. – rkoi95

+0

Можете ли вы показать код или вещи, которые вы отличили от моего «решения»? – aignetti

+0

Я просто заменил свой код на ваш и добавил переменные. кроме того, что у меня есть платформа, которая дает «player.physicsbody» .velocity.dy = CGFloat (700) », когда она сталкивается с платформой sknode. – rkoi95