移动SKSpriteNode与另一个方向相同

时间:2015-11-22 18:18:59

标签: swift sprite-kit swift2

当我按一个按钮的方向与另一个方向相同但更快时,我想移动一个SKSpriteNode。我暂时拥有这个

override func didMoveToView(view: SKView) {

    Vaisseau = SKSpriteNode(texture: VaisseauTexture)
    Vaisseau.position = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2)
    Vaisseau.physicsBody = SKPhysicsBody(rectangleOfSize: Vaisseau.size)
    Vaisseau.physicsBody?.affectedByGravity = false
    Vaisseau.physicsBody?.categoryBitMask = PhysicsCategories.Vaisseau
    Vaisseau.physicsBody?.contactTestBitMask = PhysicsCategories.Bonus
    Vaisseau.physicsBody?.contactTestBitMask = PhysicsCategories.Meteorites
    Vaisseau.physicsBody?.dynamic = false
    self.addChild(Vaisseau)

    BoutonMissile = UIButton(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
    BoutonMissile.center = CGPointMake(self.frame.size.width / 4 - 120,self.frame.size.height / 4 + 240)
    BoutonMissile.addTarget(self, action: Selector("TireMissile"), forControlEvents: UIControlEvents.TouchUpInside)
    BoutonMissile.setBackgroundImage(ImageBoutonMissile, forState: .Normal)
                self.view?.addSubview(BoutonMissile)

        }

        func TireMissile() {
            let missile = SKSpriteNode(imageNamed: "Missile")
            missile.position = CGPointMake(Vaisseau.position.x,Vaisseau.position.y)
            self.addChild(missile)


        } 

我希望当我按下buttonMissile按钮时,我会按照我用手指移动的Vaisseau的方向移动。

编辑:

我搜索如何在矢量中转换弧度,我发现了这一点。这是完美的工作,但我的missile始终位于Vaisseau

的右侧
func TireMissile() {

        let missile = SKSpriteNode(imageNamed: "Missile")
        missile.position = CGPointMake(Vaisseau.position.x,Vaisseau.position.y)
        missile.zRotation = Vaisseau.zRotation
        missile.zPosition = -1
        self.addChild(missile)
        let Dx = cos(Vaisseau.zRotation)
        let Dy = sin(Vaisseau.zRotation)
        print(cos(Vaisseau.zRotation))
        print(sin(Vaisseau.zRotation))
        missile.runAction(SKAction.moveBy(CGVector(dx: Dx * 4000 , dy: Dy * 4000), duration: 10))

    }

编辑:

我找到了解决方案:我替换

let Dx = cos(Vaisseau.zRotation)
let Dy = sin(Vaisseau.zRotation)

let Dx = cos(Vaisseau.zRotation + CGFloat(M_PI/2))
let Dy = sin(Vaisseau.zRotation + CGFloat(M_PI/2))

1 个答案:

答案 0 :(得分:0)

查看SKActions,您所做的是改变到达目的地所需的时间,或者调用duration

e.g。

missle.runAction = SKAction.moveByX(100, y: missle.position.y, duration:1) //will move 100 pixels in 1 second
self.runAction = SKAction.moveByX(100, y:self.position.y, duration:2) //will move 100 pixels in 2 seconds