是否可以通过SKSpriteNode
方法从同一-(void)update:(CFTimeInterval)currentTime
获得2个位置?
我正在制作演示。从屏幕外的随机点射出球。我想得到球的方向和一系列位置,以便我可以根据它做点什么。但是,当我使用update:
方法时,它似乎在每次更新中填充数组。如何为每次更新仅向数组添加一个SKSpriteNode
?
NSMutableArray *nodePos;
int returnPosCount;
-(void)update:(CFTimeInterval)currentTime {
if ([self childNodeWithName:@"//ball"]!=nil){
returnPosCount++;
if (returnPosCount == 15) {
SKNode *node = [self childNodeWithName:@"//ball"];
[nodePos addObject:node];
if ([nodePos count]>4) {
[nodePos removeObjectAtIndex:0];
NSLog(@"%@",nodePos);
}
returnPosCount =0;
}
NSLOG:
<SKSpriteNode> name:'ball' (64 x 64)] position:{-127.63968658447266, 135.19813537597656}
<SKSpriteNode> name:'ball' (64 x 64)] position:{-127.63968658447266, 135.19813537597656}
<SKSpriteNode> name:'ball' (64 x 64)] position:{-127.63968658447266, 135.19813537597656}
答案 0 :(得分:1)
您没有在每次更新中填充数组。您看到阵列已满,因为您只在数据已满时打印。只需将NSLog
移出[nodePos count]
条件。
现在您拥有相同值的原因是因为您要添加节点,而不是每次更新时的位置。由于节点是引用,因此您将拥有一个充满对同一对象的引用的数组,从而获得相同的位置。您应该构建一个CGPoint
数组,而不是SKNode
数组。
为此,请尝试更改:
[nodePos addObject:node];
要
[nodePos addObject:node.position];