2017-09-12 17 views
1

현재 움직이는 배경을 설정하려고하는 응용 프로그램에서 작업 중입니다. 나는 현재 내가 사용하고있는 구름으로 가득 찬 투명한 이미지를 가지고있다. 내 문제는 어떻게하면 더 부드럽게 움직일 수 있을까요? 나는 속도로 놀려고했지만 여전히 느리게 보인다. 어떤 도움이라도 축복이 될 것입니다.이동 배경 Swift SKSpriteKit

다음은 내가 가고있는 것에 대한 비디오입니다. http://sendvid.com/78ggkzcj

다음은 클라우드 이미지 사진입니다. Cloud Image

여기 내 코드가 있습니다. 당신은 내가 변화 시키거나 다르게해야한다고 생각하는 것은 무엇입니까?

class GameScene: SKScene { 

    // Background 
    let background = SKSpriteNode(texture:SKTexture(imageNamed: "background")) 

    // Clouds 
    var mainCloud = SKSpriteNode() 
    var cloud1Next = SKSpriteNode() 

    // Time of last frame 
    var lastFrameTime : TimeInterval = 0 

    // Time since last frame 
    var deltaTime : TimeInterval = 0 

    override func didMove(to view: SKView) { 
     background.position = CGPoint(x: 0, y: 0) 

     // Prepare the clouds sprites 
     mainCloud = SKSpriteNode(texture: 
      SKTexture(imageNamed: "cloudbg1")) 
     mainCloud.position = CGPoint(x: 0, y: 0) 

     cloud1Next = mainCloud.copy() as! SKSpriteNode 
     cloud1Next.position = 
      CGPoint(x: mainCloud.position.x + mainCloud.size.width, 
        y: mainCloud.position.y) 

     // Add the sprites to the scene 
     self.addChild(background) 
     self.addChild(mainCloud) 
     self.addChild(cloud1Next) 
    } 

    override func update(_ currentTime: TimeInterval) { 
     // Called before each frame is rendered 
     // First, update the delta time values: 

     // If we don't have a last frame time value, this is the first frame, 
     // so delta time will be zero. 
     if lastFrameTime <= 0 { 
      lastFrameTime = currentTime 
     } 

     // Update delta time 
     deltaTime = currentTime - lastFrameTime 

     // Set last frame time to current time 
     lastFrameTime = currentTime 

     // Next, move each of the four pairs of sprites. 
     // Objects that should appear move slower than foreground objects. 
     self.moveSprite(sprite: mainCloud, nextSprite:cloud1Next, speed:100) 
    } 

    // Move a pair of sprites leftward based on a speed value; 
    // when either of the sprites goes off-screen, move it to the 
    // right so that it appears to be seamless movement 
    func moveSprite(sprite : SKSpriteNode, 
        nextSprite : SKSpriteNode, speed : Float) -> Void { 
     var newPosition = CGPoint.zero 

     // For both the sprite and its duplicate: 
     for spriteToMove in [sprite, nextSprite] { 

      // Shift the sprite leftward based on the speed 
      newPosition = spriteToMove.position 
      newPosition.x -= CGFloat(speed * Float(deltaTime)) 
      spriteToMove.position = newPosition 

      // If this sprite is now offscreen (i.e., its rightmost edge is 
      // farther left than the scene's leftmost edge): 
      if spriteToMove.frame.maxX < self.frame.minX { 

       // Shift it over so that it's now to the immediate right 
       // of the other sprite. 
       // This means that the two sprites are effectively 
       // leap-frogging each other as they both move. 
       spriteToMove.position = 
        CGPoint(x: spriteToMove.position.x + 
         spriteToMove.size.width * 2, 
          y: spriteToMove.position.y) 
      } 
     } 
    } 
} 

답변

0

코드가 정상적으로 보입니다. 시뮬레이터에서 게임을 실행하기 때문에 낮은 fps를 얻고 있습니다. 실제 장치에서 실행하면 부드럽습니다.

+1

와우 나는 게시물을 만들기도 전에 그것을 시도해야했습니다. 간단한 문제 해결 실수, 내 잘못. 도와주세요! 적어도 다른 사람들이 내 코드로 수행하는 것과 비슷한 일을하도록 도울 수 있습니다. – Dewan