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
- iOS开发-读取沙盒中地图脚本
- iOS - iOS 地图开发
- iOS地图位置开发
- iOS 地图位置开发
- iOS地图位置开发
- iOS地图位置开发
- iOS地图位置开发
- iOS地图位置开发
- iOS地图位置开发
- IOS开发百度地图
- iOS地图位置开发
- IOS百度地图开发
- iOS地图位置开发
- iOS地图位置开发
- iOS地图位置开发
- xamarin iOS地图开发
- iOS地图位置开发
- iOS 地图开发 基本常识
- Visual Studio 2012上使用共享配置项propertysheet
- 背包与构造
- Hadoop生态系统(全)
- MapReduce详细处理过程
- 在iOS中创建静态库
- iOS开发-读取沙盒中地图脚本
- 博弈总结
- 深入理解 JBoss 7/WildFly Domain 模式启动过程
- 热、浓、甜的茶
- hdu1907 John
- Myeclipse 安装 ADT
- HTML的列表,表单以及其他属性的详解总结
- Ecshop函数的讲解
- 写给学生:凭什么让好大学要你