【问题标题】:swift shooting objects from circle shape从圆形快速拍摄物体
【发布时间】:2017-01-25 01:51:57
【问题描述】:

我中间有一个圆圈,我需要向与我接触的方向相反的方向发射子弹并从播放器中出来,我写了以下代码但没有任何反应

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)")
    }

编辑 ::

由于接受的答案的帮助,这解决了问题

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 是我希望子弹到达的角度,这里是

注意::

玩家在中间(圆圈)。

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

然后使用atan2 函数计算角度theta,而不是让我的子弹远离玩家(圆圈),而是将它定位在圆圈的边缘。

【问题讨论】:

    标签: swift math sprite-kit game-physics


    【解决方案1】:

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

    【讨论】:

    • 您的答案是正确的,但我一直将1.0 更改为适合我需要的数字,并检查我的编辑。非常感谢它的帮助
    猜你喜欢
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2023-03-15
    • 1970-01-01
    • 2019-06-04
    相关资源
    最近更新 更多