对象的字符串数组 - sprite kit

string array of objects - sprite kit

我有一组 sksprite 节点的名称。我需要创建一个新数组并将名称放在最后一个数组中,但最接近(倾斜 - 另一个节点的名称)的精灵节点将在数组中排在第一位,依此类推。 如果我没有足够清楚地解释自己,请告诉我。请如果有人知道该怎么做。写在这里。 谢谢

正如我之前所说,您的问题缺少具体的实施方式。我使我的代码有些通用,以适应您可能想到的几乎任何场景。

我使用触摸位置坐标作为起点来计算到屏幕上 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);
    }
}