如何在Swift 3中生成带有两个CGPoint的CGVector

时间:2017-01-11 21:47:05

标签: swift3 sprite

我正在Swift 3开发一款小游戏。我想把我的敌人移到角色位置,我试图使用这个功能:

let actionTransaction6 = SKAction.move(to: CGPoint(x: 
personaje.position.x, y:personaje.position.y ), duration: 6.0 -  
Double(nivel))

enemigo6.run(actionTransaction6)

但是当他们到达我角色的最初点时,敌人会停下来。我知道有一个功能可以转移到一个特定的方向,但我无法找到"我的CGVector。 它可能是这样或什么?

SKAction.move(by: enemigo6.position - personaje.position, duration: 10)

感谢您提前!

2 个答案:

答案 0 :(得分:3)

-没有定义CGPoint运算符,也没有从两点创建CGVector的功能。

只需从组件手动创建矢量:

let movement = CGVector(
    x: enemigo6.x - personaje.position.x,
    y: enemigo6.y - personaje.position.y
)
SKAction.move(by: movement, duration: 10)

答案 1 :(得分:0)

制作自己的扩展名

import UIKit

extension CGPoint {
    static func - (lhs: CGPoint, rhs: CGPoint) -> CGVector {
        return  CGVector(dx: lhs.x - rhs.x, dy: lhs.y - rhs.y)
    }
}

然后您将获得CGVector = CGPoint-CGPoint。这样您就可以使用您的代码了:

SKAction.move(by: enemigo6.position - personaje.position, duration: 10)

以防万一您需要其他操作

extension CGPoint {
    static func + (lhs: CGPoint, rhs: CGVector) -> CGPoint {
        return CGPoint(x: lhs.x + rhs.dx, y: lhs.y + rhs.dy)
    }

    static func - (lhs: CGPoint, rhs: CGVector) -> CGPoint {
        return CGPoint(x: lhs.x - rhs.dx, y: lhs.y - rhs.dy)
    }

    static func - (lhs: CGPoint, rhs: CGPoint) -> CGVector {
        return  CGVector(dx: lhs.x - rhs.x, dy: lhs.y - rhs.y)
    }
}