我最近开始自学Obj-c并开展了一个大项目,以便在他们出现时学习语言的原理。我正在用14块瓷砖板制作游戏。现在放置这些我觉得最好将每个瓷砖的坐标放在.plist中,访问此信息然后返回每个坐标。所以plist看起来像这样:
root --->船上的位置--->项目0 ---> TileX(数字(4)),Tile y(数字(12))--->第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;
现在很明显,我现在正在对此进行nslogging,因此我让每个磁贴都返回其X值和Y值。我最终会将其绘制到某种CGRectMake网格上,然后使用图像在viewcontroller上显示它。正如我所说,我是新手,仍然在学习。有更简单的方法吗?更好的方法?我非常感谢您的反馈,谢谢!
答案 0 :(得分:5)
您只需在{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
格式保存所有位置。您可以从这些NSStrings生成CGPoint
。
您可以直接使用这些CGPoints来定位瓷砖,或者您甚至可以根据需要分离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);
}
答案 1 :(得分:0)
继续上述评论:
我假设网格也是六边形,所以它将是2,3,4,3和2行等于14个图块。如果它是一个网格,并且图块的物理位置将始终是网格中的一个离散位置,我认为您不需要存储每个图块的X和Y坐标。您可以将它们的位置存储在网格中的二维数组中,并使用一种方法绘制板并将切片放在网格中的相应位置。除此之外,存储每个图块的中心X和Y坐标没有多大意义(除非您出于某种原因需要)。由于绘图坐标从左下角开始,您应该将每个六边形视为存在于矩形内并存储左下角的X和Y坐标。显然,矩形行需要重叠一点才能让瓷砖贴合在一起(如果我对网格的假设是正确的话)。
至少,您应该重新考虑代码中的for
循环。每次迭代都有一个if
语句会失败for
循环的目的,考虑到每个else if
语句完全相同,完全没有必要。你可以清理它看起来像这样:
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 {
[arrayOfPositionsX removeObjectAtIndex:0];
[arrayOfPositionsY removeObjectAtIndex:0];
NSLog(@"%i %@ %@", d, arrayOfPositionsX, arrayOfPositionsY);
}
}