2017-02-27 78 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