我最近开始自学 Obj-c,并进行了一个大型项目,以便在出现时学习语言的原理。我正在用 14 block 棋盘制作游戏。现在在放置这些时,我觉得最好将每个图 block 的坐标放在 .plist 中,访问此信息然后返回每个坐标。所以 plist 看起来像这样:
root ---> position on board ---> item 0 ---> TileX (number(4)), Tile y (number(12)) ---> item 1 ...等。等最多 13 个。
现在在代码中我有这个作为
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"WheelData.plist"];
NSDictionary *plistData = [NSDictionary dictionaryWithContentsOfFile:finalPath];
NSArray *positionOnBoard = [NSArray arrayWithArray:[plistData objectForKey:@"Position On Board"]];
int numberOfPositions = [positionOnBoard count];
NSMutableArray *PositionX;
NSMutableArray *PositionY;
NSMutableArray *arrayOfPositionsX = [[NSMutableArray alloc] initWithCapacity:numberOfPositions];
NSMutableArray *arrayOfPositionsY = [[NSMutableArray alloc] initWithCapacity:numberOfPositions];
for (int d = 0; d < numberOfPositions; d++) {
[arrayOfPositionsX addObject:[[positionOnBoard objectAtIndex:d] objectForKey:@"Tile X"]];
[arrayOfPositionsY addObject:[[positionOnBoard objectAtIndex:d] objectForKey:@"Tile Y"]];
PositionX = [NSMutableArray arrayWithArray:arrayOfPositionsX];
PositionY = [NSMutableArray arrayWithArray:arrayOfPositionsY];
if (d == 0) {
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else if (d == 1) {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else if (d == 2) {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else if (d == 3) {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else if (d == 4) {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else if (d == 5) {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else if (d == 6) {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else if (d == 7) {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else if (d == 8) {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else if (d == 9) {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else if (d == 10) {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else if (d == 11) {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else if (d == 12) {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
} else {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
}
}
return PositionX;
return PositionY;
现在很明显,此刻我只是在记录这个,所以我让每个图 block 返回它的 X 值和 Y 值。我最终会将它绘制到某种 CGRectMake 网格上,然后使用图像在 View Controller 上显示它。正如我所说,我对此很陌生并且仍在学习。有没有更简单的方法来做到这一点?更好的方法?非常感谢您的反馈,谢谢!
最佳答案
您可以简单地以 {10,10}.... 格式将一串位置添加到您的 plist 文件中。 所以你的 plist 结构看起来像这样;
<plist version="1.0">
<array>
<string>{10,10}</string>
<string>{10,10}</string>
<string>{10,10}</string>
<string>{10,10}</string>
<string>{10,10}</string>
<string>{10,10}</string>
<string>{10,10}</string>
<string>{10,10}</string>
<string>{10,10}</string>
<string>{10,10}</string>
<string>{10,10}</string>
<string>{10,10}</string>
<string>{10,10}</string>
<string>{10,10}</string>
</array>
</plist>
然后,访问如下数据;
NSArray *positionsArray = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Page" ofType:@"plist"]];
上面的数组将以 NSString
格式保存所有位置。您可以从这些 NSString 生成一个 CGPoint
。
您可以直接使用这些 CGPoints 来定位您的图 block ,或者您甚至可以根据需要分离出 X 和 Y 坐标。请在下面找到代码片段;
int count = 0;
for(NSString *strPos in positionsArray)
{
count++;
CGPoint position = CGPointFromString(strPos);
NSLog(@"Position %d -> X:%f Y:%f",count,position.x,position.y);
}
关于ios - 用于坐标的 Obj-c 数组 - 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22964313/