Swift 从圆形快速拍摄物体 我在中间有一个圆圈,我需要向我所接触的方向射击子弹,然后从球员身上射出子弹,我写下了下面的代码,但是没有任何事情发生。 private func fire(position: CGPoint) { let bullet = SKShapeNode(circleOfRadius: 2) bullet.strokeColor = SKColor.darkGray bullet.fillColor = SKColor.darkGray bullet.physicsBody = SKPhysicsBody(circleOfRadius: 2) let posX = (position.x) * -1 let posY = (position.y) * -1 let pos = CGPoint(x: posX, y: posY) bullet.position = pos bullet.physicsBody?.affectedByGravity = false bullet.physicsBody?.isDynamic = false bullet.physicsBody?.pinned = false numberOfBullets += 1 bullet.name = String(numberOfBullets) bullet.physicsBody?.collisionBitMask = bodyType.enemy.rawValue bullet.physicsBody?.categoryBitMask = bodyType.bullet.rawValue bullet.physicsBody?.contactTestBitMask = bodyType.enemy.rawValue bullet.physicsBody?.usesPreciseCollisionDetection = true world.addChild(bullet) bulletForce(bullet: bullet, position: position) } private func bulletForce(bullet: SKShapeNode, position: CGPoint) { let ddx = Double((bullet.position.x - position.x)) let ddy = Double((bullet.position.y - position.y)) let degree = atan2(ddy, ddx) * (180.0 / M_PI) let magnitude = 900.0 let angle = degree let dx = magnitude * cos(angle) let dy = magnitude * sin(angle) let vector = CGVector(dx: dx,dy: dy) bullet.physicsBody?.applyForce(vector) //bullet.run(fire, withKey: "firing\(bullet.name)") }

Swift 从圆形快速拍摄物体 我在中间有一个圆圈,我需要向我所接触的方向射击子弹,然后从球员身上射出子弹,我写下了下面的代码,但是没有任何事情发生。 private func fire(position: CGPoint) { let bullet = SKShapeNode(circleOfRadius: 2) bullet.strokeColor = SKColor.darkGray bullet.fillColor = SKColor.darkGray bullet.physicsBody = SKPhysicsBody(circleOfRadius: 2) let posX = (position.x) * -1 let posY = (position.y) * -1 let pos = CGPoint(x: posX, y: posY) bullet.position = pos bullet.physicsBody?.affectedByGravity = false bullet.physicsBody?.isDynamic = false bullet.physicsBody?.pinned = false numberOfBullets += 1 bullet.name = String(numberOfBullets) bullet.physicsBody?.collisionBitMask = bodyType.enemy.rawValue bullet.physicsBody?.categoryBitMask = bodyType.bullet.rawValue bullet.physicsBody?.contactTestBitMask = bodyType.enemy.rawValue bullet.physicsBody?.usesPreciseCollisionDetection = true world.addChild(bullet) bulletForce(bullet: bullet, position: position) } private func bulletForce(bullet: SKShapeNode, position: CGPoint) { let ddx = Double((bullet.position.x - position.x)) let ddy = Double((bullet.position.y - position.y)) let degree = atan2(ddy, ddx) * (180.0 / M_PI) let magnitude = 900.0 let angle = degree let dx = magnitude * cos(angle) let dy = magnitude * sin(angle) let vector = CGVector(dx: dx,dy: dy) bullet.physicsBody?.applyForce(vector) //bullet.run(fire, withKey: "firing\(bullet.name)") },swift,math,sprite-kit,game-physics,Swift,Math,Sprite Kit,Game Physics,编辑:: 多亏了公认答案的帮助,这个问题才得以解决 let posX = (position.x) * -1 let posY = (position.y) * -1 let pos = CGPoint(x: posX, y: posY) let theta = atan2((pos.y - player.position.y), (pos.x - player.position.x)) let dx = cos(theta) / 4

编辑::

多亏了公认答案的帮助,这个问题才得以解决

let posX = (position.x) * -1
        let posY = (position.y) * -1
        let pos = CGPoint(x: posX, y: posY)
        let theta = atan2((pos.y - player.position.y), (pos.x - player.position.x))

let dx = cos(theta) /  4
        let dy = sin(theta) /  4
        world.addChild(bullet)
        let vector = CGVector(dx: dx, dy: dy)
        bullet.physicsBody!.applyImpulse(vector)
其中,
theta
是我希望子弹指向的角度,它在这里

注意::

玩家在中间(圈)。

posX
posY
是用户触摸的x和y坐标,它们乘以
-1
,得到子弹放置的相反方向


然后使用
atan2
函数计算角度
θ
,该函数将子弹定位在圆的边缘,而不是远离播放器(圆)。

您是否尝试过将isDynamic从“false”切换到“true”?另外,尝试添加
GCVector(dx:1.0*dx,dy:1.0*dy)

您的答案是正确的,但我一直将
1.0
更改为适合我需要的数字,并检查我的编辑。非常感谢,这很有帮助