2017-02-27 77 views
1

這是我的第一篇文章,我是iOS編程新手。我正在使用Xcode 8和Swift 3來構建我的練習遊戲。我想要的是當屏幕被點擊時我想跳球,但衝動不起作用。這是我寫的代碼。Swift PhysicsBody不受Impulse影響

class GameScene: SKScene { 
var footBall = SKSpriteNode(imageNamed: "sfb") 
var Score = 0 
var GameStarted = false 


override func didMove(to view: SKView) { 
    self.removeAllChildren() 
    self.anchorPoint = CGPoint(x: 0.0, y: 0.0) 

    footBall.size = CGSize(width: 100, height: 100) 
    footBall.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) 
    footBall.physicsBody = SKPhysicsBody(circleOfRadius: footBall.frame.height/2) 
    footBall.physicsBody?.affectedByGravity = false 
    footBall.physicsBody?.allowsRotation = true 
    footBall.physicsBody?.isDynamic = true 
    self.addChild(footBall) 
} 


override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if(GameStarted == false){ 
     GameStarted = true 
     footBall.physicsBody?.affectedByGravity = true 
     footBall.physicsBody?.velocity = CGVector(dx: 0, dy: 0) 
     footBall.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 90)) 
    } 
    else{ 
     footBall.physicsBody?.velocity = CGVector(dx: 0, dy: 0) 
     footBall.physicsBody?.applyForce(CGVector(dx: 0, dy: 90)) 
    } 
} 

override func update(_ currentTime: TimeInterval) { 

} 

單擊時,球的速度變爲零,但衝動應驅動它不會發生。請幫助我解決這個問題,並忽略任何無知,因爲這是我的第一個問題,我是新手。

+0

我不知道Swift是如何工作的,但是你是否應該將'velocity'設置爲0? – pingul

+0

是的,但爲什麼我不知道。 –

+0

你有沒有設置足球的質量? – pingul

回答

1

請注意,在真正的分支中,你正在施加一個力量,而不是一個衝動。

變化:

footBall.physicsBody?.applyForce(CGVector(dx: 0, dy: 90)) 

footBall.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 90)) 

不明白爲什麼你總是要麼是零速度。

+0

謝謝,這解決了我的問題 –

+0

我想問一個問題,我想要在特定的方向上應用衝動,具體取決於在踢球的地方。就像踢足球的右側時,它應該向左和向上移動,不僅向上。那麼我怎麼能做到這一點? –

+0

我覺得你幾乎已經說過了。在場景座標中計算球的中心點,將觸摸點與該點進行比較以查看其觸摸位置,然後根據需要應用dx/dy cgvector。要查看是否觸摸了球,您可以檢查nodesAtPoint。 – GOR