当我按一个按钮的方向与另一个方向相同但更快时,我想移动一个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))
答案 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