【问题标题】:iOS mixing Spritekit and UIKitiOS 混合 Spritekit 和 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 节点)。至于您的问题,实际上只有一个答案:视图控制器。不要让自己被别人说的话所迷惑。除非他们在这里说出来并获得支持。 ;)

标签: ios uikit sprite-kit


【解决方案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];
    }
    

    到目前为止,一切都在表现自己。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多