我有一个使用添加到场景中的自定义 SKSpriteNode 类的精灵。
我想做这个效果:假设我有 3 个并排的精灵。我希望精灵在被触摸或手指触摸它时稍微缩放,一旦手指不触摸它,它应该缩小到原始大小。
我的意思是:假设用户用大手指从左向右滑动,从第一个精灵开始到最后一个精灵结束。当手指滑动时,我希望第一个精灵在手指进入其框架后立即放大。随着手指继续向右滑动并到达第二个精灵,我希望第一个精灵检测到手指不在其区域上并缩小到其原始大小。同时,第二个精灵会放大,因为现在手指在它的区域内。在滑过最后一个精灵之后,手指在滑动过程中随时离开表面。
我的问题是我想在 sprite 类中使用逻辑来执行此操作,但是当我在 sprite 的类上实现 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 在手指离开精灵后停止射击。
我怎么做?