2017-08-12 70 views
1

我對Swift和Sprite Kit很新穎!Swift Sprite Kit物理主體:應用衝動後球速變慢

我試圖建立一個Pong遊戲。一切運作良好,但我應用衝動減慢真的很快! 我已經關掉重力摩擦和阻尼和恢復球和場景的設置爲1

這裏是我的代碼:

import SpriteKit 
import GameplayKit 

class GameScene: SKScene { 
     
    let player = SKShapeNode(rectOf: CGSize(width: 200, height: 30)) 
    let enemy = SKShapeNode(rectOf: CGSize(width: 200, height: 30)) 
    let ball = SKShapeNode(circleOfRadius: 10) 

override func didMove(to view: SKView) { 

let border = SKPhysicsBody(edgeLoopFrom: self.frame) 
    border.restitution = 1 
    border.friction = 0 
    border.angularDamping = 0 
    border.linearDamping = 0 

    self.physicsBody = border 

    scene?.physicsWorld.gravity = CGVector(dx: 0, dy: 0) 

    player.position = CGPoint(x:  0, y: -(scene?.size.height)! * 0.35) 
    player.fillColor = UIColor.white 
    player.strokeColor = UIColor.clear 
    self.addChild(player) 

    player.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 200, height: 30)) 
    player.physicsBody?.friction = 0 
    player.physicsBody?.isDynamic = false 
    player.physicsBody?.angularDamping = 0 
    player.physicsBody?.linearDamping = 0 
    player.physicsBody?.restitution = 1 
    player.physicsBody?.affectedByGravity = false 

    enemy.position = CGPoint(x: 0, y: (scene?.size.height)! * 0.35) 
    enemy.fillColor = UIColor.white 
    enemy.strokeColor = UIColor.clear 
    self.addChild(enemy) 

    enemy.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 200, height: 30)) 
    enemy.physicsBody?.friction = 0 
    enemy.physicsBody?.affectedByGravity = false 
    enemy.physicsBody?.linearDamping = 0 
    enemy.physicsBody?.angularDamping = 0 
    enemy.physicsBody?.isDynamic = false 

    ball.position = CGPoint(x: 0, y: 0) 
    ball.fillColor = UIColor.white 
    ball.strokeColor = UIColor.clear 

    ball.physicsBody?.angularDamping = 0 
    ball.physicsBody?.linearDamping = 0 
    ball.physicsBody?.friction = 0 
    ball.physicsBody?.restitution = 1 
    ball.physicsBody?.allowsRotation = false 
    ball.physicsBody?.affectedByGravity = true 
    ball.physicsBody = SKPhysicsBody(circleOfRadius: 10) 
    ball.physicsBody?.isDynamic = true 
    self.addChild(ball) 
    ball.physicsBody?.applyImpulse(CGVector(dx: -30, dy: -30)) 



    } 

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for touch in touches { 

     let pos = touch.location(in: self) 

     player.position.x = pos.x 

    } 
    } 

    override func update(_ currentTime: TimeInterval) { 
     if ball.position.y >  0{ 
     enemy.position.x = ball.position.x 
     } 
    } 
} 

謝謝您了!

+0

您沒有設置球'linearDamping'之前。此外,您還需要在應用衝動之前將球添加到場景中。 – 0x141E

+0

謝謝。它有點幫助,因爲它現在移動得更快,但球仍在放慢速度...... –

+0

你創建物理體太晚了 – Knight0fDragon

回答

0

一定要始終創建你的物理身體,你改變它的屬性

ball.physicsBody?.angularDamping = 0 
ball.physicsBody?.linearDamping = 0 
ball.physicsBody?.friction = 0 
ball.physicsBody?.restitution = 1 
ball.physicsBody?.allowsRotation = false 
ball.physicsBody?.affectedByGravity = true 
ball.physicsBody = SKPhysicsBody(circleOfRadius: 10) <----Needs to be first 
ball.physicsBody?.isDynamic = true 
self.addChild(ball) 
ball.physicsBody?.applyImpulse(CGVector(dx: -30, dy: -30))