Objective c SpriteKit:检查特定坐标的sprite是否按预期运行
我正在为Mac开发一款SpriteKit游戏,我需要能够检查某些sprite节点何时低于某个Y轴。我目前正在使用此代码:Objective c SpriteKit:检查特定坐标的sprite是否按预期运行,objective-c,macos,coordinates,sprite-kit,Objective C,Macos,Coordinates,Sprite Kit,我正在为Mac开发一款SpriteKit游戏,我需要能够检查某些sprite节点何时低于某个Y轴。我目前正在使用此代码: -(void) hitOrMiss { double delayInSeconds = 0.1; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, di
-(void) hitOrMiss {
double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(),^{
if (orb.position.y < 80) {
NSLog(@"Miss!");
[orb removeFromParent];
}
[self hitOrMiss];
});
}
-(无效)hitOrMiss{
双延迟频率=0.1;
dispatch_time_t popTime=dispatch_time(dispatch_time_NOW,(int64_t)(DelayUnseconds*NSEC_PER_SEC));
dispatch_after(popTime,dispatch_get_main_queue()^{
如果(球体位置y<80){
NSLog(@“小姐!”);
[orb从父对象移除];
}
[自虐];
});
}
它意味着每0.1秒运行一个连续循环,并检查y位置80以下的球体。当我在程序中使用此方法时,它通常不会确认低于80的orb,有时会在从父对象中删除同一orb之前多次记录该orb。我有多个球体在屏幕上移动,这就是为什么它不能像我预期的那样始终如一地工作的原因吗
谢谢,如果您有任何帮助,我们将不胜感激。为什么不尝试使用
SKAction
来完成此任务:
double delayInSeconds = 0.1;
SKAction *yCheckAction = [SKAction sequence:@[[SKAction waitForDuration:delayInSeconds], [SKAction runBlock:^{
if (orb.position.y < 80) {
NSLog(@"Miss!");
[orb removeFromParent];
}
}]]];
[self runAction:[SKAction repeatActionForever:yCheckAction]];
然而,操作可能相当繁重,因此,如果不需要0.1秒的延迟,那么最好将其放在更新方法中,正如这里的另一个提示所建议的那样。因此:
-(void)update:(CFTimeInterval)currentTime {
[self enumerateChildNodesWithName:@"orb" usingBlock:^(SKNode *orb, BOOL *stop) {
if (orb.position.y < 80) {
NSLog(@"Miss!");
[orb removeFromParent];
}
}];
}
-(void)更新:(CFTimeInterval)currentTime{
[使用block:^(SKNode*orb,BOOL*stop)的名称为@“orb”的自枚举子节点{
如果(球体位置y<80){
NSLog(@“小姐!”);
[orb从父对象移除];
}
}];
}
我会在场景的更新方法中这样做。SpriteKit游戏通常以每秒60帧的速度运行,您可以遍历所有球体,并检查它们在y轴上是否低于80帧。在行动或GCD中这样做有点像射杀大象,把大象塞进你的枪里,用一个巨大的电动推土机(俚语是大象推土机,没有专利,令人惊讶)
-(void)update:(CFTimeInterval)currentTime {
[self enumerateChildNodesWithName:@"orb" usingBlock:^(SKNode *orb, BOOL *stop) {
if (orb.position.y < 80) {
NSLog(@"Miss!");
[orb removeFromParent];
}
}];
}