SpriteKit 中的速度场

Posted

技术标签:

【中文标题】SpriteKit 中的速度场【英文标题】:Velocity field in SpriteKit 【发布时间】:2016-01-21 08:51:25 【问题描述】:

有人在 SpriteKit 中使用 Velocity Field 吗?

当然,我不确定我是否理解它应该如何工作,但我是在 Xcode UI 中连接它,而不是代码。我的目的是让动态精灵节点在进入该速度场区域时被拉到一个方向。看到速度场节点没有自己的大小,我只是假设我必须将它添加为另一个 spritenode(称为 areaofvelocityfield)的子节点,它不是物理的,但有一个大小,以便其他动态精灵节点可以进入并受到力的影响。所以选择 Velocity Field 节点,我选择 areaofvelocityfield

现在,无论我做什么,任何动态节点都会受到该力的影响,无论它们是在速度场区域内还是在它附近。无论它们与包含速度场的节点以及速度场本身的距离如何,它们总是会受到影响并被拉入场的向量中。

ios 9.2.1。 Xcode 7.2。

【问题讨论】:

您是否尝试更改速度场节点的其他一些属性,例如falloffstrength?此外,您可以通过设置view.showsFields = true 来查看任何字段节点的可视化表示。 目前我只使用 Xcode。我必须找到一种方法来展示那里。或者尝试让这些东西在设备上运行,但我希望我不必去那里。是的,我试过衰减和其他东西,比如最小半径到目前为止什么也没做。 有一种东西叫做区域。似乎必须设置,但不能在 UI 中完成。我认为除非设置了区域,否则场效应是“全球性的”。多哈。 UI 又出现了。 【参考方案1】:

看来.region 必须设置为SKFieldNode。这不能从 Xcode 完成。至少不能这样,这是我目前运行良好的代码:

SKSpriteNode* belt = (SKSpriteNode*)[self childNodeWithName:@"belt"];

SKFieldNode* myfield = (SKFieldNode*)[self childNodeWithName:@"myfield"];
myfield.region = [[SKRegion alloc] initWithSize:CGSizeMake(belt.size.width * 0.5, 10)];

请注意,我正在尝试制作类似“传送带”的东西。腰带精灵只是一个矩形。 myfield 位于与传送带相同的位置。所有节点都直接放在世界上,rootnode,不需要父节点。将一个字段放在另一个节点内并不会对其影响的区域产生任何影响(或者它可能有,这里不确定)。出于某种原因,我不得不将力场的宽度设置为可见腰带的一半,否则它会继续影响任何落在腰带上太久的动态节点。 我用于场的其他值是:强度 1,衰减 10,最小。半径 1. 不确定真正有什么不同,因为这在 Xcode 界面中不容易测试。需要大量的试验和错误才能弄清楚这一切是如何运作的。

关于区域的大小:正如文档所述,大小从原点向各个方向突出,这意味着宽度和高度实际上是您设置的两倍。

【讨论】:

btw .showsFields 似乎什么都不做,除了吃掉设备上的所有内存。我不得不删除它,否则应用程序会在几秒钟内因内存过载而崩溃。 ***.com/questions/34903539/… 如果有什么安慰的话,Scene Kit 中的字段也有很多问题。

以上是关于SpriteKit 中的速度场的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit 中的持续移动

覆盖 SpriteKit 中的碰撞

在 SpriteKit 游戏中计算速度

Swift/SpriteKit - ApplyImpluse 的速度是不是以增量方式工作(每次都添加到先前的值)?

使用纹理图集时 SpriteKit 中的高内存使用率

使用 SpriteKit 如何以随机但一致的速度将精灵节点移动到一个点