iOS开发-读取沙盒中地图脚本

来源:互联网 发布:瓷砖铺设软件 编辑:程序博客网 时间:2024/05/07 16:40

一般情况下,游戏开发脚本文件是少不了的,瓦片地图的数组信息也可以存储在脚本文件中,例如:

OC语言NSArray的快速创建方式需要加前缀@,这一点无疑增加了铺地图的代码工作量.

这就会面临以下两点问题:

1.地图数据需要存储为文件

2.写地图数组每个value前都要加@

下面我们来解决这些问题.


本文demo功能:读取以txt为后缀的瓦片地图数组文件,并且数组写法简单.

demo未完善的功能:加入分关卡读取地图功能

demo代码水平:菜鸟


实现思路:

1.把在txt中输入地图数组,格式如:

{1,2,3,0,1,2,3,4,1,2,3,0,1,2,3,4,1,2,3,0,1,2,3,4,1,2,3,0,1,2,3,4,}
(注意:本demo的地图数组为一维数组)

2.读取txt文件中的数据,转换成NSString格式;

3.依次判断NSString中单个字符是否为地图信息,并将地图信息转成NSNumber对象;

4.将所有的NSNumber对象存入NSArray;

5.处理NSArray(实现行列化)


重要代码片段:
1.读取txt文件,转换成NSArray:

#import "NSArray+ReadGameMapFromTxtCArray.h"@implementation NSArray (ReadGameMapFromTxtCArray)/** *  获取地图数组 * *  @param path 文件路径 * *  @return 地图数组 */+ (NSArray *)gameMapWithFile:(NSString*)path {      NSString *map = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];    //    NSLog(@"map= %@",map);    NSArray *array = [self getMapArray:map];    //    NSLog(@"array = %@",array);    return array;}+ (NSArray *)getMapArray:(NSString*)mapStr{    NSMutableArray *array = [NSMutableArray array];        //字符串的索引    int index = 0;    while (1) {        //判断遍历字符串是够完成        if (index >= mapStr.length-1)break;        NSNumber *num = [self readString:mapStr withIndex:index];        if (num != nil) {            [array addObject:num];        }        index++;    }        return array;}/** *  依次读取字符串中字符 * *  @param mapStr 从txt中读取的信息所得到的字符串 *  @param index  记录字符串中索引 * *  @return OC数字对象 */+ (NSNumber*)readString:(NSString*)mapStr withIndex:(int)index{        NSRange range = {index,1};    NSString *sub = [mapStr substringWithRange:range];        //删除非数字信息    if ([sub isEqualToString:@"{"]) {        return nil;    }else if ([sub isEqualToString:@" "]) {        return nil;    }else if ([sub isEqualToString:@","]) {        return nil;    }else if ([sub isEqualToString:@"\n"]) {        return nil;    }else if ([sub isEqualToString:@"}"]) {        return nil;    }        //    NSLog(@"sub%d = %@",index,sub);    int numInt = [sub intValue];    NSNumber *num = [NSNumber numberWithInt:numInt];    NSLog(@"numOC= %@",num);    return num;}@end


2.使用NSArray铺地图:

//铺地图    CGFloat btnWH = 20;    CGFloat margin = 3;    for (int i = 0;i < array.count; i++){        int row =i / 8 ;        int col = i % 8;        CGFloat btnX = 20+col*(btnWH+margin);        CGFloat btnY = 20+row*(btnWH+margin);                UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(btnX, btnY, btnWH, btnWH)];                NSNumber *num = array[i];//       设置btn颜色        int numInt = [num intValue];        if (numInt == kMapColorRed) {            btn.backgroundColor = [UIColor redColor];        }else   if (numInt == kMapColorGray) {            btn.backgroundColor = [UIColor grayColor];        }        [self.view addSubview:btn];


(NSArray分类的名字有点恶心,见谅啊~)

(注释不多,如需交流请留言!)


DEMO下载




0 0