现在的位置: 首页 > 综合 > 正文

Sprite Kit编程指南(5)-使用场景间过渡

2018年09月20日 ⁄ 综合 ⁄ 共 1605字 ⁄ 字号 评论关闭

使用场景间过渡

场景是游戏的基本构建块。通常情况下,你为游戏的各部分设计自包含(self-contained)的场景,然后在必要时在这些场景之间过渡。例如,你可以创建不同的场景类表现任何或全部下列概念:

·      在其他内容加载时显示的加载场景

·      选择你要玩什么样的游戏的主菜单场景

·      用户选择的特定类型游戏的配置细节的场景

·      提供游戏的场景

·      当游戏结束时显示的场景

当你在一个已经在呈现场景的视图上呈现新的场景时,你有使用旧场景更改到新场景的过渡动画的变化的选项。使用过渡提供了一定的连续性,从而使场景变化不是那么突然。过渡的完整列表在SKTransition类参考

两个场景之间的过渡


通常情况下,根据游戏或用户输入过渡到一个新的场景。例如,如果用户在你的主菜单场景中按下一个按钮,你可能会过渡到一个新的场景,来配置玩家想玩的赛事。清单5-1展示了你可能在精灵中实现的事件处理程序的方式。处理程序首先在自己身上运行动画来突出按钮(这里不作说明)。然后,它创建一个过渡对象和新的场景。最后,它调用视图来呈现新的景象。过渡意味着这种变化是动画的。

清单5-1   过渡到一个新的场景

 - (void)mouseUp:(NSEvent *)theEvent
{
    [self runAction:self.buttonPressAnimation];
    SKTransition *reveal= [SKTransition revealWithDirection:SKTransitionDirectionDown duration:1.0];
    GameConfigScene *newScene = [[GameConfigScene alloc] initWithSize:CGSizeMake(1024,768)];
/ /可选,插入代码来配置新的场景。
    [self.scene.view presentScene:newScene transition:reveal];
}

过渡发生时,scene属性值可能立即更新为指向新的场景。然后,发生动画。最后,移除对旧场景的强引用。如果你需要在过渡发生后保持场景,你的应用需要保持自身对旧场景的强引用。

组织你的游戏时,创建一个这样的图表是相当有帮助的:它展示了在游戏中的所有场景、场景之间发生的过渡,以及过渡发生时必须传递给新场景的数据。不像在iOS中的视图控制器,Sprite Kit不提供内置的机制传递场景之间的数据。如果你需要在场景过渡时提供数据,你需要实现自己的机制来配置新的场景。通常情况下,这意味着在每个场景中定义你自己的自定义方法和属性,或者在自定义场景类实现的协议中这样做。

配置过渡期间是否播放动画


过渡对象pausesIncomingScenepausesOutgoingScene属性允许你定义动画是否在过渡期间播放。默认情况下,两个场景的动画在过渡期间相继处理。但是,你可能要暂停一个或两个场景,直到过渡完成。例如,重新考虑代码清单5-1。因为按钮将运行一个动作,这个代码期望流出场景(outgoing
scene)会动起来。但也许流入场景(incoming scene)不应该它的内容动起来,直到过渡完成。添加清单5-2的代码达到预期的效果。

清单5-2   过渡期间暂停帧处理

reveal.pausesIncomingScene = NO;

检测何时呈现场景


有时候你需要能够检测场景已被呈现或从视图中移除。你可以通过在你的自定义场景类上实现一个或两个以下方法这样做:

·      实现willMoveFromView方法,在场景将要从视图中移除时调用。

·      实现didMoveToView方法,在场景刚刚由视图完成呈现时调用。

当一个场景没有过渡呈现时,首先移除旧的场景,然后呈现新的场景。当使用过渡时,首先加入新的场景,然后过渡发生,最后旧的场景被移除。

抱歉!评论已关闭.