복붙노트

[SWIFT] 일정 기간 동안 수동으로 이동 노드

SWIFT

일정 기간 동안 수동으로 이동 노드

해결법


  1. 1.이 같은 시나리오에서 SKActions를 사용하지 정확합니다. 난 당신이 SKActions를 사용하지 않고 위치로 노드를 이동하려고 참조하십시오. 난 정말 당신이 게시 된 코드가있는 문제를 이해하지 않습니다. 그러나 나는 SKActions없이 업데이트 기능의 위치에 노드를 이동하는 방법을 보여줍니다 작은 샘플 프로젝트를 작성했습니다. 이 샘플 프로젝트에서 나는 현재의 터치 위치로 이동이 스프라이트 있습니다. 당신은 노드가 이동하는 속도뿐만 아니라 속도가 적용되는 속도를 설정할 수 있습니다. 당신은 게임에 대한 올바른 느낌을 얻을 수있는 속도 장난을 시도 할 수 있습니다. 노드가 목표 위치에 도달 할 때 당신은 또한 (다시,이 게임에 따라 달라집니다) 경우를 처리해야합니다.

    이 같은 시나리오에서 SKActions를 사용하지 정확합니다. 난 당신이 SKActions를 사용하지 않고 위치로 노드를 이동하려고 참조하십시오. 난 정말 당신이 게시 된 코드가있는 문제를 이해하지 않습니다. 그러나 나는 SKActions없이 업데이트 기능의 위치에 노드를 이동하는 방법을 보여줍니다 작은 샘플 프로젝트를 작성했습니다. 이 샘플 프로젝트에서 나는 현재의 터치 위치로 이동이 스프라이트 있습니다. 당신은 노드가 이동하는 속도뿐만 아니라 속도가 적용되는 속도를 설정할 수 있습니다. 당신은 게임에 대한 올바른 느낌을 얻을 수있는 속도 장난을 시도 할 수 있습니다. 노드가 목표 위치에 도달 할 때 당신은 또한 (다시,이 게임에 따라 달라집니다) 경우를 처리해야합니다.

    당신은 질문이있는 경우에는이 전혀 도움이 및 / 또는 알려줘.

    import SpriteKit
    class GameScene: SKScene {
        var sprite: SKSpriteNode!
        var travelPoint: CGPoint = CGPoint() //The point to travel to.
        let travelSpeed = CGVector(dx: 200, dy: 200) //The speed at which to travel.
        let rate:CGFloat = 0.1 //1.0 Completely responsive. 0.0 Completely unresponsive. I set this value to < 1 to smooth the application of motion.
        override func didMoveToView(view: SKView) {
            self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
            sprite = SKSpriteNode(color: UIColor.redColor(), size: CGSize(width: 50, height: 50))
            sprite.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size)
            sprite.position = CGPoint(x: self.size.width/2.0, y: self.size.height/2.0)
            sprite.physicsBody?.affectedByGravity = false
            self.addChild(sprite)
        }
        override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
            let touch = touches.first as! UITouch
            let location = touch.locationInNode(self)
                travelPoint = location
        }
        override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
            let touch = touches.first as! UITouch
            let location = touch.locationInNode(self)
            travelPoint = location
        }
        override func update(currentTime: CFTimeInterval) {
            let disp = CGVector(dx: travelPoint.x-sprite.position.x, dy: travelPoint.y-sprite.position.y)
            let angle = atan2(disp.dy, disp.dx)
            let vel = CGVector(dx: cos(angle)*travelSpeed.dx, dy: sin(angle)*travelSpeed.dy)
            let relVel = CGVector(dx: vel.dx-sprite.physicsBody!.velocity.dx, dy: vel.dy-sprite.physicsBody!.velocity.dy)
            sprite.physicsBody!.velocity = CGVector(dx: sprite.physicsBody!.velocity.dx+relVel.dx*rate, dy: sprite.physicsBody!.velocity.dy+relVel.dy*rate)
        }
    }
    

  2. from https://stackoverflow.com/questions/30362586/manually-move-node-over-a-period-of-time by cc-by-sa and MIT license