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。
【问题讨论】:
您是否尝试更改速度场节点的其他一些属性,例如falloff
和strength
?此外,您可以通过设置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 中的速度场的主要内容,如果未能解决你的问题,请参考以下文章