シーンに追加されたカスタム SKSpriteNode クラスを使用するスプライトがあります。
このエフェクトを実行したい: 3 つのスプライトが並んでいるとします。スプライトに触れた場合、または指が触れている間にスプライトを少し拡大縮小し、指が触れていないとすぐに元のサイズに縮小する必要があります。
つまり、ユーザーが大きな指を左から右にスライドさせ、最初のスプライトから開始して最後のスプライトを通過したとします。指がスライドしているとき、指がフレームに入るとすぐに最初のスプライトが拡大するようにします。指が右にスライドし続けて 2 番目のスプライトに到達すると、最初のスプライトで指がその領域にないことを検出し、元のサイズに縮小します。同時に、指がその領域内にあるため、2 番目のスプライトが拡大されます。スライド中、最後のスプライトを通過した直後に、いつでも指が表面を離れます。
私の問題は、スプライト クラス内のロジックを使用してこれを実行したいということですが、そのスプライトのクラスで touchesBegan、touchesMoved などを実装すると、touchesMoved はその領域内になくても指を報告し続けるため、機能しません。
これは、スプライトのクラス内の私のタッチ ロジックです。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
SKAction *scaleUp = [SKAction scaleTo:1.2 duration:0.2];
[self runAction:scaleUp];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInNode:self];
// CGPoint convertPT = [self convertPoint:touchLocation fromNode:self.parent];
NSLog(@"%@", NSStringFromCGPoint(touchLocation));
// if (CGRectContainsPoint(self.frame, touchLocation)) {
// NSLog(@"this is never fired?");
// }
}
指がレイヤーの外にある場合でも、NSLog行は常に場所を出力します...
指がスプライトの外に出た後、TouchesMoved の発火を停止させたいと思います。
それ、どうやったら出来るの?