iOS 混合 Spritekit 和 UIKit
Posted
技术标签:
【中文标题】iOS 混合 Spritekit 和 UIKit【英文标题】:iOS mixing Spritekit and UIKit 【发布时间】:2014-03-10 22:34:18 【问题描述】:我正在为我的一个孩子编写一个相当简单的数学益智游戏。
我使用了标准的 XCode SpriteKit 游戏模板,它使用 SKScene 和 ViewController.m 以及 MyScene.m 文件创建了一个 SKView。
然后我添加了一个简单的 UIView 来充当带有 UIButtons 的 NumberPad 0-9 的容器。
我很想将 MyScene.m 作为 IBActions 的目标,因为它将使用按钮按下时的状态变化。
但是我想知道哪个类是 IBActions ViewController 或 MyScene 的更好目标。尤其是这两种选择是否会对性能产生影响。
我主要关心的是我看到的一些关于人们在混合 SpriteKit 和 UIKit 时遇到的问题的文章。
【问题讨论】:
对向下检查感到难过。当我试图解释一些我读过的文章时说可以将两者混合使用。其他文章,这是一个明确的禁忌。至少泰斯同情我。 我想看到一篇文章说将 Sprite Kit 与 UIKit 混合是一个禁忌。有些事情你不能做(即在 UIView 上方但在另一个 UIView 下方显示 SK 节点)。至于您的问题,实际上只有一个答案:视图控制器。不要让自己被别人说的话所迷惑。除非他们在这里说出来并获得支持。 ;) 【参考方案1】:出于您的目的,性能影响完全可以忽略不计。但是,从代码的角度来看,我可能会针对视图控制器,以防您想换出场景但重用您的数字键盘。对于数学类型的游戏来说,这听起来像是未来可能的发展。
【讨论】:
【参考方案2】:我接受了 Theis 的建议,因此创建场景的视图控制器包含以下代码。
ViewController.m
- (IBAction)numberPressed:(id)sender
UIButton *pressedButton = (UIButton*) sender;
NSString *button = pressedButton.currentTitle;
[scene.keysPressed addObject:button];
- (IBAction)clearPressed:(id)sender
UIButton *pressedButton = (UIButton*) sender;
NSString *button = pressedButton.currentTitle;
[scene.keysPressed addObject:button];
然后在我的场景代码中,我声明了 keysPressed 属性,有点偏执我把它变成了原子的,以防视图控制器和场景在不同的线程中运行。
MyScene.h
@property (strong, atomic) NSMutableArray *keysPressed;
然后在场景更新方法中,我只需检查我用作堆栈的可变数组,以查看已添加任何内容并获取其值并将其删除。
MyScene.m
-(void)update:(CFTimeInterval)currentTime
...
NSString *keyNum = nil;
if([_keysPressed count] > 0)
keyNum = [_keysPressed firstObject];
[_keysPressed removeObjectAtIndex:0];
到目前为止,一切都在表现自己。
【讨论】:
以上是关于iOS 混合 Spritekit 和 UIKit的主要内容,如果未能解决你的问题,请参考以下文章
iOS -- SpriteKit框架之SKPhysicsBody的移动和连接