移动SKSpriteNode到触摸

问题描述:

的方向在这里,你有游戏的PRINTSCREEN:正在旋转的触摸的方向移动SKSpriteNode到触摸

enter image description here

我有一个静态SKSpriteNode(播放器)。这是我对这些代码:

class GameplayScene: SKScene, SKPhysicsContactDelegate { 

static let Pi = CGFloat(Double.pi) 
static let DegreesToRadians = Pi/180 

override func touchesMoved(_ touches: Set<UITouch>, with event: 
UIEvent?) { 
    let curTouch = touches.first! as UITouch 
    let curPoint = curTouch.location(in: self) 

    let deltaX = self.player.position.x - curPoint.x 
    let deltaY = self.player.position.y - curPoint.y 
    let angle = atan2(deltaY, deltaX) 

    self.player.zRotation = angle + 90 * GameplayScene.DegreesToRadians 
} 
} 

现在,我想从在同一方向上屏幕的触摸移动玩家每秒拍摄子弹。当子弹移出屏幕时,我想实现“SKAction.removeFromParent”。

这里是我的fireMissile功能:

func fireMissile() { 
    let missile = SKSpriteNode(color: .yellow, size: CGSize(width: 20, 
    height: 5)) 
    missile.name = "Missile" 
    missile.position = CGPoint(x: player.position.x + 30, y: 
    player.position.y) 
    missile.zPosition = 2 
    missile.physicsBody = SKPhysicsBody(rectangleOf: missile.size) 
    missile.physicsBody?.isDynamic = false 
    missile.physicsBody?.categoryBitMask = ColliderType.Bullet 
    missile.physicsBody?.collisionBitMask = ColliderType.Enemy 
    missile.physicsBody?.contactTestBitMask = ColliderType.Enemy 

    self.addChild(missile) 

} 
+0

我不是已经给你这个答案了吗? – Knight0fDragon

+0

困惑,还是你在这里问两个不同的问题?你需要帮助去除子弹,还是帮助旋转坦克?或帮助移动坦克?这些都是独立的问题:) – Fluidity

+0

Fluidify - 我想让基本上以恒定速度在屏幕上触摸的方向(从玩家)射击子弹。对不起,没有明确说明这一点:P – Flinigan

对于定时器,你要使用这样的:

run(SKAction.repeatForever(SKAction.sequence([SKAction.run { 
     yourFunction() 
     }, SKAction.wait(forDuration: 1)])), withKey: "key") 

至于导弹射击,按顺序添加SKActions。第一个应该把弹头放在你的播放器前面,第二个将移动导弹,第三个将删除,但是这只会在其他线路之后由于顺序而运行。如果你想在动画中后期停下来,确保你有这个序列的关键。应该看起来像这样:

missile.zRotation = player.zRotation 
missile.position = CGPoint(x:player.size.width/2*cos(player.zRotation)+player.position.x ,y:player.size.height*sin(player.zRotation)+player.position.y) 
missile.run(SKAction.sequence([SKAction.move(to: CGPoint(x:frame.size.width*cos(player.zRotation)+player.position.x ,y:frame.size.height*sin(player.zRotation)+player.position.y), duration: 0.5), SKAction.removeFromParent()]), withKey: "move") 
+0

最后的运行可能会有轻微的语法错误,但您可能会修复那 – Bruce

+1

你不想使用'定时器'与sprite工具包,你想通过动作 – Knight0fDragon

+0

使用内置计时方法感谢布鲁斯 - 是的,我确实有一个语法问题在最后一行说'Type'([SKAction] ) - > SKAction'没有下标成员“。不,没有解决:/ – Flinigan