我有一个sprite-kit游戏,我需要经常检查玩家是否已经丢失
- (void)update:(NSTimeInterval)currentTime
{
for (SKSpriteNode *sprite in self.alienArray ) {
if (sprite.position.y < 10) {
LostScene *lostScene = [[LostScene alloc] initWithSize: CGSizeMake(CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
NSLog(@"about to present");
[self.view presentScene:lostScene transition:[SKTransition fadeWithDuration:0.5]];
}
}
}
但是当调用此方法时(我知道正在发生),没有场景出现。我究竟做错了什么?我认为它与过渡有关,因为当我把它拿出来时,它可以正常工作
答案 0 :(得分:5)
您应该添加现有场景的属性,例如:BOOL playerHasLost并编辑您的更新方法:
- (void)update:(NSTimeInterval)currentTime
{
if(!playerHasLost)
{
for (SKSpriteNode *sprite in self.alienArray )
{
if (sprite.position.y < 10)
{
playerHasLost = YES;
LostScene *lostScene = [[LostScene alloc] initWithSize: CGSizeMake(CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
NSLog(@"about to present");
[self.view presentScene:lostScene transition:[SKTransition fadeWithDuration:0.5]];
break;//to get out of for loop
}
}
}
}
所以这种方式,只要精灵到达你被视为失去位置的位置,它就会将变量设置为YES,呈现场景并且不再重复。
答案 1 :(得分:0)
原因很简单,每一帧都会调用更新方法,运行过渡时,每一帧都会重新显示场景,因此看起来好像正在发生nithing。你应该看到NSLog垃圾邮件发送日志控制台。