2017-04-19 50 views
0

使用Swift SpriteKit,製作像Doodle Jump這樣的遊戲,我希望平臺從屏幕左側不斷彈跳到右側。這樣做的最好方法是什麼?讓平臺從左到右,反之亦然的最佳方法是什麼?

import SpriteKit 
import GameplayKit 

class GameScene: SKScene, SKPhysicsContactDelegate { 

    private var player: Player? 
    private var platform: Platform? 

    var playerCategory: UInt32 = 0b1 
    var platformCategory: UInt32 = 0b10 
    var edgeCategory:  UInt32 = 0b100 

    override func didMove(to view: SKView) { 
     physicsWorld.contactDelegate = self 

     //player 
     player = childNode(withName: "Player") as? Player! 
     player?.physicsBody?.categoryBitMask = playerCategory 
     player?.physicsBody?.collisionBitMask = platformCategory | edgeCategory 


     //placed platform 
     platform = childNode(withName: "Platform") as? Platform! 
     platform?.physicsBody?.categoryBitMask = platformCategory 
     platform?.physicsBody?.collisionBitMask = edgeCategory 
     platform?.physicsBody?.applyImpulse(CGVector(dx: 30, dy: 0)) 


     //create frame boundary 
     let borderBody = SKPhysicsBody(edgeLoopFrom: self.frame) 
     borderBody.friction = 0 
     borderBody.restitution = 0 
     borderBody.categoryBitMask = edgeCategory 
     self.physicsBody = borderBody 
    } 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     player?.jump() 
     player?.physicsBody?.collisionBitMask = edgeCategory 
    } 

    override func update(_ currentTime: TimeInterval) { 
     changeCollisions() 
     //movePlatform() 
    } 

    func changeCollisions() { 
     if let body = player?.physicsBody { 
      let dy = body.velocity.dy 
      if dy > 0 { 
       // Prevent collisions if the hero is jumping 
       //body.collisionBitMask = 0 
      } 
      else { 
       // Allow collisions if the hero is falling 
       body.collisionBitMask = platformCategory | edgeCategory 
      } 
     } 
    } 

    func movePlatform() { 
     if ((platform?.position.x)! <= /*-(scene?.size.width)!*/ 0) { 
      platform?.position.x += 5 
     } else { 
      platform?.position.x -= 5 
     } 
    } 
} 

我現在有(灰色矩形平臺):

+0

看看這個:http://stackoverflow.com/a/31594616/3402095 – Whirlwind

回答

0

您可以創建一個簡單的SKAction序列與所需的動畫:

let duration = 10 // Animation duration in seconds. 
let moveRight = SKAction.moveTo(x: maxX, duration: duration/2) 
let moveLeft = SKAction.moveTo(x: minX, duration: duration/2) 
let moves = SKAction.repeatForever(.sequence([moveRight, moveLeft]) 
platform!.run(moves) 
相關問題