对象的字符串数组 - 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);
}
}
我有一组 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);
}
}