移动SKSpriteNode到触摸
的方向在这里,你有游戏的PRINTSCREEN:正在旋转的触摸的方向移动SKSpriteNode到触摸
我有一个静态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)
}
对于定时器,你要使用这样的:
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")
最后的运行可能会有轻微的语法错误,但您可能会修复那 – Bruce
你不想使用'定时器'与sprite工具包,你想通过动作 – Knight0fDragon
使用内置计时方法感谢布鲁斯 - 是的,我确实有一个语法问题在最后一行说'Type'([SKAction] ) - > SKAction'没有下标成员“。不,没有解决:/ – Flinigan
我不是已经给你这个答案了吗? – Knight0fDragon
困惑,还是你在这里问两个不同的问题?你需要帮助去除子弹,还是帮助旋转坦克?或帮助移动坦克?这些都是独立的问题:) – Fluidity
Fluidify - 我想让基本上以恒定速度在屏幕上触摸的方向(从玩家)射击子弹。对不起,没有明确说明这一点:P – Flinigan