我在浏览Apple的SpriteKit文档时发现了一个非常有用的功能,我可以在编写UI时使用它。问题是我无法让它工作。请查看此页面并向下滚动到“调整Sprite大小”-AppleDocs我从字面上复制了图像尺寸并使用了相同的代码以防我做错了什么。但我总是以拉伸(stretch)的图像结束,而不是保持相同比例的正确“端盖”。我指的是这段代码:SKSpriteNode*button=[SKSpriteNodespriteWithImageNamed:@"stretchable_button.png"];button.centerRect=CGRectMake(12.0/28.0,12.0/
是否可以将SpriteKit与Metal结合使用?如果是,如何在物理世界中实现Metal粒子和SKNode的结合,使其相互碰撞,这种需求的通常方法是什么。谢谢 最佳答案 它们是两种完全不同的技术。SpriteKit是一个为您抽象所有渲染工作并为您提供内置物理引擎的框架。而Metal纯粹是一种低级GPU加速图形API,可让您完全控制渲染过程。它类似于OpenGLES,但开销要少得多。SpriteKit将使用Metal(在符合条件的设备上)来渲染您的场景。您不需要做任何事情,因为SpriteKit会在幕后处理所有渲染。你不能把它们结合起
我有一个问题,我已经在网上阅读了有关如何为sprite表设置动画的内容,但我只是想知道一种简单的方法来加载具有多张图像的sprite表,让我们说一个背景(所以想象像横幅的“右角”、“顶部横幅”和“左角”之类的东西)。如何在uiview中显示每个元素的部分(位于sprite表中),然后在“顶部横幅”元素上放置一个标题。换句话说,就像css大师在html中为网站所做的那样?我是否需要导入cococa2s库才能执行此操作,或者我可以使用nativeiossdk执行此操作吗? 最佳答案 如果你使用cocos2d,有很多工具可以帮助你制作和使
假设我从一个场景initialScene开始。这个场景包含几个按钮。当用户点击这个场景中的按钮A时,我将呈现sceneA。所以我的代码看起来像这样:sceneA*scene=[[sceneAalloc]init];[self.scene.viewpresentScene:scene];我的第一个问题是,当initialScene中出现sceneA实例时,它是堆叠在initialScene实例之上还是它取代了吗?当呈现新场景时,initialScene的实例是否在内存中被释放?我问这个是因为sceneA将有一个后退按钮,当点击该按钮时,用户将返回到初始场景。我能否在sceneA中创建一个
如果您在Assets.cxassets文件夹中并点击加号,您可以添加一个新的“spriteatlas”和/或新文件夹。当您从这个菜单创建“Sprite图集”或文件夹时,它们看起来完全一样。我的印象是atlas文件夹的末尾必须有后缀“.atlas”?我读到,对于屏幕上的大量重复纹理,使用Sprite图集通常更好。当我开始我的项目并将所有图像放入该文件夹时,我在Assets.cxassets中创建了一个“Sprite图集”。我读得越多,我就越觉得我做错了。我在网上找不到关于在Assets.cxassets中放置“atlas”文件夹的任何信息。当我像上面提到的那样创建atlas文件夹时,它没
我正在努力为我的游戏加水。除了不同的背景颜色外,没有太多其他内容。但是,我希望player-sprite漂浮在它上面(或中间)。如果玩家只是从下面走进水里,我希望他能浮到水面上。如果他摔倒了,我希望他慢慢改变方向,然后重新浮起来。当他在水中时,我试着让重力为负,但这给我带来了一些不太想要的效果。例如,当他(玩家)浮出水面时,正常重力会将他推回下方,水会将他推上去,等等。最终,玩家将在水中“弹跳”,从一端被推到另一端。当他浮出水面时,我希望他能平静地留在水面上。我怎样才能做到这一点?这是我的更新循环中的代码:SKNode*backgroundNodeAtPoint=[_bgLayerno
我知道对于传统的UIViews,我可以将“启用用户交互”标志设置为NO,View将不再响应触摸,让它们下面的View接收触摸。有没有什么方法可以在SpriteKit中实现相同的“点按”功能?到目前为止,我只看到人们使用“Touchesbegin”,了解要点并在该点向场景询问节点。这种方法的问题是-如果我想在sprite上添加叠加层(如怪物生命值等),它们也会响应触摸。到目前为止,我试图通过为不同的节点创建自定义类来避免这个问题,然后使用一个非常大的if语句来检查每个节点的类。有没有更好的方法来实现spritekit的“点按”功能? 最佳答案
我设置了一个有200个Sprite节点的场景,并将它们随机放置在屏幕上,如下所示:for(inti=0;i只要节点彼此保持距离,我就能获得稳定的60fps。当我施加力使节点开始向场景中心移动并相互重叠时,性能急剧下降到2-3fps。我想这与碰撞检测有关,而不是渲染(如果我用更大的半径初始化物理体,一开始性能就已经很低了)。我已将类别、接触和碰撞掩码设置为0,但这没有帮助。 最佳答案 最好的办法可能是预渲染这个场景,而不是强制iPhone通过200次碰撞检测,这无疑会造成压力。 关于ios
我正在尝试使用applyImpulse使Sprite跳到特定高度。在下面的示例代码中,动态黑色圆圈跳到与静态红色圆圈相同的高度,但它只适用于杂乱无章。如果我的物理学是正确的,将弹丸发射到高度Y所需的初始垂直动量由质量*平方根(2*重力*Y)给出。然而,这个公式导致黑色圆圈移动得很少。通过反复试验,我发现我可以通过将脉冲向量的垂直分量乘以12.3来使红色圆圈或多或少准确地跳跃,如下面的代码所示。这看起来完全是武断的,快把我逼疯了。我显然做错了什么。执行此操作的正确方法是什么?这是我认为相关的代码:letdy=mass*sqrt(2*-self.physicsWorld.gravity.d
我想枚举场景中的所有节点。不仅是场景本身的子节点,还有那些节点的子节点,以及那些场景的子节点……所以我希望能够遍历整个节点层次结构。有没有一种方法可以在不知道节点树有多深的情况下做到这一点? 最佳答案 是的,使用enumerateChildNodesWithName:usingBlock:并将//*作为节点名称传递。您应该能够在任何节点上调用它。它实际上是Apple'sdocs中的示例之一://*Thissearchstringmatcheseverynodeinthenodetree.