是否可以在ScreenSaverView中使用SpriteKit

时间:2016-02-24 03:00:17

标签: swift macos sprite-kit osx-elcapitan screensaver

我正在尝试使用Swift中的sprite kit场景创建一个屏幕保护程序。当我第一次创建项目时,在添加任何SpriteKit代码之前,我遇到了屏幕保护程序构建的问题,但只显示“你不能在这个版本的OS X中使用屏幕保护程序X”。

这已经解决了,或者我想通过添加到构建设置来解决:

EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

这似乎可以解决问题。我认为这个问题在我身后,但是现在我已经添加了一个非常简单的SpriteKit场景(只显示BG颜色),消息又回来了。任何人都可以确认屏幕保护程序可以使用SpriteKit,如果有,任何关于如何使其工作的想法?

1 个答案:

答案 0 :(得分:0)

[编辑]

事实证明,在100%swift代码中使用ScreenSaverView时,它不喜欢ScreenSaverView swift文件之外的任何快速对象。如果您将代码保留在文件中,那么您将不会收到此错误。

- 旧东西 -

你应该能够将SKView作为一个孩子添加到ScreenSaverView,然后你的精灵工具包在这个SKView中工作,除此之外,只要你在支持Sprite的OSX版本上,一切都应该按预期工作Kit,如果你能告诉我你正在测试的版本,我会把它运行在我的。

也许这是你的问题,你正在运行一些< 10.9。

来源: Sprite Kit OSX not loading start up code for spaceship

Code that works:

#import "screenSaverTestView.h"
#import <SpriteKit/SpriteKit.h>
#import "screenSaverTest-Swift.h"
@implementation screenSaverTestView

- (instancetype)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview
{
    self = [super initWithFrame:frame isPreview:isPreview];
    if (self) {
        [self setAnimationTimeInterval:1/30.0];
        MyView *view = [[MyView alloc] init];
        [self addSubview:view];
    }
    return self;
}

- (void)startAnimation
{
    [super startAnimation];
}

- (void)stopAnimation
{
    [super stopAnimation];
}

- (void)drawRect:(NSRect)rect
{
    [super drawRect:rect];
}

- (void)animateOneFrame
{
    return;
}

- (BOOL)hasConfigureSheet
{
    return NO;
}

- (NSWindow*)configureSheet
{
    return nil;
}

@end

==== SWIFT =====

import Foundation
import SpriteKit
class MyView : SKView
{
    override func viewWillMoveToSuperview(newSuperview: NSView?) {
        self.presentScene(SKScene(size: self.frame.size));
    }
}