草庐IT

Spritekit

全部标签

ios - 在 SpriteKit 中,touchesBegan 是否在与 SKScene 更新方法相同的线程中运行?

在此处的Apple文档中AdvancedSceneProcessing它描述了update方法以及如何渲染场景,但没有提及何时处理输入。目前尚不清楚这是否与渲染循环在同一个线程中,或者是否与它并发。如果我有一个对象,我从SKSceneupdate方法和touchesBegan方法(在本例中是SKSpriteNode)我是否需要担心同步对我的对象的两次访问? 最佳答案 因此,在几天没有得到答复后,我进行了一些实验。顺便说一下,这些测试是在模拟器上运行的,而不是在实际设备上运行的,但我认为它会是一样的。第一次测试,我在调试器中的touc

ios - SpriteKit 场景不适合 iPhone X 上的整个 View

iPhoneX于几天前发布。我正在尝试将我的一款游戏更新到新手机。但是,在一个带有SpriteKit场景的场景中,场景不会缩放以填满整个屏幕。下面是显示场景的代码:GameScene*scene=[GameSceneunarchiveFromFile:@"GameScene"];scene.scaleMode=SKSceneScaleModeFill;//skViewisbasicallyself.viewcastedtoSKView[skViewpresentScene:scene];SKS文件中场景的大小为2048x1536。这是它的样子:红色部分为场景内容。一件有趣的事情是,背景

ios - SpriteKit SKScene 缺少 touchesEnded

我注意到touchesEnded并不总是在多点触控时传送到SKScene。根据移除手指等的速度,我会永久错过一些touchesEnded。touchesCancelled已实现,我添加了一个自定义UIView并放在屏幕左侧-没问题。我制作了自定义SKView并捕获了事件-再次没问题。很明显,SKScene没有得到它嵌入的SKView的所有touchesEnded,但为什么呢?(顺便说一句,我在没有任何节点的情况下完全运行SKScene)编辑:一些进一步的调查显示我可以让SKScene完全失去联系:我将3根手指放在显示屏上,然后一次移开它们,直到只有一根手指接触。我移动手指->只有SKV

ios - SpriteKit 固定关节

我有一个名为“SpikyRedBall”的SKSpriteNode,它是一个红球。我想给它添加尖峰,所以我使用了以下代码。我可以看到钉在球上,但是当球与另一个球碰撞时,它不会考虑固定关节并单独移动它们。我正在使用以下实现:@implementationSpikyRedBall-(instancetype)init{self=[superinit];[selfattachSpikes];returnself;}-(void)attachSpikes{Spike*spike=[[Spikealloc]init];spike.position=CGPointMake(0,0);//attac

ios - SpriteKit 中的无限滚动背景

我正在尝试使用Apple的SpriteKit制作横向卷轴游戏。当想制作一个无尽的滚动背景时,我遇到了这个answer.实现该解决方案后,它确实有效尽管它显着降低了我的FPS。这可能是因为图像位置在每一帧都被重新计算。我觉得如果我可以使用一个或多个SKAction调用来为我处理这个动画会好得多,但我不确定如何实现它。想法?到目前为止,我在场景类中的代码(虽然这只会在屏幕上设置一次动画背景)-(void)addBackgroundTileAtPoint:(CGPoint)point{SKSpriteNode*bg=[SKSpriteNodespriteNodeWithImageNamed:

ios - 如何有效地暂停 spritekit 中的游戏?

这似乎是一个基本概念,但实际上没有好的答案。我目前有一个非常基本的设置,在我的游戏场景中,我有一个enumgameState,它当前是inGame或gamePaused。我设置了我的按钮,按下它可以简单地切换gameState。然后,为了让它工作,我有两种单独的更新方法:一种用于gamePaused时,一种用于inGame时。这适用于我95%的游戏,因为我的游戏中的更新可以很容易地启动和停止,没有任何问题。不过,有些问题我无法解决。首先是行动。我将SKActions用于我的一些项目(一些移动、缩放、淡入淡出...),并且此方法不会暂停它们。这在某些方面可能是灾难性的。其次,这不会处理与

iphone - SpriteKit : Passing data between scenes

我无法尝试在SpriteKit中的“SKScene”场景之间传递数据。例如,我想将分数从A级传递到B级。也许解决方案是归档,但我想实现更简单的方法,例如我们使用ViewController的方式。在这方面的任何线索将不胜感激。 最佳答案 如果您要将乐谱传递给许多不同的场景,您可能希望将其存储在NSUserDefaults或一些可访问的存储机制中。但是,如果您希望在SpriteKit对象之间传递数据,每个SKNode(包括SKScene)都有一个名为userData的字典属性,您可以用于任何你想要的东西。以下是您如何在场景之间传递分数

ios - SpriteKit,看似随机,下降到 40 FPS

我正在使用SpriteKit编写一个iOS游戏。在游戏过程中,显然是随机的,帧率将从60FPS下降到40FPS(总是40)。我在iPhone6上运行它。在为发布和调试构建时存在错误。我通常一次在屏幕上显示大约30个节点(有时更少),这些节点中的大多数都有物理实体,但是,除了大约5个节点之外,所有节点都将dynamic设置为NO。上述物理体不会相互碰撞,但会与玩家节点发生碰撞。玩家节点移动不快,通常一次只接触5个左右的节点。当玩家节点与其他一些物理物体接触时,它们的dynamic属性设置为YES。可能还值得一提的是,我有几个UIView和UIImageView覆盖在SKView的顶部,充

ios - Spritekit 在 SKSpriteNode 子类中获取 Sprite 场景的最佳方法

我正在子类化SKSpritenode并且需要引用Sprite的场景。有没有办法检测Sprite何时被添加到场景中。letgameScene=self.sceneasGameScene在init中执行此操作会引发可选错误,因为我的Sprite已实例化但未添加到场景中。如何判断我的sprite何时已添加到场景中以便设置属性? 最佳答案 通常我创建addToNode:(SKNode*)parentNode方法来处理:-(void)addtoNode:(SKNode*)parentNode{[parentNodeaddChild:self]

swift - 在 SpriteKit 中使用着色器绘制圆

我正在尝试使用Swift在SpriteKit中使用着色器绘制一个居中的圆来填充图像。我正在使用此链接来了解着色器,我为此使用的部分如下所示:vec2center=vec2(uResolution.x/2.,uResolution.y/2.);floatradius=uResolution.x/2.;vec2position=gl_FragCoord.xy-center;if(length(position)>radius){gl_FragColor=vec4(vec3(0.),1.);}else{gl_FragColor=vec4(vec3(1.),1.);}但我想将它与SpriteK