2016-03-08 17 views
1

在我的砖头游戏中,我想把砖块放在彼此顶部。如何获得旧spritenode的位置用于新spritenode?

我创建了一个BrickNode类。这里是在主文件中创建的不同大小的砖块。

#import "BrickNode.h" 

@implementation BrickNode 

- (instancetype) init { 
    if (self == [super init]) { 

     int number = arc4random() % 2; 

     if (number == 0) { 
      SKSpriteNode *bridge1 = [SKSpriteNode spriteNodeWithImageNamed:@"TestBridgePiece"]; 
      bridge1.anchorPoint = CGPointMake(0.5, 0.0); 
      [self addChild:bridge1]; 
     } 
     if (number == 1) { 
      SKSpriteNode *bridge2 = [SKSpriteNode spriteNodeWithImageNamed:@"TestBridgePiece1"]; 
      bridge2.anchorPoint = CGPointMake(0.5, 0.0); 
      [self addChild:bridge2]; 
     } 
    } 
    return self; 
} 

@end 

我创建了调用类的方法。该方法将在TouchesBegin中调用。因为我希望用户能够产生下一块砖块。

-(void)spawnBrick 
    { 
     BrickNode *newBrick = [[BrickNode alloc] init]; 
     newBrick.position = CGPointMake(0.0, <#CGFloat y#>) 
    } 

但问题是新砖的位置。我需要刚刚加载的砖块的位置信息以知道新砖块的位置。

+0

请看enumerateChildNodesWithName。 –

回答

1

只是做

[self.parent.children objectAtIndex:([self.parent.children count] - 2)] ; 

在添加新砖于其父节点得到它之前以前添加任何节点。如果你正在添加Brick和一个非Brick,这将不起作用,但是如果它的结构是一个SKNode只包含Brick,那么这会得到你之前添加的砖块。

请注意,我没有检查这个目标是否正确,但它的概念是正确的。

算法:

调用父节点,
父节点的呼唤孩子,
转到子节点的尽头(这是目前添加的最新砖),
获得前指数最后,
返回此索引处的SKNode。

+0

感谢您的帮助:)我了解这个概念。我做了很多计算,只是不知道哪个代码放在哪里才能工作。由于我是编程新手,所以对我来说很有帮助。 – Nielsapp

+0

我需要更多关于你的代码的细节,当你需要定位下一块砖时,我会加入这个细节。基本上'oldBrick =上面的代码','newBrick position = oldBrick position + height' – Knight0fDragon

+0

是的,这正是我试过的。唯一的问题是将'BrickNode oldBrick'分配给'SKNode'是不兼容的。我试图让'oldBrick'成为'SKNode',但之后我找不到以前的砖块。最好做什么? – Nielsapp