草庐IT

spritekit

全部标签

ios - 如何在应用程序激活时保持 SpriteKit 场景暂停?

有什么方法可以防止SpriteKit在进入前景/变得活跃时自动取消暂停场景?我设置了paused=true并希望它保持如此,即使应用程序在发送到后台后再次激活也是如此。我应该补充一点,我正在迅速执行此操作,但我没想到在这方面的行为会有所不同。 最佳答案 不确定它在objective-c中是否相同,但很快我不得不“覆盖”SKView在幕后调用的回调函数,funcCBApplicationDidBecomeActive(){}此函数导致暂停被重置。(注意不应应用覆盖关键字)在某些情况下,您只想保留暂停状态,创建一个新变量并覆盖isPau

ios - 在spritekit中模拟水/在水上制作 Sprite "float"

我正在努力为我的游戏加水。除了不同的背景颜色外,没有太多其他内容。但是,我希望player-sprite漂浮在它上面(或中间)。如果玩家只是从下面走进水里,我希望他能浮到水面上。如果他摔倒了,我希望他慢慢改变方向,然后重新浮起来。当他在水中时,我试着让重力为负,但这给我带来了一些不太想要的效果。例如,当他(玩家)浮出水面时,正常重力会将他推回下方,水会将他推上去,等等。最终,玩家将在水中“弹跳”,从一端被推到另一端。当他浮出水面时,我希望他能平静地留在水面上。我怎样才能做到这一点?这是我的更新循环中的代码:SKNode*backgroundNodeAtPoint=[_bgLayerno

ios - 如何使用 SpriteKit 使 Sprite 跳到特定高度?

我正在尝试使用applyImpulse使Sprite跳到特定高度。在下面的示例代码中,动态黑色圆圈跳到与静态红色圆圈相同的高度,但它只适用于杂乱无章。如果我的物理学是正确的,将弹丸发射到高度Y所需的初始垂直动量由质量*平方根(2*重力*Y)给出。然而,这个公式导致黑色圆圈移动得很少。通过反复试验,我发现我可以通过将脉冲向量的垂直分量乘以12.3来使红色圆圈或多或少准确地跳跃,如下面的代码所示。这看起来完全是武断的,快把我逼疯了。我显然做错了什么。执行此操作的正确方法是什么?这是我认为相关的代码:letdy=mass*sqrt(2*-self.physicsWorld.gravity.d

ios - SpriteKit 生成随机 curl 线

我正在做一个项目,我需要完成的是生成随机curl线。此时我已经有了一条随机生成的线,但它不是curl的。我每0.5秒在不同的x位置生成点,并将这些点与贝塞尔曲线连接起来。一切都完美无缺,只是它不是curl的。下图显示了1)我现在如何拥有它以及2)我想如何制作它。我该怎么做?我正在使用SpriteKit-ObjectiveC 最佳答案 基本上,您需要制作和随机化ABézier(参数)曲线的条件是controlpoints.在你阅读了那个很好的答案并熟悉术语后,你可以试试这个例子(我假设你的场景和View大小设置正确):GameScen

ios - 是否可以使用 SpriteKit 生成/绘制纹理?

无法用谷歌搜索任何内容。实际上关于这个新框架的信息很少。我唯一能找到的就是将CoreImage滤镜应用于纹理。但我想在图像上方绘制简单的矩形我需要编写自己的CI过滤器..有人知道这个话题吗? 最佳答案 如果您只需要一个矩形,请使用@Kex的解决方案。通常,您可以从任何UIImage或CGImage创建纹理。[SKTexturetextureWithImageNamed:@"Spaceship.png"]实际上只是方便了[SKTexturetextureWithImage:[UIImageimageNamed:@"Spaceship.

ios - SpriteKit - 如何正确暂停和恢复应用程序

我在使用GamesbyTutorials这本书的帮助下制作的最新iPhone游戏时遇到了很大的问题。注意:方法来自SpriteKit-therightwaytomultitask不起作用。因此,在我的ViewController.m文件中,我定义了私有(private)变量SKView*_skView。然后,我做这样的事情:-(void)viewDidLayoutSubviews{[superviewDidLayoutSubviews];if(!_skView){_skView=[[SKViewalloc]initWithFrame:self.view.bounds];_skView.

ios - 如何获取通过 SpriteKit 编辑器创建的项目的 SKSpriteNode?

我使用SpriteKit(使用Objective-C)在XCode中创建了一个相当简单的(此时,实验性的)“游戏”。我知道如何手动创建一个SKSpriteNode对象并将其添加到SKScene-但我有点想做相反的事情-我在XCodeSceneKitGUI本身内部创建了Sprite(并给它起了一个名字),现在我想在我的代码中检索它。在之前使用XCode的经验中,您可以通过声明一个@propertyUIOutlet[etc]然后将其连接为IB/StoryboardUI内的引用socket来实现此目的-但我找不到任何类似的方法来在内部执行此操作SpriteKit用户界面。我可以创建一个属性(

ios - SpriteKit : performance hit while preloading SKTextureAtlas

我在预加载SKTextureAtlas时遇到了性能问题:lettextureAtlas=SKTextureAtlas(named:atlasName)textureAtlas.preload(completionHandler:{...})我所说的性能下降是指FPS在短时间内下降到大约50。我在Instruments中使用TimeProfiler对其进行了测试,并验证了这项工作确实是在工作线程上完成的,如documentation中所述.下图显示了TimeProfiler捕获的尖峰,这是由预加载图集引起的。如您所见,大部分峰值是由2个工作线程引起的,据我所知,它们似乎都在加载图像数据。

ios - 在 SpriteKit 中更改 contactTestBitMask 后检测接触

我目前正在使用SpriteKit在Swift中创建一个2D游戏,但我在碰撞检测方面遇到了问题。假设我在游戏中有SKSpriteNodeFoo。然后假设SKSpriteNodeBar在Foo之上生成,但没有contactTestBitMask来触发接触。然后在片刻之后(比如说1秒)Bar更改其contactTestBitMask以检测与Foo的接触。目前,Foo必须实际移动一点或从Bar下面移出并返回到它以检测与它的接触。我需要Bar在更改其contactTestBitMask时立即触发与Foo的联系。也许有一种不同的方法可以在不改变contactTestBitMask的情况下做到这一点

ios - SpriteKit : what causes touchesMoved to stop getting called?

GameScene.swift中的touchesMoved在几次调用后不会被调用,通常是三四次,即使我们一直在屏幕上滑动手指(即,从不将手指从屏幕上移开)。我们创建了一个简单的项目,只有打印touchesMoved的代码,没有问题。换句话说,touchesMoved按预期工作,在我们滑动手指时继续被调用。显然,项目中有一些代码/配置导致touchesMoved在几次调用后停止被调用(并且没有调用touchesEnd)。什么事情会导致这种情况?touchesMoved未被调用的代码:overridefunctouchesMoved(touches:NSSet,withEventevent