今天我们接着第五部分的开始讲,上一章我们让勇士和怪物可以战斗了,但是

我们会发现一个问题就是勇士的血量减少了,但是右面的生命值没有变化。

下面我们就开始添加这些标签的更新方法,让它们随着进度变化。

这些游戏数据的更新都是在Herohp这个类中进行的,需要添加的代码:

Herohp.h要添加代码

-(void) updateHeroHp;
-(void) updateHeroAttack;
-(void) updateHeroDefense;
-(void)updateCoin;
-(void)updateExperience;
-(void)updateGrade;
-(void) updateKey;

Herohp.m要添加代码

-(void)updateHeroHp
{[HpLable setString:[NSString stringWithFormat:@"生命 %d",self.hero.HP]];
}
-(void)updateHeroAttack
{[AttLable setString:[NSString stringWithFormat:@"攻击 %d",self.hero.Attack]];
}
-(void)updateHeroDefense
{[DefLable setString:[NSString stringWithFormat:@"防御 %d",self.hero.Defense]];
}
-(void)updateCoin
{[CoinLable setString:[NSString stringWithFormat:@"金币 %d",self.Coin]];
}
-(void)updateExperience
{[ExperienceLable setString:[NSString stringWithFormat:@"经验 %d",self.Experience]];
}
-(void)updateGrade
{[GradeLable setString:[NSString stringWithFormat:@"%d 级",self.Grade]];
}
-(void)updateKey1
{[Key1Lable setString:[NSString stringWithFormat:@"%d",self.YellowKey]];[Key2Lable setString:[NSString stringWithFormat:@"%d",self.BlueKey]];[Key3Lable setString:[NSString stringWithFormat:@"%d",self.RedKey]];
}

有了这些更新方法我们只要在数据变化的时候调用相应的更新方法就行了

首先我们Game01.m消除敌人(removeEnemy)方法中添加一行代码

[herohp updateHeroHp];

并在初始化方法里添加

herohp = [HerohpsharedHP];

然后我们的勇士血量就会变化了。

接下来我们就要开始让我们的勇士真正的“吃”到地图上的道具了,首先介绍一下我们的道具

1、红血瓶(+生命 200)     2、蓝血瓶(+生命 500)

3、红宝石(+攻击 3)         4、蓝宝石(+防御 3)

5、红钥匙 (+1)                6、蓝钥匙(+1)

7、黄钥匙(+1)                 8、大黄钥匙(各种钥匙+1)

9、金币(+500)                10、升级标

11、洞悉权杖                      12、楼层飞行器

13、红榔头                          14、十字架

15、生命魔瓶                       16、宝剑、盾牌等

下面是代码部分我们根据图块属性来获取其相应是属性值,在if(item_tileGid)中添加

        NSDictionary *props = [self.curtitleMap propertiesForGID:item_tileGid];NSString *value = [props valueForKey:@"HP"];NSString *value1 = [props valueForKey:@"Attack"];NSString *value2 = [props valueForKey:@"Defense"];NSString *value3 = [props valueForKey:@"key"];NSString *value4 = [props valueForKey:@"predict"];NSString *value5 = [props valueForKey:@"hoe"];NSString *value6 = [props valueForKey:@"double"];NSString *value7 = [props valueForKey:@"Promote"];NSString *value8 = [props valueForKey:@"grade"];NSString *value9 = [props valueForKey:@"coin"];

然后根据获取到的值改变勇士相应的数据

        if (value){int hp = [value intValue];_hero.HP += hp;[herohp updateHeroHp];}if (value1) {int attack = [value1 intValue];_hero.Attack +=attack;[herohp updateHeroAttack];}if (value2) {int defense = [value2 intValue];_hero.Defense +=defense;[herohp updateHeroDefense];}if (value3) {int key = [value3 intValue];switch (key) {case 1:herohp.YellowKey ++;break;case 2:herohp.BlueKey ++;break;case 3:herohp.RedKey ++;break;case 4:herohp.YellowKey ++;herohp.BlueKey ++;herohp.RedKey ++;break;default:break;}[herohp updateKey1];}if (value4) {}if (value5) {}if (value6) {_hero.HP *= 2;[herohp updateHeroHp];}if (value7) {_hero.HP *= 1.3;_hero.Attack *= 1.3;_hero.Defense *= 1.3;[herohp updateHeroHp];[herohp updateHeroAttack];[herohp updateHeroDefense];}if (value8) {int grade =  [value8 intValue];_hero.HP += 1000*grade;_hero.Attack += 7*grade;_hero.Defense += 7*grade;herohp.Grade += grade;[herohp updateGrade];[herohp updateHeroHp];[herohp updateHeroAttack];[herohp updateHeroDefense];}if (value9){int coin =  [value9 intValue];herohp.Coin += coin;[herohp updateCoin];}

这样我们的勇士就可以“吃”到各种道具了 运行一下

游戏截图:

我们的勇士在打斗的时候是不能进行操作的所以我们要在creatFightScene方法中添加

_hero.isFighting =YES;

并在打斗结束时赋值为NO

下面我们要添加钥匙的使用和开门动画,在if(door_tileGid)中添加

