2016-03-26 8 views
0

私はパスとSKShapeNodeを持っており、SKShapeNodeをパスに従うようにしたいと考えています(六角形)。SKActionの開始位置の変更を繰り返します。

let pathHexagon:SKShapeNode = SKShapeNode() 
let player:SKShapeNode = SKShapeNode() 

pathHexagon.path = playerHexagonPath(pathHexRadius) 
pathHexagon.position = CGPoint(x: CGRectGetMidX(frame), y: CGRectGetMidY(frame)) 
pathHexagon.strokeColor = UIColor.blackColor() 
pathHexagon.lineWidth = 5 
addChild(pathHexagon) 

player.path = playerPath(playerSize) 
player.position = CGPoint(x: CGRectGetMidX(frame), y:CGRectGetMidY(frame)) 
player.strokeColor = UIColor.blackColor() 
player.fillColor = UIColor.blackColor() 
addChild(player) 

let action = SKAction.followPath(playerHexagonPath(pathHexRadius), speed: CGFloat(300.0)) 
player.runAction(SKAction.repeatActionForever(action)) 

それは多少動作しますが、開始位置は、サイクルごとに変更されます。

http://recordit.co/lEcLxs4DoD

ですが、なぜでしょうか?

最終的に私はこのアニメーションをユーザー入力にリンクしたいと思います。練習として、私はスーパーヘキサゴンを複製しようとしています。だからあなたがこのより良いアプローチを知っていれば私にも知らせてください。

+0

[+ followPath:asOffset:orientToPath:スピード:](https://developer.apple .com/library/mac/documentation/SpriteKit/Reference/SKAction_Ref/index.html#// apple_ref/occ/clm/SKAction/followPath:asOffset:orientToPath:speed :)メソッドを呼び出し、 'offset'パラメータを' false'に設定します。 '+ followPath:speed:'メソッドを呼び出すことは 'followPath:asOffset:orientToPath:speed:'メソッドを呼び出し、 'offset'と' orient'パラメータの両方に 'true'を渡すのと同じです。 – Whirlwind

+0

私は投稿しました[こちら](http://stackoverflow.com/a/35991232/3402095) – Whirlwind

+0

@Whirlwindありがとうございました。それは実際にそれがもはやすべてのサイクルをシフトさせないようにします。しかし、今はオフスクリーンのどこかを動かす(左下に)。開始位置は間違っているようです。 player.positionを無効にしても効果はありません。 – SecondLemon

答えて

2

これはasOffsetパラメータが何をするかです:

@param asOffset YES、パス内のポイントは ノードの開始位置からの相対オフセットがある場合。 NOの場合、ノード内のポイントは絶対座標で です。

私が偽に設定すると、パスからのポイントは、ノードの親の座標系における絶対座標値です。コンテナを作成し、それ

2にプレイヤーを追加する)シーンのアンカーポイントを変更するには

1)が、私はこれがあなたのためにあなたにぴったり疑う:

あなたはそれを動作させるために2つのことを行うことができますすべてを再配置する必要があります。

恐らくこれを解決する方法はまだありませんが、私は自分で試していません。

オプション1:

let container = SKNode() 
    player.path = playerPath(playerSize) 
    player.position = CGPoint(x: 0, y: 0) 
    player.strokeColor = UIColor.blackColor() 
    player.fillColor = UIColor.blackColor() 
    container.addChild(player) 
    container.position = CGPoint(x:frame.midX, y:frame.midY) 
    addChild(container) 

    let action = SKAction.followPath(pathHexagon.path!, asOffset: false, orientToPath: true, speed: CGFloat(300.0)) 
    player.runAction(SKAction.repeatActionForever(action)) 

あるいは、オプション2:あなたは を使用する必要が

self.anchorPoint = CGPoint(x:0.5, y:0.5) 

mainHexagon.path = hexagonPath(mainHexRadius) 
mainHexagon.strokeColor = UIColor.redColor() 
mainHexagon.lineWidth = 10 
addChild(mainHexagon) 

pathHexagon.path = playerHexagonPath(pathHexRadius) 
pathHexagon.strokeColor = UIColor.blackColor() 
pathHexagon.lineWidth = 5 
addChild(pathHexagon) 

player.path = playerPath(playerSize) 
player.position = CGPoint(x: 0, y: 0) 
player.strokeColor = UIColor.blackColor() 
player.fillColor = UIColor.blackColor() 
addChild(player) 

let action = SKAction.followPath(pathHexagon.path!, asOffset: false, orientToPath: true, speed: CGFloat(300.0)) 
player.runAction(SKAction.repeatActionForever(action)) 
関連する問題