0

動物のキャラクターを使った SpriteKit ゲームに取り組んでいます。動物は、GameplayKit のエージェントを使用して画面を左右に移動します。彼らは、画面の片側から反対側に移動する目に見えないエージェントに従います。これは、右から左に移動するとスプライトが上下逆に移動することを除いて、正常に機能します (左から右に移動しても問題ありません)。ミラー イメージを取得するために xScale を変更しようとしましたが、これを変更するために作成した SKAction をエージェントがオーバーライドしているようです (文字が画面上で一瞬びくびくします)。スプライト文字を直立させる方法を知っている人はいますか? 私のコードは func didBeginContact でトリガーされます。

if contact1 is RightWall {
   if contact2 is AnimalNode {
      invisibleNode.position = CGPointMake(0, CGFloat(10 + arc4random_uniform(UInt32(size.height - 20))))
      invisibleNode.agent.position = float2(x: Float(invisibleNode.position.x), y: Float(invisibleNode.position.y))
   contact2.turnLeft() // this triggers the xScale change I've tried directly on the SKNode
}

これを修正する方法はありますか?

更新:コードは元の質問に示されています。

移動ノードは、SKNode (クラス: AnimalNode) の子に次の関数で用意されています。

override func turnLeft() { 
removeActionForKey("rightTurn") let turnRight2Left = SKAction.sequence([SKAction.scaleXTo(0.3, duration: 0.1), SKAction.scaleXTo(-0.3, duration: 0.1), SKAction.scaleXTo(-1.0, duration: 0.1)]) runAction(turnRight2Left, withKey: "leftTurn") 
}

RightWall は GameScene に設定された SKShapeNode です。ifステートメントが機能しているかどうかを確認するためにprintステートメントを追加したため、連絡先は正常に機能します。func turnLeft の呼び出しにも問題はなく、ノードに何も変化がありません。たぶん、これはキャラクターを反転させる最良の方法ではありません。私は他のアプローチに対してオープンです。turnLeft 関数は、キャラクターが右から左に移動するときに、キャラクターの向きの変化がよりシームレスに見えるように設定されています (そのため、スプライトの xScale を段階的に変更して、より「アニメーション化された」感じを与えます)。

4

1 に答える 1

0

助けてくれてありがとう。少し掘り下げましたが、サブクラス化された xScale への別の呼び出しを見つけました。これは私の呼び出しを上書きし、私が気づいたジャンプアクションを引き起こしていました. 親メソッドを組み合わせて問題を解決できます。ヒントとフィードバックをありがとうございました。

于 2015-12-16T21:08:16.427 に答える