0

GKPath を表示するトリックはありますか?

たとえば、私のパス:

class ScenarioPath: GKPath {

    //SET
    //   |  |  |  |  |  |
    // --A--B--C--D--E--F--
    //   |  |  |  |  |  |
    //6 punti con raggio quasi 600 e lato 500 va bene per scenario 2K * 3K
    static let lato = Float(500.0)
    static let maxY = Float(0.0)
    static let radius : Float = 600.0

    static let maxYNormalize = maxY - radius

    static let pts = [
        vector_float2(-lato,maxYNormalize),
        vector_float2(+lato,maxYNormalize),
        vector_float2(-2*lato,maxYNormalize),
        vector_float2(+2*lato,maxYNormalize),
        vector_float2(-3*lato,maxYNormalize),
        vector_float2(+3*lato,maxYNormalize)]


    init () {
        super.init(points: UnsafeMutablePointer(ScenarioPath.pts), count: ScenarioPath.pts.count, radius: ScenarioPath.radius, cyclical: true)
    }


}

このパスを表示する簡単な機能を探しています。ありがとう

4

1 に答える 1

1

GameplayKit はグラフィック フレームワークではありません。これは、任意のグラフィックス フレームワークで使用できる低レベルのツールキットです。sを描画するための機能はありません。これはGKPath、パスを解釈する方法が、グラフィックス ツールキットや座標系の数と少なくとも同じくらいあるためです。

SpriteKit を使用しているためCGPath、 と同じポイント セットを使用してを作成しGKPath、それを に割り当ててSKShapeNodeシーンに配置するのはそれほど難しくありません。

2 つの大規模なデモ プロジェクト、 AgentsCatalogおよびDemoBots内で、まさにそれを行う Apple サンプル コードを見つけることができます。

ここにあなたが始めるためのビットがあります:

// BTW, vector_float2 just a typealias for float2,
// and is ArrayLiteralConvertible, so you can write your array shorter:
let pts: [float2] = [
    [-lato,maxYNormalize],
    [+lato,maxYNormalize],
    // ...
]

// CGPoint extension to make the conversion more readable and reusable
extension CGPoint {
    init(_ vector: float2) {
        self.init(x: CGFloat(vector.x), y: CGFloat(vector.y))
    }
}

// make array of CGPoints from array of float2
let cgPoints = pts.map(CGPoint.init)
// use that array to create a shape node
let node = SKShapeNode(points: UnsafeMutablePointer(cgPoints), count: cgPoints.count)

もちろん、これはパスがシーンと同じ座標系で指定されていることを前提としています。そうでない場合は、いくつかの変換が必要になります。

于 2016-02-08T01:27:26.783 に答える