SKScene:找到SKSpriteNode的最大位置

时间:2016-11-22 22:04:52

标签: ios objective-c sprite-kit

我正在为iPad和iOS 10编写应用程序。 我的应用程序只使用一个SKScene(大小为1300 x 1000)。 我还使用一个这样定义的相机:

myCamera=[[SKCameraNode alloc] init];
myCamera.position=CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
self.camera=myCamera;
[self addChild:myCamera];

我使用了许多用户可以拖动的SKSpriteNodes(甚至超出了SKScene的大小)。

我也用:

[myCamera setScale:newScale];

处理捏缩放。

我需要知道是否有办法获得距离右侧SKScene中距离位置0,0最远的节点的最大X位置,而不必逐个读取所有节点位置。 然后对其他三个方面(向上,向左,向下)做同样的事情。

1 个答案:

答案 0 :(得分:1)

保持四个浮点数minX,minY,maxX,maxY。当用户拖动节点时,检查其位置是否超过max或小于min。如果是,请更新相应的值,例如

编辑使用ZNODE* head = new ZNODE(0); ZNODE* current = head; ZNODE* cycle = 0; for (int i = 1; i < 8; i++) { current->_next = new ZNODE(i); current = current->_next; if (i == 6) cycle = current; if (i == 7) current->_next = cycle; } // verify that there is a cycle ZNODE* slow = head; ZNODE* fast = head; ZNODE* cycleNode = 0; while (slow && fast && fast->_next) { slow = slow->_next; fast = fast->_next->_next; if (slow == fast) { cycleNode = slow; break; } } if (cycleNode == 0) { printf("No cycle\n"); return; } // finally find a cycle node which will be p2 ZNODE* p1 = head; ZNODE* p2 = cycleNode; while (1) { for (p2 = cycleNode; p2->_next != cycleNode; p2 = p2->_next) { if (p2 == p1) break; } if (p2 == p1) break; p1 = p1->_next; } printf("%d\n", p2->_i); 获取节点后代的完整范围。

calculateAccumulatedFrame