这部分教程源代码连接

接下来我们就要添加勇士的移动检测了,再添加移动检测之前我们要把我们自己制作的地图进行解析

首先我们基于cocos2d建一个类,类名为:TitledMap 这个类继承CCTMXTiledMap,建成如下:

下面我们开始添加TitledMap.h中的代码

之前我说过我们的地图由多个图层组成,所以在这个类中我们每一个图层都相应的设置一个属性

还有上一章说过的地图上还有两个勇士的问题,其实它们代表两个坐标点分别是上楼和下楼的位置

所以我们再添加两个属性,代码如下:

@property (nonatomic,retain) CCTMXLayer *wall;
@property (nonatomic,retain) CCTMXLayer *road;
@property (nonatomic,retain) CCTMXLayer *enemy;
@property (nonatomic,retain) CCTMXLayer *item;
@property (nonatomic,retain) CCTMXLayer *upfloor;
@property (nonatomic,retain) CCTMXLayer *downfloor;
@property (nonatomic,retain) CCTMXLayer *door;
@property (nonatomic,retain) CCTMXLayer *other;
@property (nonatomic,retain) CCTMXLayer *npc;
@property (nonatomic,retain) CCTMXLayer *heroPoint;
@property (nonatomic,assign) CGPoint up;
@property (nonatomic,assign) CGPoint down;

接着我们再添加一个类方法+(TitledMap*)initWithAnalytic:(int)tileMapName;

这个类方法主要是为了实现在其他文件中加载地图,同时这个类方法调用初始化方法

+(TitledMap*)initWithAnalytic:(int)tileMapName
{return [[[self alloc] initWithAnalytic:tileMapName] autorelease];
}
-(id)initWithAnalytic:(int)tileMapName
{NSString *string = [NSString stringWithFormat:@"%d.tmx",tileMapName];self = [super initWithTMXFile:string];if (self) {self.road = [self layerNamed:@"road"];self.upfloor = [self layerNamed:@"upfloor"];self.downfloor = [self layerNamed:@"downfloor"];self.item = [self layerNamed:@"item"];self.enemy = [self layerNamed:@"enemy"];self.door = [self layerNamed:@"door"];self.npc = [self layerNamed:@"npc"];self.other = [self layerNamed:@"other"];self.heroPoint = [self layerNamed:@"heroPoint"];}return self;
}

接下来我们要把地图上的那“两个勇士”去掉

-(void)titledMapAnalytic
{for (int x = 0; x <= 10; x++) {for (int y = 0; y <= 10; y++) {CGPoint towerLoc = CGPointMake(x, y);int heroPoint_tileGid = [self.heroPoint tileGIDAt:towerLoc];if (heroPoint_tileGid) {NSDictionary *props = [self propertiesForGID:heroPoint_tileGid];NSString *value = [props valueForKey:@"point"];int type = [value intValue];if (type == 1){self.up = towerLoc;}elseself.down = towerLoc;[self.heroPoint removeTileAt:towerLoc];}}}return;
}

到这里我们的地图解析只是进行了一部分,我们还要再添加一个简单而重要的类,它就是

游戏数据类GameModel

下面我们开始添加这个类里面的代码,代码不多我就不过多解释了,大家看不明白的可以提问

GameModel.h文件代码

//地图集合1
@property (nonatomic,retain) NSMutableArray *titleMapArray1;
//地图集合2
@property (nonatomic,retain) NSMutableArray *titleMapArray2;
//地图集合3
@property (nonatomic,retain) NSMutableArray *titleMapArray3;+(GameModel*)getGameModel;
//加载地图
-(void)initWithMap;

GameModel.m文件代码

#import "GameModel.h"
#import "TitledMap.h"@implementation GameModel
@synthesize titleMapArray1,titleMapArray2,titleMapArray3;
static GameModel *_gameModel = nil;
+(GameModel*)getGameModel
{if (!_gameModel) {_gameModel = [[self alloc] init];}return _gameModel;
}
//加载地图
-(void)initWithMap
{
}
-(id)init
{if ((self = [super init])) {self.titleMapArray1 = [[[NSMutableArray alloc] init] autorelease];self.titleMapArray2 = [[[NSMutableArray alloc] init] autorelease];self.titleMapArray3 = [[[NSMutableArray alloc] init] autorelease];}return self;
}
@end

