При скроллинге фона на iPad фон дергается
Фон состоит из 88 картинок и составляет общую ширину около 18000 пикселей.
При движении фона с помощью SKAction.move.
- на реальном устройстве начиная с iPhone 6 — движение проходит нормально
- на iPad Pro 11 дюймов — начинается подергивание при движении фона
Может я делаю что то не верно?!
class Tunnel: SKSpriteNode {
static func createTunnel(size: CGSize) -> Tunnel {
let backgroundTunnel = Tunnel()
for i in 0...87 {
let name = String(format: "min_tunnel_%02d", i + 1)
let tunnel = Tunnel(imageNamed: name)
tunnel.isUserInteractionEnabled = true
tunnel.anchorPoint = CGPoint(x: 0.0, y: 0.5)
tunnel.zPosition = -1
let tunnelY = size.height / 2
let tunnelX = CGFloat(i) * tunnel.size.width
tunnel.position = CGPoint(x: tunnelX, y: tunnelY)
backgroundTunnel.addChild(tunnel)
backgroundTunnel.size = CGSize(width: tunnelX, height: tunnel.size.height)
}
return backgroundTunnel
}
}
Эта часть взята со сцены:
class GameScene: SKScene {
fileprivate let tunnelSpeed: CGFloat = 500
fileprivate var tunnel = SKSpriteNode()
// создание фона в единый спрайт
fileprivate func backgroundTunnelSetup() {
tunnel = Tunnel.createTunnel(size: self.size)
let tunnelEntrance = SKSpriteNode(imageNamed: "tunnel")
tunnelEntrance.position = CGPoint(x: 355.0 , y: self.size.height / 2)
tunnelEntrance.zPosition = 20
tunnel.addChild(tunnelEntrance)
let tunnelExit = SKSpriteNode(imageNamed: "tunnel")
tunnelExit.xScale = -1
tunnelExit.zPosition = 20
tunnelExit.position = CGPoint(x: 14550.0 , y: self.size.height / 2)
tunnel.addChild(tunnelExit)
self.addChild(tunnel)
}
// движение фона
fileprivate func moveBackground() {
let endPosition = -5000.0 + self.size.width / 2
let waitAction = SKAction.wait(forDuration: 2.0)
let distance = distanceBetweenPoints(a: self.tunnel.position, b: CGPoint(x: endPosition, y: self.tunnel.position.y))
let time = timeToTravelDistance(distance: distance, speed: tunnelSpeed)
let moveAction = SKAction.moveTo(x: endPosition, duration: TimeInterval(time))
moveAction.timingMode = .easeOut
let stopAction = SKAction.run { [unowned self] in
self.stop()
}
let sequence = SKAction.sequence([waitAction, moveAction, stopAction])
tunnel.run(sequence)
}
}