Spritekit屏幕/背景更新

时间:2017-05-21 15:19:35

标签: objective-c sprite-kit

是否可以通过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} 

1 个答案:

答案 0 :(得分:1)

您没有在每次更新中填充数组。您看到阵列已满,因为您只在数据已满时打印。只需将NSLog移出[nodePos count]条件。

现在您拥有相同值的原因是因为您要添加节点,而不是每次更新时的位置。由于节点是引用,因此您将拥有一个充满对同一对象的引用的数组,从而获得相同的位置。您应该构建一个CGPoint数组,而不是SKNode数组。

为此,请尝试更改:

[nodePos addObject:node];

[nodePos addObject:node.position];