Xcode sprite kit如何选择特定节点

时间:2014-07-02 11:22:45

标签: ios xcode sprite

我正在尝试用精灵套件创建移动地板。我使用for循环用“tiles”填充屏幕,然后我将它们移动到屏幕上。如果它们的x位小于0,它们将被移除。现在我想在最后一个瓷砖后面添加一个瓷砖。但我不知道如何获得最后一个图块的xposition(这将是具有最高位置值的图块,因为它从右向左移动)。这是我的代码:

-(void)createTile:(float)xpos {
SKSpriteNode *tile = [SKSpriteNode spriteNodeWithImageNamed:@"tile"];
tile.name = @"tile";
float tilesize = (CGRectGetMaxY(self.frame)/20);
tile.yScale = tilesize/24;
tile.xScale = tilesize/24;
tile.position = CGPointMake(xpos, CGRectGetMidY(self.frame));
[self addChild:tile];
}

-(void)update:(CFTimeInterval)currentTime { 
//Going through all the tiles an moving them all

[self enumerateChildNodesWithName:@"tile" usingBlock:^(SKNode *node, BOOL *stop) {
    if (node.position.x < 0.){
        [node removeFromParent];
        //[self createtile:(where the argument must be the position of the last floortile + the size of floortile]
    }
    node.position = CGPointMake(node.position.x -3, node.position.y);

}];
}
编辑:忘了我在那里有地板数组,我不想要地板数组的最后一个对象,而是childNodeTree的最后一个对象。我怎么做到的?

2 个答案:

答案 0 :(得分:0)

因为您知道移除的瓷砖的x位置,并且您应该知道每行有多少个瓷砖,您可以通过偏移移除的位置来计算位置

numberOfTilesPerRow*tileWidth. 

更简单,假设你的瓷砖在x = 0开始时填满整个屏幕,并且你有一个额外的瓷砖在移动时填补空白:

_______        _______
|OOOOO|O   -> O|OOOOOO|
|OOOOO|O      O|OOOOOO|
------         -------

新职位将是

parentWidth+tileWidth+removedNode.position.x   

答案 1 :(得分:0)

你的floorArray中的最后一个对象是否总是成为x值最高的对象?假设您通过在屏幕上从左向右迭代创建了地砖?然后,当您向屏幕添加更多内容时,您将它们添加到数组中,然后该图块将在数组的最右侧和最后一个区域中。

SKSpriteNode *lastTile = [floorArray lastObject];

编辑评论:

NSArray *allChildNodes = myScene.children;