任何人都在SpriteKit中使用Velocity Field吗?
当然,我不确定我是否理解它应该如何工作,但是我在Xcode UI中连接它,而不是代码。我的意图是,如果动态spritenodes进入该速度场的区域,则将其拉向一个方向。看到速度字段节点没有自己的大小,我只是假设我必须将它添加为另一个spritenode的子节点(称为 areaofvelocityfield ),它不是物理的,但是有一个大小,以便其他动态spritenodes可以进入它并受到力的影响。因此,选择Velocity Field节点,我选择 areaofvelocityfield 。
现在,无论我做什么,任何动态节点都会受到该力的影响,无论它们是否位于areaofvelocityfield内或其附近。无论它们与包含速度场的节点以及速度场本身的距离如何,它们总是受到影响并被拉入场的矢量中。
iOS 9.2.1。 Xcode 7.2。
答案 0 :(得分: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位于与腰带相同的位置。所有节点都直接放在世界的根节点上,不需要父节点。将字段放在另一个节点内并不会对它影响的区域产生任何影响(或者它可能具有,在此不确定)。出于某种原因,我不得不将力场的宽度设置为可见带的一半,否则它将继续影响落在带上太长时间的任何动态节点。 我用于该领域的其他值是:强度1,衰减10,分钟。 radius 1.不确定真正有什么不同,因为这在Xcode界面中无法轻易测试。需要进行大量的反复试验才能弄清楚这一切是如何运作的。
关于区域的大小:正如文档所述,大小从所有方向的原点突出,这意味着宽度和高度实际上是你设置的两倍。