タップして画面上をドラッグすると、自分のSKSpritenodeをスケールアップ(拡大)します。ユーザがタッチ入力を取り除くと、最後の位置を縮小する必要があります。これは私がこの効果を達成するために、今使っているコードです:タップまたはドラッグが一貫して機能しないときにノードを縮やす
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
let card = atPoint(location) as? Card
if card?.cardType == .main{
card?.zPosition = 30
card?.run(SKAction.scale(to: 1.3, duration: 0.15))
}
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
let card = atPoint(location) as? Card
if card?.cardType == .main{
card?.zPosition = 30
card?.removeFromParent()
addChild(card!)
card?.run(SKAction.scale(to: 1.0, duration: 0.15))
}
}
}
カードがSKSpriteNodeから継承私が定義したクラスです。
問題は、スプライトノードに触れるとスケールアップしないことがありますが、それ以外のときはスケールが上がらないことがあります。私がそれらをドラッグすると、アニメーションが極端に遅いようです。また、ノードを落とす(タッチ入力を取り除く)と、スケールダウン効果が一貫して発生しません(時にはそうでない場合もあります)。何が起こっている?皆さんにもっとソースコードが必要な場合は、私に教えてください。
スケーリングの問題については、SKActionsを積み重ねています。前のアクションを削除するか、キーを割り当てます。 – Knight0fDragon
あなたのドラッグの問題については、私は 'touchesMoved'関数を見ませんが、ここを見てくださいhttp://stackoverflow.com/questions/41179326/moving-multiple-nodes-at-once-from-touch-with-spritekit/41185256 #41185256ドラッグを扱う方法について – Knight0fDragon
あなたのletとifを組み合わせて、オプションの '?'を取り除くこともできます。 'もしlet card = atPoint(location)なら? Card.cardType == .main'、そしてあなたの触れた終わりのメソッドで、removeとaddをする代わりに 'card.moveToParent(self)'を実行してください – Knight0fDragon