什么大致类似于 iOS-UIKit 中的 cocos2D 场景?

Posted

技术标签:

【中文标题】什么大致类似于 iOS-UIKit 中的 cocos2D 场景?【英文标题】:What's roughly analogous to a cocos2D Scene in iOS-UIKit? 【发布时间】:2014-05-11 14:37:21 【问题描述】:

在 cocos2D 中,用户的体验被分解为场景。菜单场景,可能是一些选项场景、游戏关卡场景、信用等。导演根据需要在这些场景中随机播放用户。这些场景之间有各种各样的过渡。

ios 中,(不是 Sprite Kit)什么是场景调用的等价物,它们之间可用的转换名称/类型是什么?什么是董事?

编辑:在下面的 Storyboard 视频中,场景一词用于表示与用户在 cocos2D 应用程序中的想法相似的事物,而 Segues 用于描述看起来非常相似的事物过渡。这是 UIKit/iOS 中此类事物的通用词典吗? https://www.youtube.com/watch?v=a_DCTSTv1Mw

【问题讨论】:

iOS 中没有场景这样的概念,我们对不同的场景使用单独的视图。 那么视图就像场景? @SKOOP:不完全是——一个视图就是一个视图。您可以同时运行多个视图 - 与场景不同,场景一次只能运行一次。有些应用程序一次只使用一个视图,因此您可能会发现它类似于场景,但它们有着根本的不同。 @开个玩笑。谢谢!有关我迄今为止收集到的更多信息,请参阅下面的“答案”。我有几个关于 Seques 和 UIViewControllers 的问题,但我被阻止提出更多问题。并且不可能为该网站做出贡献,因为我不在那个知识阶段。所以... 【参考方案1】:

SpriteKit 是 iOS 的一部分,只是提醒一下。

所以你真正要问的是“在UIKit 中最接近CCScene 的是什么?”

UIView 是你能得到的最接近的东西。但它提供的界面类型与 Cocos2d/SpritKit 等游戏引擎不同。

class reference for UIView 有一些方法可以封装到其他UIViews 的转换。即:

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion
+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

对于动画选项,您可以提供以下类型的过渡:

UIViewAnimationOptionTransitionNone            = 0 << 20,
UIViewAnimationOptionTransitionFlipFromLeft    = 1 << 20,
UIViewAnimationOptionTransitionFlipFromRight   = 2 << 20,
UIViewAnimationOptionTransitionCurlUp          = 3 << 20,
UIViewAnimationOptionTransitionCurlDown        = 4 << 20,
UIViewAnimationOptionTransitionCrossDissolve   = 5 << 20,
UIViewAnimationOptionTransitionFlipFromTop     = 6 << 20,
UIViewAnimationOptionTransitionFlipFromBottom  = 7 << 20,

在这种情况下。 UIViewController 将是您可以用来代替 CCDirector 的最佳选择。但是,应用程序通常不会只有 1 个UIViewControllerUIKitSpriteKit 用于两种截然不同的事物,因此它们的使用方式不同。

视图控制器会导致这样的转换(假设您有一些操作方法):

-(IBAction)switchViewsPressed:(id)sender 
     [UIView transitionFromView:[self firstView] toView:[self secondView] duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];

【讨论】:

所以一个 UIView 可以由大量的其他 UIView 组成,但其中一个对于其余的 UIView 来说是一种“场景”? UIViewController 是否规定了任何两个视图之间会发生什么样的转换?还是视图本身会这样做? 有点。这就是 Scene:View 没有 1:1 关系的原因。 UIViewController 有一个UIView,可以通过[self view] 引用。这将是“场景”,然后在视图控制器视图中添加更多 UIViews 而不是 CCNodes UIViewController 没有规定直接通过块或委托接口之类的转换。相反,您将在UIViewController 中对转换进行编码以引起视图的转换。检查编辑以回答示例。 你想具体做什么?听起来你有 Cocos2D 背景,而不是 iOS。这可以根据您的最终目标彻底改变事情。【参考方案2】:

据我所知,现在我知道了一些术语:

UIView 是一个矩形对象,可以像场景一样工作,因为它包含构成“场景”对象的所有其他 UIView。所以,在 cocos2D 的意义上,一个 UIView 是场景,其他 UIView 是构成场景内容的节点。

UIViews 内部是一个Layer,本质上是一个CALayer,但是其他的可以作为这个Layer 的children,也可以作为cocos2D 的Nodes,但是它们都将是它们所在的UIView 容器的Children。从这个意义上说,所有的 UIView 都可以被认为是 cocos2D 场景,主要区别在于 UIKit 允许许多 UIView,而 cocos2D 只允许一个当前和活动的场景。

几乎任何东西都可以告诉 UIView 转换到另一个 UIView。

因此,将一个 UIView 分配为构成场景的所有其他 UIView 的主 UIView 的角色意味着它是“场景”。这个“主” UIView 将被分配一个 UIViewController,然后它可以通知它与其他“主” UIView 之间的转换,但是这也可能是由其他 View 组成的“子场景”的情况。

从这个意义上说,UIViewController 可以像 Director 一样工作,但它也可以做其他事情。不确定是什么,在这个阶段。但是任何其他对象也可以告诉 UIView 转换到另一个 UIView,所以任何东西都可以是 Director。

【讨论】:

以上是关于什么大致类似于 iOS-UIKit 中的 cocos2D 场景?的主要内容,如果未能解决你的问题,请参考以下文章

cocos2dx中的Rapidjson

适用于iPhone的Cocos2d中的整数对

更新 cocos2d 中的循环和按钮

Cocos2dx开发之设计模式

Cocos2D 图层中的自定义滚动

cocos2d CCSprite + 动画重复?