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?