Swift 4:SKSpriteNode不会停在某个位置上

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift 4:SKSpriteNode不会停在某个位置上相关的知识,希望对你有一定的参考价值。

在这里,我有一个带子弹的坦克,当用户点击屏幕时,坦克开火,没关系

但当子弹从水箱中出来时,它会越过屏幕,并且不会停在触摸位置

这是我的代码:

for touch in touches {
        let location = touch.location(in: self)

        let bullet = SKSpriteNode(imageNamed: "bullet4")

        bullet.position = CGPoint(x: self.MainTank.position.x, y: self.MainTank.position.y + 10)

        bullet.size = CGSize(width: 12, height: 20)

        bullet.physicsBody = SKPhysicsBody(circleOfRadius: bullet.size.width / 2)

        bullet.physicsBody?.affectedByGravity = false
        bullet.physicsBody?.isDynamic = true // false stops the bullet on the tank
        bullet.physicsBody?.allowsRotation = false
        self.addChild(bullet)

        var dx = CGFloat(location.x)
        var dy = CGFloat(location.y)

        let magnitude = sqrt(dx * dx + dy * dy)

        dx /= magnitude
        dy /= magnitude

        let vector  = CGVector(dx: 5.0 * dx, dy: 5.0 * dy)

        bullet.physicsBody?.applyImpulse(vector)


}

我试图将isDynamic设置为true,但这会使子弹停在坦克位置

谢谢

答案

它可能会移动到屏幕之外,因为您将向量乘以5.0。我也不会像那样创建你的矢量,因为不需要具有幅度的除法部分。试试这个:

let dx = location.x - bullet.position.x
let dy = location.y - bullet.position.y
let vector  = CGVector(dx: dx, dy: dy)
bullet.run(SKAction.move(by: vector, duration: 1.0)) //choose your own duration of course

以上是关于Swift 4:SKSpriteNode不会停在某个位置上的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我将 SKSpriteNode 与图像一起使用时它不会反弹,但当我使用 SKShapeNode 时它确实有效?

PowerBuilder中,怎么实现鼠标停在某一个控件上,出来一个提示?

如何将 SKSpriteNode 合并到 SKTexture 以在 Swift 3 中形成新的 SKSpriteNode?

停止 SKSpriteNode 离开视图 (Swift)

Swift 错误:无法调用非函数类型“SKSpriteNode”的值

Swift - 使用纹理数组更改 SKSpriteNode 纹理