字符串数组对象 - 精灵工具包

时间:2015-04-06 21:13:01

标签: ios objective-c arrays sprite-kit

我有一系列sksprite节点的名称。我需要创建一个新数组并从最后一个数组中放入名称,但最接近的sprite节点(倾斜 - 另一个节点的名称)将首先在数组中依此类推。 如果我没有解释我的自我清楚,请告诉我。如果有人知道怎么做,请。写在这里。 感谢

1 个答案:

答案 0 :(得分: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);
    }
}
相关问题