我正在创建一个游戏,但我很难让子弹朝操纵杆的方向射出。这是我的子弹的方法
func spawnBullets(){
let bullet = SKSpriteNode(imageNamed: "bullet.png")
bullet.zPosition = -5
bullet.position = CGPointMake(hero.position.x, hero.position.y)
bullet.xScale = 0.25
bullet.yScale = 0.25
bullet.physicsBody = SKPhysicsBody(rectangleOfSize: bullet.size)
bullet.physicsBody?.categoryBitMask = PhysicsCategory.bullet
bullet.physicsBody?.contactTestBitMask = PhysicsCategory.enemy
bullet.physicsBody?.affectedByGravity = false
bullet.physicsBody?.dynamic = false
let action = SKAction.moveToY(self.size.height + 30, duration: 1.0)
let actionDone = SKAction.removeFromParent()
bullet.runAction(SKAction.sequence([action, actionDone]))
self.addChild(bullet)
}
以下是我在中调用该方法的方式
override func didMoveToView(view: SKView) {
_ = NSTimer.scheduledTimerWithTimeInterval(0.25, target: self,
selector: Selector ("spawnBullets"), userInfo: nil, repeats: true)
}
下面是我如何编码我的触摸移动功能(我相信这是我需要编辑的方法)
override func touchesMoved(touches: Set<UITouch>, withEvent event:
UIEvent?) {
for touch in touches {
let location = touch.locationInNode(self)
let v = CGVector(dx: location.x - joystickBase.position.x, dy:
location.y - joystickBase.position.y)
let angle = atan2(v.dy, v.dx)
let deg = angle * CGFloat(180 / M_PI)
let length: CGFloat = joystickBase.frame.size.height / 2
let xDist:CGFloat = sin(angle - 1.5709633) * length
let yDist:CGFloat = cos(angle - 1.5709633) * length
print(deg + 180)
if (stickActive == true) {
if (CGRectContainsPoint(joystickBase.frame, location)) {
joystick.position = location
}else{
joystick.position = CGPointMake(joystickBase.position.x -
xDist, joystickBase.position.y + yDist)
}
}
}
}
您只是在垂直方向上移动项目符号:
let action = SKAction.moveToY(self.size.height + 30, duration: 1.0)
不确定这是否是一场双棍游戏。
要让精灵在操纵杆的基础上运行,只需执行以下
let accel = 10 //accel is the # of pixels the sprite moves per frame, do not use moveTo, because moveTo will change the speeds of your sprite based on distance
let action = SKAction.moveByX(joystick.x * accel,y:joystick.y * accel,duration:1)
当然,这是基于这样一种理解,即操纵杆坐标在每个轴上从-1.0到1.0,向上或向右的点会得到1.0的结果
不过,我甚至不会采用这种方法,SKActions对于非自动化的事情来说不是一个好的选择。你应该在更新阶段的某个点更新精灵的位置
sprite.position.x += joystick.x * accel
sprite.position.y += joystick.y * accel