【问题标题】:string array of objects - sprite kit对象的字符串数组 - 精灵套件
【发布时间】:2015-04-06 21:13:01
【问题描述】:

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

【问题讨论】:

  • 用一些相关代码更新您的问题。展示您的尝试并解释您遇到的问题。
  • 我不知道该怎么做。所以我没有要显示的代码。
  • 当您向某人发表评论时,请这样做@rmaddy。否则此人将不会收到通知。其次,你的问题不是很清楚。你当前的数组到底有什么?实际节点?只是节点的名称?当您说“最近的节点”时,参考点是什么?到什么,另一个节点?触摸?还有什么?再次“最接近”是什么意思?一个圆圈?就在右边,左边,上下?您必须具体并思考您的问题,以便其他人理解。如果您不发布任何代码,这一点尤其重要。
  • @sangony。该数组包含节点的名称。我需要从最近的节点到最远的节点组织数组。我有另一个节点,我想从中检查距离以组织数组。
  • 您是在问如何根据节点与给定点的距离对节点数组进行排序?

标签: ios objective-c arrays sprite-kit


【解决方案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);
    }
}

【讨论】:

  • @100tomer - 没问题。如果代码回答了您的问题,请将其作为答案进行检查。
猜你喜欢
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多