问题标签 [skshapenode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
696 浏览

swift - Sprite Kit:如何创建像“Binary Rush”或“Stay in the line”这样的无限游戏背景?

我想创建一个无限的游戏背景,例如“ Binary Rush ”或“ Stay in the line ”。背景可以是简单的轨道。这有点像一条随机的赛道。

目前我使用单个 SKShapeNode 来绘制路径,并将 lineWidth 设置为一个大数字。我var path = CGPathCreateMutable();用来创建随机轨道。显然这不是理想的解决方案,因为轨道仅限于单行。我希望轨道可以扩展为不同的宽度,甚至在轨道内添加一些障碍物。

所以我的问题是: 1. 对于这两个游戏,它们的背景是否只是图像,滚动时只是随机加载一个?2. 我怎样才能随机生成这些轨道,并灵活地改变它的宽度或在其中添加障碍物?3.如何组合这些轨道的不同部分,我假设不会创建无限长的路径。应将其拆分为不同的段,并在段滚出屏幕后将其 removeFromParent。

谢谢 looooooooooooooot !!!:)

0 投票
1 回答
4895 浏览

ios - 用 SKShapeNode 画一条线

我想简单地使用 SKShapeNode 画一条线。我正在使用 SpriteKit 和 Swift。

到目前为止,这是我的代码:

每当我运行它并尝试画一条线时,应用程序崩溃并出现错误:原因:'尝试添加一个已经有父节点的 SKNode:SKShapeNode 名称:'(null)'累积帧:{{0、0}、{0 , 0}}'

为什么会这样?

0 投票
1 回答
1242 浏览

swift - Swift SKShapeNode shapeWithSplinePoints

我正在尝试为要遵循的节点创建 CGPath,但是当我尝试使用 SKShapeNode 中定义的动作和常量从 608_hd_best_practices_for_building_spritekit_games 滑动时,我得到错误Extra argument 'count' in call。有什么想法吗?

0 投票
3 回答
4953 浏览

ios - 对 iOS 上 SpriteKit 中的坐标、帧和子节点感到困惑?

我仍在尝试在 iOS 中学习 SpriteKit,并且一直在做大量的阅读和大量的实验。我对我发现的关于坐标、框架和子节点的其他东西感到困惑*。

考虑这段代码,我试图在我的飞船精灵周围画一个绿色框以进行调试:

如果我用上面标记为“VERSION 1”的行添加飞船精灵的集合,我会得到:

版本 1

这显然是错误的。但是,如果我注释掉上面标有“VERSION 1”的行,而使用标有“VERSION 2”的行,我会得到我想要的:

版本 2

请注意,标记为版本 1 和版本 2 的行的实际代码是相同的: spaceship.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))

那么为什么我设置飞船精灵的位置很重要呢?

在我看来,飞船精灵的位置与 debugFrame 的位置无关,因为 debugFrame 是飞船精灵的子节点,因此,它的坐标应该是相对于飞船精灵的框架的——对吧?

谢谢西马

*这与我昨天问的一个问题有些相关:

在 iOS 上的 SpriteKit 中,缩放纹理精灵会产生不正确的帧?

但是a)我现在明白了,b)这是一个足够不同的问题,它值得自己提出问题。

更新:

嗯-谢谢,伙计们提供以下想法,但我仍然不明白,也许这会有所帮助。

我修改了我的代码以打印出相关的位置和框架:

然后,我以两种方式运行它得到了这些结果。既然我了解第 2 版,让我们从那里开始。

使用“VERSION 2 (RIGHT)”代码运行,我得到:

spaceship 节点默认从屏幕左下方 (Spaceship0) 开始。它的框架也用它的锚点(中心)来表示,它位于屏幕的左下角,因此它的框架矩形的原点是负数。

然后创建调试框架,其位置设置为 0,默认为 0,并且其框架设置为与飞船的相同。

代码(Spaceship2)然后将宇宙飞船节点移动到视图坐标(384.0,512.0)中的位置,并且通过将新位置添加到旧原点(即384 + -159 = 225)来移动其框架的原点。

一切都很好。

不幸的是,我仍然没有得到第 1 版。

当我使用“VERSION 1 (WRONG)”代码运行时,我得到

如上所示,默认情况下,宇宙飞船节点的起始位置位于屏幕的左下角 (Spaceship0)。它的框架也用它的锚点(中心)来表示,它位于屏幕的左下角,因此它的框架矩形的原点是负数。

代码 (Spaceship1) 然后将宇宙飞船节点移动到视图坐标 (384.0,512.0) 中的某个位置,并且通过将新位置添加到旧原点(即 384 + -159 = 225)来移动其框架的原点。

