2016-03-08 19 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