下面我们就要在加载地图这个方法中添加如下代码

for (int i = 0; i < 22; i++) {TitledMap *titledMap = [TitledMap initWithAnalytic:i];[self.titleMapArray1 addObject:titledMap];}

这些代码添加完我们的GameModel类就基本完成了。下面我们就要把刚才添加的两个类用在Game01中了

//加载游戏地图

curTiledMap = [CCTMXTiledMaptiledMapWithTMXFile:@"1.tmx"];

curTiledMap.scale =_scale;

curTiledMap.position =ccp(LEFTMIN,DOWNMIN);

[selfaddChild:curTiledMap];

修改成

//初始化数据self.model = [GameModel getGameModel];[model initWithMap];seltitleMapArray = self.model.titleMapArray1;//加载地图self.curtitleMap = [self.model.titleMapArray1 objectAtIndex:1];self.curtitleMap.scale = _scale;self.curtitleMap.position = ccp(LEFTMIN, DOWNMIN);[self addChild:self.curtitleMap];

修改过之后我们就要开始添加碰撞检测了

//检测是否有障碍物
-(void)canMoveTo:(CGPoint) pos
{towerLoc = [self tileCoordForPosition: pos];int road_tileGid = [self.curtitleMap.road tileGIDAt:towerLoc];int enemy_tileGid = [self.curtitleMap.enemy tileGIDAt:towerLoc];int item_tileGid = [self.curtitleMap.item tileGIDAt:towerLoc];int door_tileGid = [self.curtitleMap.door tileGIDAt:towerLoc];int npc_tileGid = [self.curtitleMap.npc tileGIDAt:towerLoc];int downfloor_tileGid = [self.curtitleMap.downfloor tileGIDAt:towerLoc];int upfloor_tileGid = [self.curtitleMap.upfloor tileGIDAt:towerLoc];int other_tileGid = [self.curtitleMap.other tileGIDAt:towerLoc];if (enemy_tileGid) {canmove = NO;}if (item_tileGid) {[self.curtitleMap.item removeTileAt:towerLoc];}if (door_tileGid) {//canmove = NO;[self.curtitleMap.door removeTileAt:towerLoc];}if (other_tileGid) {canmove = NO;}if (upfloor_tileGid) {canmove = NO;}if (downfloor_tileGid) {canmove = NO;}if (npc_tileGid) {canmove = NO;}if (road_tileGid) {if (canmove) {[self setPlayerPosition:pos];}}
}

towerLoc = [self tileCoordForPosition:pos] 是把当前移动坐标转换成地图坐标

int road_tileGid = [self.curtitleMap.road tileGIDAt:towerLoc] 获取当前坐标

在相应的图层中是否有图块存在。

方法有了,我们就得调用它,把updateMove方法中的if循环中的内容换成

//判断是否有物品或怪物
[self canMoveTo:playerPoint];

然后运行你会发现勇士不能穿过墙和怪物了,但是还不能和怪物打斗,接下来我们就要在if循环里添加

相应的响应事件了

上一篇连接                            下一篇连接

cocos2d-iphone之魔塔20层第四部分相关推荐

  1. cocos2d-iphone之魔塔20层完结篇

    tiled地图编辑器下载连接 这一章我们讲一下特殊门的打开问题,游戏中有两中特殊门,在第二层中我们可以看到 左边的特殊门是需要小偷帮你打开的代码之前已经添加过了:右边的特殊门是根据在地图中多次用到大部 ...

  2. java游戏魔塔20层_▓▓◇◆20层魔塔超详细攻略◇◆ ▓▓

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 上38层杀鬼战士.两个战士和两个骑士取黄钥匙3 上39层杀战士.骑士和两个鬼战士取红宝石+4=241,不需要向商人花钱2000买蓝钥匙3并对话(塔内有个  ...

  3. cocos2d-iphone之魔塔20层第一部分

    tiled地图编辑器下载连接 魔塔游戏素材 这是我第一次写博客,刚开始学习ios的时候我自己学了一个月基础就开始搜索各种游戏教程我发现大多数都 是很基础,很简单的游戏,我跟着教程学到了很多东西,后来我 ...

  4. cocos2d-iphone之魔塔20层第十部分

    这部分教程源代码连接 今天我们要在我们的主场景中添加两个重要的精灵,就是楼层传送和怪物查看. 首先我们要在Game01.h中添加: //风之罗盘图标 CCSprite *floorFly; //洞悉权 ...

  5. cocos2d-iphone之魔塔20层第二部分

    我们接着第一部分教程继续写开始游戏部分 这部分教程源代码连接 下面我们开始接着昨天的内容添加,首先我们的游戏界面分为两个部分(游戏地图层,英雄信息层) 我们添加文件Game01(游戏地图层), Her ...

  6. java游戏魔塔20层_魔塔全攻略之一——前20层

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 勇士:快走吧,外面还有很多怪物,我可能顾不上你. 小偷:不,不,不会有事的.快说吧,叫我做什么? 勇士:......你会开门吗? 小偷:那当然. 勇士:那 ...

  7. cocos2d-iphone之魔塔20层第五部分

    这部分教程源代码连接 这一章我们就要开始在Game01.m文件中canMoveTo: 方法中的if循环中添 加相应的事件了,我在制作地图时图块都设置了其属性如图: 这里我就要获取其属性值 NSDict ...

  8. cocos2d-iphone之魔塔20层第七部分

    为了感谢大家对我的支持在最后给大家提供一下这七部分的代码下载 接着昨天的开始写,我们今天就要实现勇士的穿越楼层了,我们的魔塔游戏地图 终于要露出全貌了. 首先我们要做一些准备工作,在这里我要说一点我们 ...

  9. cocos2d-x魔塔20层码源和制作心得

    最近我把之前用cocos2d-iphone做的魔塔游戏用cocos2d-x重新编写了一下,这里我在文章结尾把码源提供给大家学习应为cocos2d-x接触的还不是很深,大家有什么建议或疑问尽管找我交流一 ...

最新文章

  1. 异步消息队列zeromq实现服务器间高性能通信
  2. python四大软件-太牛逼!一款软件几乎可以操作所有的数据库!
  3. 刚才我提出要把数据库处理部分放到代码里,但是有人提出,存储过程有缓存,速度快。我该怎么说啊?...
  4. 在Apache上搭建pywebsocket提供html5的websocket服务
  5. 通信网络基础期末复习-第六章-拥塞控制
  6. 简单字符串比较——JAVA
  7. 页面左边导航固定,右边自适应宽度
  8. Python | 新手必会的 9 个 Python 技巧
  9. Akka并发编程——第二节:Actor模型(一)
  10. double类型占几个字节_MongoDB 中的数据类型
  11. pandas 时间序列分析(一)—— 基础
  12. tar命令打包并删除原文件
  13. Python数据的精度
  14. 嵌入式应用程序下载到ARM开发板后如何运行程序?
  15. jsoup爬虫实战详解之新浪
  16. linux 创建mbr分区,MBR分区类型简介
  17. java iplimage 头文件_在javacv中将IplImage转换为Mat
  18. 捣鼓PlantUML(三、时序图)
  19. linux解压7z文件,linux 中解压7z文件
  20. 计算机硬件知识应用,计算机硬件知识 (很详细)

热门文章

  1. MySQL中删除所有表的方法
  2. 如何做好上海微信自媒体平台
  3. thinkpad触控笔怎么用_新iPhone将支持触控笔?乔布斯当年是这样疯狂diss的
  4. vue点击创建input内容_vue.js怎么给input添加事件
  5. python生成网络拓扑图_画网络拓扑图 - neteworkx-python- - ItBoth
  6. html5网站源码_如何进行高端外贸网站建设
  7. java 防止反射_如何防止JAVA反射对单例类的攻击?
  8. 电容式触摸芯片的工作原理
  9. 服务器运行功率 与额定功率 比例,看完变大神 几招轻松教你看懂电源铭牌
  10. linux内核笔记之SMMU代码分析