2017-01-25 6 views
2

У меня есть круг в середине, и мне нужно, чтобы стрелять пули в направлении, противоположный направлению, где я касаюсь и выйти из проигрывателя, я написал следующий код, но ничего не произойдетбыстрых объекты съемки от формы круга

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

EDIT ::

Это решило проблему благодаря помощи от принятого ответа

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 являются х и у координаты, где пользователь прикоснулся и они умножаются на -1, чтобы получить в противоположном направлении, где моя пуля будет размещена.

Затем вычисляется угол theta с использованием функции atan2, которая вместо того, чтобы позиционировать мою пулю от игрока (круга), будет располагать ее по краю круга.

ответ

1

Вы пробовали переключение isDynamic с «false» на «true»? Кроме того, попробуйте добавить

+0

Ваш ответ правильный, но я продолжал менять '1.0' на число, соответствующее моим потребностям, и проверять мои изменения. спасибо, это помогло –

+0

@ahmednader Отлично! Рад, что это сработало! – sicvayne