然后创建调试框架,其位置设置为 0,默认情况下为 0,其框架设置为具有奇怪的宽度 (543.5) 和奇怪的高度 (812.5)。由于我正在使用 spaceship.frame 初始化 debugFrame.frame(我认为这是默认初始化程序所做的),我希望新的 debugFrame.frame 与飞船的框架相同 - 但事实并非如此!调试框架的宽度和高度值显然来自将实际宽度和高度添加到飞船节点框架的原点 (543.5 = 225 + 318.5)。但如果是这样的话,为什么t的框架矩形原点仍然是0、0和不一样的加法(225.0 + 0 = 225.0)???

我不明白。

0 投票
2 回答
46 浏览

ios - 比我应该的更多节点

每次我添加 1 个 SKShapeNode 时,模拟器中显示的节点总数就会增加 2。这是正常行为还是我应该摆脱额外的节点,以及如何?我在 xcode 6.1 和 iOS 8.1

谢谢,

0 投票
1 回答
1799 浏览

swift - 从点数组快速绘制平滑曲线

我正在使用 swift 和 sprite-kit 在 Xcode 中开发一个应用程序,并且我有一个椭圆排列的点数组。我想知道如何绘制一条连接数组点的平滑白色曲线。我很确定它与 SKShapeNode 有关,但我不确定如何去做。提前感谢您的帮助。

0 投票
1 回答
2355 浏览

ios - 获取和更改节点的半径大小 - Sprite-Kit

我正在使用 Swift 和 SpriteKit,并像这样创建一个新圆圈(作为节点)

我想稍后访问圆的半径以获得它的值或修改它(例如将它增加 1) - 我怎样才能实现这一点?

0 投票
0 回答
250 浏览

ios - 在更新方法内的 SKShapeNode 上运行 SKAction

我希望我没有遗漏任何东西。我正在尝试在我的更新方法中在我的 SKShapeNode 上运行 SKAction,我做了一个标志检查,我只会在“if”语句中输入一次,它正在使用 DidMoveToView 方法,但是没有用在更新或 DidSymulatedPhyisics 方法中,有什么想法吗?我的节点://在工作正常之前创建的路径

SK动作:

更新: 我什至将它从 if 语句中删除,并将 SKAction 放在更新方法 m 的顶部,并且仍然有效。我把它放在 thr didMoveToView 它正在工作,不知道为什么 完整的更新方法:

0 投票
0 回答
448 浏览

ios - SKShapeNode 是否仍然泄漏内存?

有大量关于 iOS 7 中 SKShapeNode 的所有问题的信息。

Sprite Kit 应用程序中的内存泄漏

http://sartak.org/2014/03/skshapenode-you-are-dead-to-me.html

所有这些问题都在 iOS 8 中真正得到解决了吗?2014 年 8 月以后没有任何帖子描述问题,但我想在我承诺 SKShapeNode 之前确定一下。

更新:

根据 LearnCocos2D 的说法,您可能不应该将 SKShapeNode 用于严肃的游戏。但是,根据我一直在阅读的内容以及我的(简要)经验推断,SKShapeNode 在随意使用期间不会引起任何内存问题。我倾向于假设这是真的,除非有人有其他信息表明?

0 投票
1 回答
70 浏览

ios - 如何使用 NSUserDefault 将 SKShapeNode 存储到系统默认值

现在我正在开发一个基于SKScene. 而且我想将一些存储SKShapeNode到系统默认值,以便用户在完全关闭后重新打开应用程序时仍然可以看到它们。我存储SKShapeNodes在一个NSMutableDictionary. 我试图将它存储起来NSUserDefault使用setObjectForKey,但它给了我错误:

Property list invalid for format: 200 (property lists cannot contain objects of type 'CFType').

因为我正在尝试添加SKShapeNode它。那么我怎样才能像这样存储它NSUserDefault呢?非常感谢!!

这是我的代码: myNode = [SKShapeNode shapeNodeWithCircleOfRadius:radius]; [myNode setPhysicsBody:[SKPhysicsBody bodyWithCircleOfRadius:radius]]; myNode.fillColor = [uicolor greenColor]; myNode.lineWidth = 1.0; [myNode setPosition:positionInScene1]; myNode.antialiased = YES; myNode.glowWidth = 0.0; myNode.physicsBody.allowsRotation = 否;myNode.physicsBody.dynamic = YES; myNode.physicsBody.restitution = 0.3; [mainLists myNode forKey:someKey];(mainList 是一个 nsdictionary) NSUserDefault *store = [NSUserDefault standardDefault]; [store setObject:mainList forKey:@"mainList"]; [存储同步];