Obj-c坐标数组 - 最佳实践?

Jon*_*ert 0 arrays objective-c ios

我最近开始自学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;
Run Code Online (Sandbox Code Playgroud)

现在很明显,此刻我只是对此进行nslogging,因此我得到每个tile都返回其X值和Y值.我最终会将其绘制到某种CGRectMake网格上,然后使用图像在viewcontroller上显示它.正如我所说,我是新手,仍然在学习.有更简单的方法吗?更好的方法?我非常感谢您的反馈,谢谢!

小智 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>
Run Code Online (Sandbox Code Playgroud)

然后,访问如下数据;

NSArray *positionsArray = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Page" ofType:@"plist"]];
Run Code Online (Sandbox Code Playgroud)

上面的数组将以NSString格式保存所有位置.您可以CGPoint从这些NSStrings 生成一个.您可以直接使用这些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);
}
Run Code Online (Sandbox Code Playgroud)