我正在使用cocos2d 3.x和Xcode 5.1.1.i'm做的游戏就像一个糖果粉碎,在这里我将精灵加载到5 * 5矩阵,我已经获得了触摸的位置精灵,现在我需要保存并使用数组中的x,y值,如(0,0),(3,0),(2,2)
答案 0 :(得分:1)
有几种方法可以存储坐标,很难说哪种方式更合适,因为当你说 save 时,我不知道你究竟是什么意思... < / p>
CGPoint _coords = CGPointMake(x, y);
将它们存储在CGPoint
结构中的明显选择,但结构设计用于存储 fraction 坐标,但它也可以处理整数值。
您不能将CGPoint
直接插入任何集合类型,例如NSArray
,NSSet
或NSSDictionary
,但您可以将其存储在一个固定大小的C数组,如:
CGPoint _fiveCoordinates[4];
NSString *_coordinates = [NSString stringWithFormat:@"%d %d", x, y];
这是一个快速而丑陋的解决方案,我个人不喜欢它 - 但在某些情况下是有用的(与选项#4 !)。它也可以存储任何集合类型,你可以在以后提取坐标,以便进一步使用,例如:
NSArray *_components = [_coordinates componentsSeparatedByString:@" "];
NSInteger x = [[_components firstObject] integerValue];
NSInteger y = [[_components lastObject] integerValue];
如果您将值存储在简单的NSArray
中
NSArray *_coordinates = [NSArray arrayWithObjects:@(x), @(y)];
提取程序与上述想法类似。
NSDictionary *_coordinates = [NSDictionary dictionaryWithObjectsAndKeys:@(x), @"x", @(y), @"y"];
一个简单的字典可以完美地存储它们,如果你需要提取值,就像是一样。
NSInteger x = [[_coordinates valueForKey:@"x"] integerValue];
NSInteger y = [[_coordinates valueForKey:@"y"] integerValue];
NSIndexPath *_coordinates = [NSIndexPath indexPathForRow:y inSection:x];
如果您喜欢使用索引路径,这是一种非常直接的存储索引的方法,因为NSIndexPath
被广泛使用并且可以直接插入到任何集合类型中。
提取坐标将是同样简单的方法:
NSInteger x = [_coordinates section];
NSInteger y = [_coordinates row];
另一个显而易见的方法是创建一个自己的类来存储这些坐标,例如:
@interface MyCoordinates : NSObject { }
@property (nonatomic) NSinteger x;
@property (nonatomic) NSinteger y;
@end
@implementation MyCoordinates
@end
如果你想获得一个纯的可序列化对象,也可以使用NSCoding
进行永久存储,可以扩展它,使其符合NSArray
协议,如:
@interface MyCoordinates : NSObject <NSCoding> { }
@property (nonatmic) NSInteger x;
@property (nonatmic) NSInteger y;
@end
@implementation MyCoordinates
#pragma mark - <NSCoding>
- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super init]) {
_x = [[aDecoder decodeObjectForKey:@"x"] integerValue];
_y = [[aDecoder decodeObjectForKey:@"y"] IntegerValue];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:@(_x) forKey:@"x"];
[aCoder encodeObject:@(_y) forKey:@"y"];
}
@end
...或类似的东西,或者您可以将它们组合在一起,因为您觉得哪种方式最适合您的个人观点。
答案 1 :(得分:1)
//SET
NSMutableArray* points = [[NSMutableArray alloc] initWithCapacity:10];
CGPoint pointToBeStored = CGPointMake(0,0);
[points addObject:[NSValue valueWithCGPoint:pointToBeStored]];
//GET
NSValue *value = [points objectAtIndex:index];
CGPoint storedPoint = [value CGPointValue];