这部分教程源代码连接
今天我们要在我们的主场景中添加两个重要的精灵,就是楼层传送和怪物查看。
首先我们要在Game01.h中添加:
//风之罗盘图标
CCSprite *floorFly;
//洞悉权杖图标
CCSprite *predict;
然后在Game01.m的初始化方法中添加这两个精灵
//飞行器图标
CCTexture2D *Texture = [[CCTextureCachesharedTextureCache]addImage:@"item.png"];
CCSpriteFrame *fly = [CCSpriteFrameframeWithTexture:Texturerect:CGRectMake(2*32,8*32,32,32)];
floorFly = [CCSpritespriteWithSpriteFrame:fly];
floorFly.scale =2.0;
floorFly.position =ccp(size.width
-240,
110);
[selfaddChild:floorFly];
//洞悉权杖图标]
CCSpriteFrame *pre = [CCSpriteFrameframeWithTexture:Texturerect:CGRectMake(2*32,10*32,32,32)];
predict = [CCSpritespriteWithSpriteFrame:pre];
predict.scale =2.0;
predict.position =ccp(size.width
-240,
40);
[selfaddChild:predict];
运行之后截图如下
下面我们首先来添加楼层传送这部分,我们需要先新建一个类FlyFloor,代码:
FlyFloor.h
#import<Foundation/Foundation.h>
#import"cocos2d.h"
@interface FlyFloor :CCLayer
{
CCTMXTiledMap *mapBackground;
}
//是否清除窗体
@property (nonatomic,assign)bool removeView;
@end
FlyFloor.m
#import"FlyFloor.h"
@implementation FlyFloor
@synthesize removeView;
-(id)init
{
if ((self = [superinit]))
{
//背景
mapBackground = [CCTMXTiledMaptiledMapWithTMXFile:@"shopbg.tmx"];
mapBackground.position =ccp(45,85);
mapBackground.scale =2.0;
[selfaddChild:mapBackground];
CCLabelTTF *floor = [CCLabelTTFlabelWithString:@"楼层"fontName:@"Verdana-Bold"fontSize:50];
[selfaddChild:floor];
floor.position =ccp(340,630);
//菜单一
CCMenuItemFont *floor1 = [CCMenuItemFontitemFromString:@"第一层"
target:selfselector:@selector(goFloor:)];
CCMenuItemFont *floor2 = [CCMenuItemFontitemFromString:@"第二层"
target:selfselector:@selector(goFloor:)];
CCMenuItemFont *floor3 = [CCMenuItemFontitemFromString:@"第三层"
target:selfselector:@selector(goFloor:)];
CCMenuItemFont *floor4 = [CCMenuItemFontitemFromString:@"第四层"
target:selfselector:@selector(goFloor:)];
CCMenuItemFont *floor5 = [CCMenuItemFontitemFromString:@"第五层"
target:selfselector:@selector(goFloor:)];
CCMenuItemFont *floor6 = [CCMenuItemFontitemFromString:@"第六层"
target:selfselector:@selector(goFloor:)];
CCMenuItemFont *floor7 = [CCMenuItemFontitemFromString:@"第七层"
target:selfselector:@selector(goFloor:)];
floor1.tag =1;
floor2.tag =2;
floor3.tag =3;
floor4.tag =4;
floor5.tag =5;
floor6.tag =6;
floor7.tag =7;
floor1.position =ccp(0,180);
floor2.position =ccp(0,120);
floor3.position =ccp(0,60);
floor4.position =ccp(0,0);
floor5.position =ccp(0, -60);
floor6.position =ccp(0, -120);
floor7.position =ccp(0, -180);
CCMenu *menu1 = [CCMenu
menuWithItems:floor1,floor2,floor3,floor4,floor5,floor6,floor7,
nil];
[selfaddChild:menu1];
menu1.position =ccp(160,360);
//菜单二
CCMenuItemFont *floor8 = [CCMenuItemFontitemFromString:@"第八层"
target:selfselector:@selector(goFloor:)];
CCMenuItemFont *floor9 = [CCMenuItemFontitemFromString:@"第九层"
target:selfselector:@selector(goFloor:)];
CCMenuItemFont *floor10 = [CCMenuItemFontitemFromString:@"第十层"
target:selfselector:@selector(goFloor:)];
CCMenuItemFont *floor11 = [CCMenuItemFontitemFromString:@"第十一层"
target:self selector:@selector(goFloor:)];
CCMenuItemFont *floor12 = [CCMenuItemFontitemFromString:@"第十二层"
target:self selector:@selector(goFloor:)];
CCMenuItemFont *floor13 = [CCMenuItemFontitemFromString:@"第十三层"
target:self selector:@selector(goFloor:)];
CCMenuItemFont *floor14 = [CCMenuItemFontitemFromString:@"第十四层"
target:self selector:@selector(goFloor:)];
//floor1.scale = 2.0;
floor8.tag =8;
floor9.tag =9;
floor10.tag =10;
floor11.tag =11;
floor12.tag =12;
floor13.tag =13;
floor14.tag =14;
floor8.position =ccp(0,180);
floor9.position =ccp(0,120);
floor10.position =ccp(0,60);
floor11.position =ccp(0,0);
floor12.position =ccp(0, -60);
floor13.position =ccp(0, -120);
floor14.position =ccp(0, -180);
CCMenu *menu2 = [CCMenu
menuWithItems:floor8,floor9,floor10,floor11,floor12,floor13,floor14,
nil];
[selfaddChild:menu2];
menu2.position =ccp(340,360);
//菜单三
CCMenuItemFont *floor15 = [CCMenuItemFontitemFromString:@"第十五层"
target:self selector:@selector(goFloor:)];
CCMenuItemFont *floor16 = [CCMenuItemFontitemFromString:@"第十六层"
target:self selector:@selector(goFloor:)];
CCMenuItemFont *floor17 = [CCMenuItemFontitemFromString:@"第十七层"
target:self selector:@selector(goFloor:)];
CCMenuItemFont *floor18 = [CCMenuItemFontitemFromString:@"第十八层"
target:self selector:@selector(goFloor:)];
CCMenuItemFont *floor19 = [CCMenuItemFontitemFromString:@"第十九层"
target:self selector:@selector(goFloor:)];
CCMenuItemFont *floor20 = [CCMenuItemFontitemFromString:@"第二十层"
target:self selector:@selector(goFloor:)];
floor15.tag =15;
floor16.tag =16;
floor17.tag =17;
floor18.tag =18;
floor19.tag =19;
floor20.tag =20;
floor15.position =ccp(0,180);
floor16.position =ccp(0,120);
floor17.position =ccp(0,60);
floor18.position =ccp(0,0);
floor19.position =ccp(0, -60);
floor20.position =ccp(0, -120);
CCMenu *menu3 = [CCMenu
menuWithItems:floor15,floor16,floor17,floor18,floor19,floor20,
nil];
[selfaddChild:menu3];
menu3.position =ccp(530,360);
}
returnself;
}
-(void)goFloor:(CCMenuItemFont*) sender
{
int floor = sender.tag;
[self.parentgoFloor:floor];
[self.parentremoveChild:selfcleanup:YES];
}
@end
这个类里面我们使用菜单来实现楼层传送“标签”,并且我们通过tag值来判断要传递的楼层,然后在调用Game01中的方法来实现勇士楼层间的传送。
下面我们就开始在Game01.m中调用这个类吧:
首先我们现在首次触摸响应方法中添加两个图标的矩形区域:
CGRect RectFly =CGRectMake(floorFly.position.x
-32,floorFly.position.y -32,64,64);
CGRect RectPredict =CGRectMake(predict.position.x
-32,predict.position.y -32,64,64);
然后再添加如下代码:
//判断楼层传送层是否可以移除
if (flyFloor.removeView)
{
//如果可以移除则移除它
[selfremoveChild:flyFloorcleanup:YES];
flyFloor.removeView =NO;
_hero.isFighting =NO;
}
if (!_hero.isFighting)
{
//检测触点是否在楼层飞行器图标上
if (CGRectIntersectsRect(Rect, RectFly))
{
//判断楼层传送层是否已经移除
if (!flyFloor.removeView)
{
//如果已经移除则添加它
[selfaddChild:flyFloor];
flyFloor.removeView =YES;
_hero.isFighting =
YES;
}
}
}
注释很详细就不多讲了(记得要在初始化方法中实例化flyFloor),到这里我们楼层飞行菜单是有了,但是还不能进行转送接下来我们就要使我们的勇士进行楼层传送了:
//楼层传送
-(void)goFloor:(int)layer
{
//获取将要传送楼层地图信息
TitledMap *titlemap = [self.model.titleMapArray1objectAtIndex:layer];
//判断是否可以传送这里有两个判断一个是要传送楼层是否已经开启传送(通过的楼层),另一是判断要传送楼层是否为当前楼层。这里这两个判断条件你可以根据情况修改为了测试方便我们这里可以将titlemap.deliver先去掉
if (titlemap.delivery &&
curfloor != layer)
{
//下面代码就跟穿越楼层的一样
[herohpupdateFloor:layer];
[selfremoveChild:self.curtitleMapcleanup:YES];
[selfremoveChild:_herocleanup:YES];
self.curtitleMap = [self.model.titleMapArray1objectAtIndex:layer];
self.curtitleMap.scale
=_scale;
self.curtitleMap.position
=ccp(LEFTMIN,DOWNMIN);
[selfaddChild:self.curtitleMap];
[self.curtitleMaptitledMapAnalytic];
[selfaddChild:_hero];
CGPoint pos;
if (layer > curfloor)
{
pos =
CGPointMake(LEFTMIN + (self.curtitleMap.down.x*32*_scale),DOWNMIN
+ ((10 -self.curtitleMap.down.y)*32*_scale));
}
else
pos =
CGPointMake(LEFTMIN + (self.curtitleMap.up.x*32*_scale),DOWNMIN
+ ((10 -self.curtitleMap.up.y)*32*_scale));
[_herosetPosition:pos];
curfloor = layer;
}
}
这部分代码很熟悉吧,就是在穿越楼层的基础上添加了一个判断。
另外我们的判断条件delivery值的改变是在图块检测中的if(upfloor_tileGid)中添加:
self.curtitleMap.delivery =YES;
到这里我们的楼层传送模块已经添加好了,运行一下吧!截图:
上一篇连接 下一篇连接
分享到:
相关推荐
《cocos2d-iphone之魔塔20层第五部分》是关于使用cocos2d-iphone框架开发经典游戏——魔塔的一个教程章节。在这个部分,我们将深入探讨如何利用cocos2d-iphone的特性来实现魔塔游戏的第20层的逻辑和交互。 首先,...
《cocos2d-iphone之魔塔20层第四部分》是针对移动平台游戏开发的一份教程,主要基于cocos2d-iphone框架。cocos2d-iphone是一款开源的游戏开发框架,它允许开发者使用Objective-C语言来创建2D游戏、演示和其他图形/...
《cocos2d-iphone之魔塔20层第二部分》是针对移动平台游戏开发的一份教程,主要基于cocos2d-iphone框架,聚焦于创建一个20层的魔塔游戏。cocos2d-iphone是Cocos2D游戏引擎的iOS版本,它为开发者提供了丰富的图形、...
总之,cocos2d-iphone之魔塔20层第八部分的教程将涵盖游戏开发的多个方面,包括但不限于对象和场景的管理、用户交互、性能优化、数据持久化以及调试技术。通过深入学习和实践,开发者可以掌握创建类似“魔塔20层”...
《cocos2d-iphone之魔塔20层第三部分》是针对移动平台,特别是iPhone设备上使用cocos2d游戏引擎开发的一款经典游戏——魔塔的教程。在这个教程中,我们将深入探讨如何利用cocos2d-iphone框架构建一个具有20层关卡的...
《cocos2d-iphone之魔塔20层第九部分》是针对iOS平台的游戏开发教程,专注于使用cocos2d-iPhone框架制作的一款经典游戏——魔塔的开发过程。cocos2d-iPhone是一个强大的2D游戏开发框架,它基于C++和Objective-C,为...
在本教程中,我们将深入探讨如何使用Cocos2d-iPhone框架开发一款名为“魔塔20层”的游戏。Cocos2d-iPhone是一个广泛应用于iOS平台的2D游戏开发库,它提供了一系列强大的功能,如图形渲染、动画处理、物理引擎支持...
《cocos2d-iphone2.0之魔塔20层》是一款基于Cocos2D-iPhone 2.0框架开发的20层魔塔游戏。Cocos2D-iPhone是一个开源的游戏开发库,它是Cocos2D项目的一个分支,专为iOS平台设计,提供了丰富的2D图形渲染和游戏开发...
《cocos2d-iphone 游戏码源 魔塔20层》是一个基于Cocos2D-iPhone的游戏开发项目,旨在实现一款名为“魔塔20层”的经典策略角色扮演游戏。Cocos2D-iPhone是Cocos2D的一个分支,是一个用于创建2D游戏、演示和其他图形...
【cocos2d-x】是基于C++的开源游戏开发框架,它被广泛用于创建2D游戏、动画以及其他视觉互动内容。cocos2d-x支持多平台开发,包括iOS、Android、Windows等,使得开发者可以编写一次代码,到处运行。 【xcode】是...
【cocos2d-x】是基于C++的开源游戏开发框架,主要用于2D游戏、交互式应用程序和实时视觉效果的开发。它支持多种平台,包括iOS、Android、Windows以及Mac等。cocos2d-x提供了丰富的API接口,使得开发者可以方便地进行...
Cocos2d-x是一个基于C++的2D游戏引擎,它源于cocos2d-iphone,并扩展到支持Android、iOS、Windows等多个平台。它提供了一套完整的2D图形渲染、动画、物理引擎、音频处理、资源管理等功能,使得开发者能够快速构建高...