_hero.isFighting = YES;canmove = NO;NSDictionary *props = [self.curtitleMap propertiesForGID:door_tileGid];NSString *value = [props valueForKey:@"door"];if (value) {int type = [value intValue];bool canoppen = NO;switch (type) {case 0:if (herohp.YellowKey > 0) {herohp.YellowKey --;canoppen = YES;}break;case 1:if (herohp.BlueKey > 0) {herohp.BlueKey --;canoppen = YES;}break;case 2:if (herohp.RedKey > 0) {herohp.RedKey --;canoppen = YES;}break;default:break;}if (canoppen) {[herohp updateKey1];CCTexture2D *heroTexture = [[CCTextureCache sharedTextureCache]addImage:@"door.png"];CCSpriteFrame *frame0,*frame1,*frame2,*frame3;//第二个参数表示显示区域的x,y,width,height,根据direction来确定显示的y坐标frame0 = [CCSpriteFrame frameWithTexture:heroTexture rect:CGRectMake(32*type, 32*0, 32, 32)];frame1 = [CCSpriteFrame frameWithTexture:heroTexture rect:CGRectMake(32*type, 32*1, 32, 32)];frame2 = [CCSpriteFrame frameWithTexture:heroTexture rect:CGRectMake(32*type, 32*2, 32, 32)];frame3 = [CCSpriteFrame frameWithTexture:heroTexture rect:CGRectMake(32*type, 32*3, 32, 32)];NSMutableArray *animFrames = [NSMutableArray array];[animFrames addObject:frame0];[animFrames addObject:frame1];[animFrames addObject:frame2];[animFrames addObject:frame3];//循环动画序列CCAnimation *animation = [CCAnimation animationWithFrames:animFrames delay:0.1f];CCAnimate *animate = [CCAnimate actionWithAnimation:animation];id action = [CCCallFunc actionWithTarget:self selector:@selector(removeDoor)];CCSequence *seq = [CCSequence actions: animate,action,nil];//[[self.curtitleMap.door tileAt:towerLoc] runAction:seq];}else_hero.isFighting = NO;}

在这里先判断了一下是否有相应的钥匙用于开门,如果有的话,相应的钥匙数量减少一把

并且播放开门动画,播放动画首先要加载动画纹理集,在获取每一帧的动画图片在把其加载

到动画序列中最后播放动画,在播放结束是调用消除门的方法

//消除已开门
-(void)removeDoor
{_hero.isFighting = NO;canmove = YES;[self.curtitleMap.door removeTileAt:towerLoc];
}

到这里我们的游戏也算有模有样了,但是我要说了是我们的游戏制作仅仅是刚开始,连着写了

三天,有点累了,今天就先到这里明天再继续我们的游戏制作

上一篇连接                          下一篇连接

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

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

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

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

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

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

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

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

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

  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. Python使用matplotlib绘图并去除颜色样条colorbar实战:remove colorbar from figure in matplotlib
  2. R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析:拟合连续性自变量和事件风险之间的关系并绘制直方图、平滑曲线、双Y轴于同一个图像中
  3. vue keep-alive解决关闭标签动态缓存问题
  4. Ymordem学习使用
  5. Taro+react开发(93):判断是否是H5端
  6. shell脚本实现自动化备份
  7. mysql查询时传入中文时的乱码问题
  8. jni数组使用(二)
  9. 2021-06-29操作DOM元素
  10. 新版 世界地图 中文版地图 国界地图 高清全彩矢量地图 CDR 2021年整理制作
  11. 汽车故障诊断技术【3】
  12. 乱世王者服务器维护,乱世王者微信534区仰不愧天开服时间表_乱世王者新区开服预告_第一手游网手游开服表...
  13. 【GANs学习笔记】(十六)CGAN、TRIPLEGAN
  14. Go按多组id数组出现次数,由多到少排序并去重,输出权重id数组
  15. 尝试manjar20.03、fedora32、ubuntu20.04作为主力操作系统
  16. Appium+Python MAC安装Android夜神模拟器(二)
  17. 如何知道计算机显示器尺寸,电脑显示器尺寸怎么看(电脑显示器常见参数详解)...
  18. 数据可视化技能之组合框完成动态图表
  19. 拦截器、过滤器、监听器
  20. THREEJS - 旋转中心调整

热门文章

  1. cannot create map for .ILK file; linking nonincrementally
  2. Netty框架-IO模型(Linux五大网络IO模型)
  3. Petalinux定制专属Linux系统
  4. 蓝桥杯单片机之DS1302时钟模块的使用
  5. java计算机毕业设计图书管理系统源程序+mysql+系统+lw文档+远程调试
  6. 中兴b860a如何强制刷固件_网络机顶盒刷机、固件升级图文详解 宏旺半导体包教包会...
  7. 欧路词典如何导入html,欧路词典怎么添加词库 管理词库的方法介绍
  8. windows系统中pyyaml_关于python:如何在Windows 10上安装pyYAML
  9. 将视频作为桌面动态壁纸,只需要两步,让你保存的视频在桌面动起来,动态壁纸工具,视频动态壁纸,小风车,桌面美化工具
  10. 这个项目很骚气,已开源!作者脑洞也够大!!