如何在路径中使玩家移至对侧? [英] How to make player move to opposite side while is in a path?

查看:61
本文介绍了如何在路径中使玩家移至对侧?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望当触摸开始时,播放器(红色圆圈)移动到圆形路径的另一侧.我已经使播放器遵循了路径,但是我没有在互联网上找到我的问题的答案.

I want that when touches began the player (red circle) moves to the opposite side of the circular path. I already made that the player follows a path, but I havent find answer to my question on internet.

    override func didMoveToView(view: SKView) {

    player = SKSpriteNode(imageNamed: "circulo")
    player.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2 - 170)
    player.color = colorGris
    player.colorBlendFactor = 1
    player.size = CGSize(width: 25, height: 25)
    self.addChild(player)
    player.zPosition = 3

   }
   override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
   /* Called when a touch begins */

    if gameStarted == false {

        gameStarted = true
        moveClockWise()
        movingClockWise = true

    }

       }



   func moveClockWise(){



    let dx = player.position.x - self.frame.width / 2
    let dy = player.position.y - self.frame.height / 2

    let rad = atan2(dy, dx)

    path = UIBezierPath(arcCenter: CGPoint(x:self.frame.width / 2, y: self.frame.height / 2) , radius: 170, startAngle: rad, endAngle: rad + CGFloat(M_PI * 4), clockwise: true)

    let follow = SKAction.followPath(path.CGPath, asOffset: false, orientToPath: true, speed: 200)
    player.runAction(SKAction.repeatActionForever(follow).reversedAction())

}

推荐答案

在圆形路径中移动对象的最简单方法之一是

One of the easiest ways to move an object in a circular path is to

  1. 创建一个SKNode容器
  2. 创建一个精灵
  3. 将容器添加到场景中
  4. 将精灵的x位置设置为圆形路径的半径
  5. 将精灵添加到容器中
  6. 旋转容器
  1. Create a SKNode container
  2. Create a sprite
  3. Add the container to the scene
  4. Set the sprite's x position to the radius of the circular path
  5. Add the sprite to the container
  6. Rotate the container

如果要将精灵移动到另一侧或更改旋转半径,只需

If you want to move the sprite to the other side or change the rotation's radius, simply

  1. 更改精灵的x位置

如果要更改旋转方向,

  1. 反转容器的旋转

示例代码:

// 1) Create the container node 
let node = SKNode()
// 2) Create a sprite
let sprite = SKSpriteNode(color:SKColor.blueColor(),size:CGSizeMake(20,20))
var rotation:CGFloat = CGFloat(M_PI)
let radius:CGFloat = 50

override func didMoveToView(view: SKView) {
    scaleMode = .ResizeFill
    node.position = view.center
    // 3) Add the container to the scene
    addChild(node)
    // 4) Set the sprite's x position
    sprite.position = CGPointMake(radius, 0)
    // 5) Add the sprite to the container
    node.addChild(sprite)
    // 6) Rotate the container
    rotate()
}

// Rotate the container
func rotate() {
    let action = SKAction.rotateByAngle(rotation, duration: 4)
    node.runAction(SKAction.repeatActionForever(action),withKey: "rotate")
}

// 8) Reverse the direction of the rotation
func reverse() {
    rotation = -rotation
}

// Stop rotating the container
func stopRotation() {
    if node.actionForKey("rotate") != nil {
        node.removeActionForKey("rotate")
    }
}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
   /* 7) Change the sprite's x-position  */
    if sprite.actionForKey("move") == nil {
        stopRotation()
        let opposite = -sprite.position.x * 2
        let move = SKAction.moveByX(opposite, y: 0, duration: 3)
        let rotate = SKAction.runBlock {
            self.rotate()
        }
        sprite.runAction(SKAction.sequence([move, rotate]), withKey: "move")
    }
}

这篇关于如何在路径中使玩家移至对侧?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