Tag: skscene

添加SKScene到UIViewController?

我刚刚在界面生成器中创build了一个新的UIViewController 。 它是从UITableViewController (单元格)segued。 我现在想在这个UIViewController里面使用SKScene 。 这是如何完成的? 而对于一个侧面说明… 如果SKScene占用了整个UIViewController.view ,那么你可以在场景上覆盖UIKit对象吗? 或者更好的是在UIViewController.view创build一个单独的UIView来保存SKScene ,然后围绕这个单独的UIView布局UIKit对象,并让默认的UIViewController.view作为所有这些元素的容器? 如果采取这种方法,理论上可以通过SKScene访问这些UIKit对象吗?

如何在sks文件中的“Xcode动作编辑器”获取所有的动作名称“SpriteKit动作”

我有一个SpriteKit动作文件,里面有一些动作。 要使用一个动作,我使用: let action = SKAction(named: "Shake") 相反 ,可以直接使用MyActions.sks文件中的名称? 就像是: let actions = SKScene(fileNamed: "MyActions.sks")` let shakeAction = actions.listOfAction.Shake //this is my guess 如果我打印场景文件: let actions = SKScene(fileNamed: "MyActions.sks") print(actions) 输出是: Optional({ "_info" = { "_previewScenePath" = "PippiPompiere/GameScene.sks"; }; actions = { PlayerIdle1 = "<SKGroup: 0x79e60ec0>"; PlayerMoveToHouse0 = "<SKGroup: 0x7b1ea010>"; PlayerMoveToHouse1 = "<SKGroup: 0x7b052cd0>"; PlayerMoveToHouse2 […]

为什么我不能将SKScene添加到另一个SKScene?

我试图让这个SKScene在游戏结束时出现在场景的中间,以便前面的场景在背景中仍然可见(类似于飞扬的鸟的结尾)。 这是我希望它出现的图像: 到目前为止,这是我所做的代码: 在游戏场景中: -(void)dieFrom:(SKNode*)killingDebris { _touched = YES; if (_touched == YES) { beatLevel = YES; NSLog(@"touched"); [self runAction:[SKAction sequence:@[ [SKAction runBlock:^{ [_goodSquare removeFromParent]; }], [SKAction runBlock:^{ level2Achieved = [[NSUserDefaults standardUserDefaults] integerForKey:@"newLevelAchieved"]; if (beatLevel == YES) { level2Achieved = 2; } [[NSUserDefaults standardUserDefaults] setInteger:level2Achieved forKey:@"newLevelAchieved"]; [[NSUserDefaults standardUserDefaults] synchronize]; [self removeAllChildren]; }], [SKAction waitForDuration:1.5], [SKAction […]

在SpriteKit中呈现一个场景而不丢弃之前的?

我的情况是,我有一个GameMenuScene和用户select一个级别后,我想呈现LevelScene 。 但是我不想让之前的GameMenuScene被丢弃,因为LevelScene实际上是LevelScene的一个GameMenuScene ,用户是否完成这个级别将被保存为一个LevelScene的@property LevelScene , GameMenuScene应该能够访问用户结束或退出关卡。 如果我简单地使用presentScene:transition ,则GameMenuScene被丢弃,并且信息不能传回。 我的问题:有没有一种方法来堆叠或推动场景而不丢弃之前(最好使用过渡animation)? 我无法在SKScene的Apple文档中find针对此特定用途的方法。 注意:另一个类似问题的StackOverflow答案build议创build一个新的UIViewController ,在那里呈现LevelScene ,然后以模态方式呈现UIViewController 。 但是我希望在Apple文档中有一个现有的方法,我错过了以模态方式呈现场景本身,而无需创buildUIVIewControllers 。

closuresSKScene后,内存仍然很高

我使用dispatch_once NSObject来创build数据指针。 所以所有的游戏资产指针都是在主视图控制器出现的时候创build的。 为了玩游戏,用户点击UIViewController上对应于特定级别的UIButton 。 我把它称为LevelSelectionController。 游戏结束后,用户将点击一个标签( SKLabel )。 所有的动作和节点都将被删除。 [self removeAllActions]; [self removeAllChildren]; [self removeFromParent]; 此外,特定级别的SKScene子类将委派用户返回LevelSelectionController给展示游戏SKView的视图控制器的任务如下。 – (void)closeScene { SKView *spriteView = [[SKView alloc] init]; [spriteView presentScene:nil]; [self.navigationController popViewControllerAnimated:YES]; } 我唯一的问题是当用户离开游戏场景(SKScene)时内存仍然很高。 游戏需要大量资产。 所以当游戏开始时,内存使用量将跳到200 MB。 当用户返回到原始级别select视图控制器时,根据活动监视器 ,游戏模拟器仍然消耗200 MB。 当用户input不同的级别时,内存使用量将会跳过另外10 MB。 那么一旦用户离开SKScene,我怎么能释放上一场比赛的内存呢? 我正在使用ARC。 Xcode版本是5.1。 开发目标是iOS 7.1。 感谢您的帮助。 – 编辑1 – 我太愚蠢。 我知道问题是什么 当我closures这个场景时,我正在创build一个新的SKView,然后我将它设置为零来摆脱当前场景。 有用。 但是,这不应该是这样做的方式。 相反,我需要在呈现之前将当前的SKView设置为一个variables。 […]

SKScene和SKView的暂停属性之间的区别

我正在使用下面的代码暂停我的SKScene: self.paused = YES; 然而,根据安德烈·戈尔代夫 ( Andrey Gordeev)的 回答 ,人们也可以用这一行来暂停一个场景: self.view.paused = YES; 我想了解它会使(或两者)暂停场景有什么不同。

AVAudioPlayer和SpriteKit游戏中的性能问题

我在AVAudioPlayer上遇到问题,并在我的精灵游戏中播放短音。 我有相当dynamic的游戏场景,当用户点击特定元素时,我想要播放简单的“嘟嘟”声,但是我注意到,使用AVAudioPlayer播放声音会导致显着的性能问题。 我的audio文件是.mp3格式。 我也尝试SKAction方法(playSoundFileNamed)来执行声音,一切看起来几乎相同,我注意到相同的性能问题。 我的问题是在SpriteKit中执行声音的最佳做法是什么。 PS:我试图findWWDC Adventure spritekit示例代码来检查他们如何解决播放声音的问题,但不幸的是示例代码不再可用。

iPhone 5s SpriteKit绘图怪异

据我所知,iPhone 5s的像素分辨率为640 x 1136,分辨率为320 x 568(为了与非Retina设备兼容)。 当我使用SpriteKit时,问题/混乱/怪异似乎出现了。 例: 我从左下angular(0,0)到右上angular(宽度,高度)绘制一条线。 结果是这条线几乎中途被吸引了。 而事实上,当我打印出来的屏幕尺寸,它应该是320×568。所以我决定从(0,0)到(宽* 2,高* 2)绘制。 当然,这个打印出640 x 1136。 所以奇怪的是,即使我正在从一个对angular线angular落画angular,但实际上并不是从一个angular落到另一个angular落。 笔记: – I'm getting the width & height values from self.value.frame.size. – The diagonal line seems to draw just fine using any of the iPad simulators. 有什么想法发生在这里?

解散SKScene返回到UIKit菜单

一旦我的SpriteKit游戏结束,我想回到我的UIKit MenuViewController 。 从我迄今为止学到的,使用协议/委托是最好的(?)选项,但是我一直没有能够得到这个工作。 我知道该协议可能会超过GameViewController的类声明,看起来像这样: protocol GameViewControllerDelegate { var gameOver: Bool? } 但是我需要帮助从GameScene访问它,并得到它来消除GameViewController 。 下面是应用程序的骨骼,以防万一。 MenuViewController class MenuViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } @IBAction func goToGame(_ sender: UIButton) { performSegue(withIdentifier: "toGameSegue", sender: sender.currentTitle) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let destinationVC = segue.destination as? GameViewController { if let […]

如何从Sprite Kit场景引用当前的ViewController

我很难find我想这个问题的答案并不难。 我怎样才能引用SKScene的视图控制器上定义的方法和属性? 并在此基础上:如何引用从另一个SKScene中加载的SKScene中的ViewController?