2015-04-06 45 views
0

我有一個名爲sksprite節點的數組。我需要創建一個新數組,並把最後一個數組的名稱,但最接近(另一個節點的名稱 - 傾斜 - )的精靈節點將首先在數組中,等等。 如果我沒有解釋清楚我的自我足夠清楚告訴我。如果有人知道如何去做,請告訴我。寫在這裏。 謝謝字符串數組對象 - 精靈套件

+2

用一些相關代碼更新您的問題。顯示你所嘗試的並解釋你有什麼問題。 – rmaddy

+0

我不知道該怎麼做。所以我沒有代碼顯示。 – 100tomer

+2

當你給別人發表評論時,就像@rmaddy一樣。否則,該人將不會收到通知。其次,你的問題不是很清楚。你目前的陣列究竟是什麼?實際的節點?只是節點的名字?當你說「最近的節點」時,參考點是什麼?到了什麼,另一個節點?觸摸?還有別的嗎?再次「最接近」意味着什麼?一個圓圈?只是右邊,左邊,上下?你必須具體,並認爲你的問題讓別人去理解它。如果您沒有發佈任何代碼,這一點尤其重要。 – sangony

回答

1

正如我前面所說,你的問題缺乏一些具體的確切如何實施。我已經使我的代碼具有一定的通用性,可以適應幾乎所有您可能想到的場景。

我用觸摸位置座標作爲起點來計算到屏幕上4個節點的距離。點擊屏幕上的任意位置,列表將按距離順序打印4個節點名稱。

可能有更好的排序方法,但我決定採用快速和骯髒的方式。

#import "GameScene.h" 
@implementation GameScene { 
    SKSpriteNode *node0; 
    SKSpriteNode *node1; 
    SKSpriteNode *node2; 
    SKSpriteNode *node3; 
    NSMutableArray *nodeArray; 
} 

-(void)didMoveToView:(SKView *)view { 
    self.backgroundColor = [SKColor blackColor]; 
    nodeArray = [[NSMutableArray alloc] init]; 

    node0 = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(10, 10)]; 
    node0.name = @"red"; 
    node0.position = CGPointMake(300, 300); 
    [self addChild:node0]; 
    [nodeArray addObject:node0]; 

    node1 = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(10, 10)]; 
    node1.name = @"blue"; 
    node1.position = CGPointMake(450, 500); 
    [self addChild:node1]; 
    [nodeArray addObject:node1]; 

    node2 = [SKSpriteNode spriteNodeWithColor:[SKColor yellowColor] size:CGSizeMake(10, 10)]; 
    node2.name = @"yellow"; 
    node2.position = CGPointMake(100, 400); 
    [self addChild:node2]; 
    [nodeArray addObject:node2]; 

    node3 = [SKSpriteNode spriteNodeWithColor:[SKColor greenColor] size:CGSizeMake(10, 10)]; 
    node3.name = @"green"; 
    node3.position = CGPointMake(200, 200); 
    [self addChild:node3]; 
    [nodeArray addObject:node3]; 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    for (UITouch *touch in touches) { 
     CGPoint touchLocation = [touch locationInNode:self]; 

     NSMutableArray *myArray = [[NSMutableArray alloc] init]; 
     NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init]; 

     for(SKSpriteNode *object in nodeArray) { 
      float xDistance = fabsf(touchLocation.x - object.position.x); 
      float yDistance = fabsf(touchLocation.y - object.position.y); 
      NSString *totalDistance = [NSString stringWithFormat:@"%f",(xDistance+yDistance)]; 

      [myDict setValue:totalDistance forKey:object.name]; 
     } 

     float lowestValue = 999999.0; 
     NSMutableString *lowestName = [[NSMutableString alloc] init]; 

     for (int i=0; i<[nodeArray count]; i++) { 

      for (NSString *key in myDict) { 

       if([[myDict objectForKey:key] floatValue] < lowestValue) { 
        lowestValue = [[myDict objectForKey:key] floatValue]; 
        [lowestName setString:key]; 
       } 
      } 

      [myArray addObject:[NSString stringWithString:lowestName]]; 
      [myDict removeObjectForKey:lowestName]; 
      lowestValue = 999999.0; 
     } 

     NSLog(@"values: %@",myArray); 
    } 
} 
+0

感謝兄弟.... – 100tomer

+0

@ 100tomer - 沒問題。如果代碼回答了您的問題,請檢查它作爲答案。 – sangony