原文链接
昨天我们的勇士可以穿越楼层了,但是我们的游戏界面还不够“生动”,接下来我们就要
添加一些代码使其“生动”起来。
这部分代码不多但是却能让地图上的怪物都动来,那么就让我们来添加一下这部分代
码吧,这部分代码需要添加到TitledMap.m中titledMapAnalytic方法中if(heroPoint_tileGid)
循环的下面如图:
- if (enemy_tileGid)
- {
- NSDictionary *props = [self propertiesForGID:enemy_tileGid];
- NSString *value = [props valueForKey:@"enemy"];
- int type = [value intValue];
- CCTexture2D *Texture = [[CCTextureCache sharedTextureCache] addImage:@"enemy.png"];
- CCSpriteFrame *frame0 ,*frame1,*frame2,*frame3;
- //第二个参数表示显示区域的x, y, width, height,根据type来确定显示的y坐标
- frame0 = [CCSpriteFrame frameWithTexture:Texture rect:CGRectMake(32*0, type*32, 32, 32)];
- frame1 = [CCSpriteFrame frameWithTexture:Texture rect:CGRectMake(32*1, type*32, 32, 32)];
- frame2 = [CCSpriteFrame frameWithTexture:Texture rect:CGRectMake(32*2, type*32, 32, 32)];
- frame3 = [CCSpriteFrame frameWithTexture:Texture rect:CGRectMake(32*3, type*32, 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.2f];
- CCAnimate *animate = [CCAnimate actionWithAnimation:animation];
- CCSequence *seq = [CCSequence actions: animate,nil];
- [[self.enemy tileAt:towerLoc]runAction:[CCRepeatForever actionWithAction: seq]];
- }
if (enemy_tileGid) { NSDictionary *props = [self propertiesForGID:enemy_tileGid]; NSString *value = [props valueForKey:@"enemy"]; int type = [value intValue]; CCTexture2D *Texture = [[CCTextureCache sharedTextureCache] addImage:@"enemy.png"]; CCSpriteFrame *frame0 ,*frame1,*frame2,*frame3; //第二个参数表示显示区域的x, y, width, height,根据type来确定显示的y坐标 frame0 = [CCSpriteFrame frameWithTexture:Texture rect:CGRectMake(32*0, type*32, 32, 32)]; frame1 = [CCSpriteFrame frameWithTexture:Texture rect:CGRectMake(32*1, type*32, 32, 32)]; frame2 = [CCSpriteFrame frameWithTexture:Texture rect:CGRectMake(32*2, type*32, 32, 32)]; frame3 = [CCSpriteFrame frameWithTexture:Texture rect:CGRectMake(32*3, type*32, 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.2f]; CCAnimate *animate = [CCAnimate actionWithAnimation:animation]; CCSequence *seq = [CCSequence actions: animate,nil]; [[self.enemy tileAt:towerLoc]runAction:[CCRepeatForever actionWithAction: seq]]; }
这个跟之前的开门动画加载方式差不多我就不多讲了。运行一下游戏,你就会发现我们的怪物
动起来了,这样看着是不是更有感觉了!
下面让我们随着游戏一直来到三楼,直接到商店你会发现商店没有任何响应,接下来我们就要
开始添加商店的响应事件了,不过在这之前我们要先把我们的商店界面设计好。代码:
ShopLayer.h文件内容
- #import <Foundation/Foundation.h>
- #import "cocos2d.h"
- ShopLayer : CCLayer
- {
- CCLabelTTF *introduction;
- CCLabelTTF *addHP;
- CCLabelTTF *addAttack;
- CCLabelTTF *addDefense;
- CCLabelTTF *exitShop;
- CCLabelTTF *enter;
- }
- @property (nonatomic,assign)int curHP;
- @property (nonatomic,assign)int curAttack;
- @property (nonatomic,assign)int curDefense;
- @property (nonatomic,assign)int curCoin;
- //当前选中商店编号
- @property (nonatomic,assign) int selID;
- //是否在购买状态
- @property (nonatomic,assign) int isOnShop;
- @property (nonatomic,retain) CCSprite *selSprite;
- -(id)initWithID:(int) shopID;
- @end
#importShopLayer.m文件内容#import "cocos2d.h"@interface ShopLayer : CCLayer{ CCLabelTTF *introduction; CCLabelTTF *addHP; CCLabelTTF *addAttack; CCLabelTTF *addDefense; CCLabelTTF *exitShop; CCLabelTTF *enter;}@property (nonatomic,assign)int curHP;@property (nonatomic,assign)int curAttack;@property (nonatomic,assign)int curDefense;@property (nonatomic,assign)int curCoin;//当前选中商店编号@property (nonatomic,assign) int selID;//是否在购买状态@property (nonatomic,assign) int isOnShop;@property (nonatomic,retain) CCSprite *selSprite; -(id)initWithID:(int) shopID;@end
- #import "ShopLayer.h"
- #import "Hero.h"
- #import "Herohp.h"
- @implementation ShopLayer
- @synthesize curHP;
- @synthesize curCoin;
- @synthesize curAttack;
- @synthesize curDefense;
- @synthesize selSprite;
- @synthesize isOnShop;
- @synthesize selID;
- -(void)viewInit
- {
- //获取屏幕大小
- CGSize size = [[CCDirector sharedDirector] winSize];
- self.selSprite = [CCSprite spriteWithFile:@"logo_select.png"];
- self.selSprite.scaleX = 2.0;
- id blink = [CCBlink actionWithDuration:2 blinks:2];
- [self.selSprite runAction:[CCRepeatForever actionWithAction:blink]];
- self.selID = 0;
- //背景
- CCTMXTiledMap *background = [CCTMXTiledMap tiledMapWithTMXFile:@"shopbg.tmx"];
- background.scale = 2.0;
- background.position = ccp(40, size.height / 2 - 200);
- [self addChild:background];
- //介绍标签
- introduction = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"勇士你好,这里是商店你花%d金币即可选择一下任意一项",self.curCoin] dimensions:CGSizeMake(500, 100) alignment:UITextAlignmentCenter fontName:@"Verdana-Bold" fontSize:32];
- introduction.position = ccp(350, size.height - 165);
- [self addChild:introduction];
- //加血标签
- addHP = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"增加%d血量",self.curHP] fontName:@"Verdana-Bold" fontSize:30];
- addHP.position = ccp(350, size.height - 260);
- [self addChild:addHP];
- //加攻标签
- addAttack = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"增加%d攻击",self.curAttack] fontName:@"Verdana-Bold" fontSize:30];
- addAttack.position = ccp(350, size.height - 320);
- [self addChild:addAttack];
- //加防标签
- addDefense = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"增加%d防御",self.curDefense] fontName:@"Verdana-Bold" fontSize:30];
- addDefense.position = ccp(350, size.height - 380);
- [self addChild:addDefense];
- //离开商店
- exitShop = [[CCLabelTTF alloc] initWithString:@"离开商店" fontName:@"Verdana-Bold" fontSize:30];
- exitShop.position = ccp(350, size.height - 440);
- [self addChild:exitShop];
- //确定
- enter = [[CCLabelTTF alloc] initWithString:@"确定" fontName:@"Verdana-Bold" fontSize:30];
- enter.position = ccp(350,size.height - 500);
- [self addChild:enter];
- [self addChild:self.selSprite];
- self.selSprite.position = addHP.position;
- }
- -(id)initWithID:(int) shopID
- {
- if ((self = [super init]))
- {
- if (shopID == 1)
- {
- self.curCoin = 25;
- self.curAttack = 4;
- self.curDefense = 4;
- self.curHP = 800;
- }
- else
- {
- self.curCoin = 100;
- self.curAttack = 20;
- self.curDefense = 20;
- self.curHP = 4000;
- }
- [self viewInit];
- }
- return self;
- }
- @end
#import "ShopLayer.h"#import "Hero.h"#import "Herohp.h"@implementation ShopLayer@synthesize curHP;@synthesize curCoin;@synthesize curAttack;@synthesize curDefense;@synthesize selSprite;@synthesize isOnShop;@synthesize selID;-(void)viewInit{ //获取屏幕大小 CGSize size = [[CCDirector sharedDirector] winSize]; self.selSprite = [CCSprite spriteWithFile:@"logo_select.png"]; self.selSprite.scaleX = 2.0; id blink = [CCBlink actionWithDuration:2 blinks:2]; [self.selSprite runAction:[CCRepeatForever actionWithAction:blink]]; self.selID = 0; //背景 CCTMXTiledMap *background = [CCTMXTiledMap tiledMapWithTMXFile:@"shopbg.tmx"]; background.scale = 2.0; background.position = ccp(40, size.height / 2 - 200); [self addChild:background]; //介绍标签 introduction = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"勇士你好,这里是商店你花%d金币即可选择一下任意一项",self.curCoin] dimensions:CGSizeMake(500, 100) alignment:UITextAlignmentCenter fontName:@"Verdana-Bold" fontSize:32]; introduction.position = ccp(350, size.height - 165); [self addChild:introduction]; //加血标签 addHP = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"增加%d血量",self.curHP] fontName:@"Verdana-Bold" fontSize:30]; addHP.position = ccp(350, size.height - 260); [self addChild:addHP]; //加攻标签 addAttack = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"增加%d攻击",self.curAttack] fontName:@"Verdana-Bold" fontSize:30]; addAttack.position = ccp(350, size.height - 320); [self addChild:addAttack]; //加防标签 addDefense = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"增加%d防御",self.curDefense] fontName:@"Verdana-Bold" fontSize:30]; addDefense.position = ccp(350, size.height - 380); [self addChild:addDefense]; //离开商店 exitShop = [[CCLabelTTF alloc] initWithString:@"离开商店" fontName:@"Verdana-Bold" fontSize:30]; exitShop.position = ccp(350, size.height - 440); [self addChild:exitShop]; //确定 enter = [[CCLabelTTF alloc] initWithString:@"确定" fontName:@"Verdana-Bold" fontSize:30]; enter.position = ccp(350,size.height - 500); [self addChild:enter]; [self addChild:self.selSprite]; self.selSprite.position = addHP.position;}-(id)initWithID:(int) shopID{ if ((self = [super init])) { if (shopID == 1) { self.curCoin = 25; self.curAttack = 4; self.curDefense = 4; self.curHP = 800; } else { self.curCoin = 100; self.curAttack = 20; self.curDefense = 20; self.curHP = 4000; } [self viewInit]; } return self;}@end这部分代码我就不多讲了,下面我们就开始添加Game01.m中调用部分和操作控制
首先我们要在if(other_tileGid)方法中添加以下代码:
- NSDictionary *props = [self.curtitleMap propertiesForGID:other_tileGid];
- NSString *value = [props valueForKey:@"shop"];
- int type = [value intValue];
- if (type)
- {
- _hero.isFighting = YES;
- shop = [[ShopLayer alloc] initWithID:type];
- shop.isOnShop = YES;
- [self addChild:shop];
- }
NSDictionary *props = [self.curtitleMap propertiesForGID:other_tileGid];NSString *value = [props valueForKey:@"shop"];int type = [value intValue];if (type) { _hero.isFighting = YES; shop = [[ShopLayer alloc] initWithID:type]; shop.isOnShop = YES; [self addChild:shop];}当我们在购买状态时是不能进行除了商店以外的操作的,所以我把勇士的战斗状态赋值为YES
在我们这个游戏中是有两个商店的,所以我们在初始化商店的时候通过商店编号来识别。
到这里我们的商店界面出现了,下面就要开始添加商店操作了,这部分代码需要添加到
Game01.m文件的触摸响应事件中去
- if (shop.isOnShop)
- {
- for (int i = 0; i <= 4; i++)
- {
- CGRect Rect1 = CGRectMake(200,
- size.height - 290 - i*60,
- 400,
- 60);
- //检测触点是否在控件区
- if (CGRectIntersectsRect(Rect, Rect1))
- {
- if (i == 4)
- {
- if (herohp.Coin >= shop.curCoin)
- {
- switch (shop.selID)
- {
- case 0:
- _hero.HP += shop.curHP;
- [herohp updateHeroHp];
- break;
- case 1:
- _hero.Attack += shop.curAttack;
- [herohp updateHeroAttack];
- break;
- case 2:
- _hero.Defense += shop.curDefense;
- [herohp updateHeroDefense];
- break;
- default:
- break;
- }
- herohp.Coin -= shop.curCoin;
- [herohp updateCoin];
- }
- }
- else if (i == 3)
- {
- _hero.isFighting = NO;
- shop.isOnShop = NO;
- [self removeChild:shop cleanup:YES];
- }
- else
- shop.selID = i;
- if (i<3)
- {
- shop.selSprite.position = ccp(350, size.height - 260 - i*60);
- }
- }
- }
- }
if (shop.isOnShop) { for (int i = 0; i <= 4; i++) { CGRect Rect1 = CGRectMake(200, size.height - 290 - i*60, 400, 60); //检测触点是否在控件区 if (CGRectIntersectsRect(Rect, Rect1)) { if (i == 4) { if (herohp.Coin >= shop.curCoin) { switch (shop.selID) { case 0: _hero.HP += shop.curHP; [herohp updateHeroHp]; break; case 1: _hero.Attack += shop.curAttack; [herohp updateHeroAttack]; break; case 2: _hero.Defense += shop.curDefense; [herohp updateHeroDefense]; break; default: break; } herohp.Coin -= shop.curCoin; [herohp updateCoin]; } } else if (i == 3) { _hero.isFighting = NO; shop.isOnShop = NO; [self removeChild:shop cleanup:YES]; } else shop.selID = i; if (i<3) { shop.selSprite.position = ccp(350, size.height - 260 - i*60); } } } }终于我们的商店可以使用了,但是一个问题来了我们没有金币啊,金币是打怪的时候得到的
那么我们就要在消除怪物的时候更新一下金币和经验了代码如下:
- canmove = YES;
- herohp.Coin += self.selenemy.Coin;
- herohp.Experience += self.selenemy.Experience;
- [herohp updateCoin];
- [herohp updateExperience];
canmove = YES; herohp.Coin += self.selenemy.Coin; herohp.Experience += self.selenemy.Experience; [herohp updateCoin]; [herohp updateExperience];这样我们就能够获得金币和经验了,不过为了测试方便,这里我们可以修改一些参数,
- self.HP = 10000;
- self.Attack = 1000;
- self.Defense = 1000;
self.HP = 10000; self.Attack = 1000; self.Defense = 1000;金币和经验也可以适当修改,修改过之后,让我们再次随着勇士的脚步来到5楼吧,这里
你会看到两个npc,地图左边的是神秘老人,右边的是商人,神秘老人是可以说是经验商店
在这里你可以用经验提升勇士的能力;商人是卖钥匙的,在这里你可以买到各种钥匙。
讲到这里我们又需要添加两个类Business和Buykey跟商店差不多这里我就不多讲了,直接
上代码:
Business.h代码:
- #import <Foundation/Foundation.h>
- #import "cocos2d.h"
- Business : CCLayer
- {
- CCLabelTTF *introduction;
- CCLabelTTF *addGrade;
- CCLabelTTF *addAttack;
- CCLabelTTF *addDefense;
- CCLabelTTF *exitShop;
- CCLabelTTF *enter;
- }
- @property (nonatomic,assign)int curUpgrade;
- @property (nonatomic,assign)int curAttack;
- @property (nonatomic,assign)int curDefense;
- @property (nonatomic,assign)int curExperience;
- @property (nonatomic,assign)int curExperience2;
- //当前选中商店编号
- @property (nonatomic,assign) int selID;
- //是否在购买状态
- @property (nonatomic,assign) int isOnShop;
- @property (nonatomic,retain) CCSprite *selSprite;
- -(id)initWithID:(int) shopID;
- @end
#importBusiness.m代码:#import "cocos2d.h"@interface Business : CCLayer { CCLabelTTF *introduction; CCLabelTTF *addGrade; CCLabelTTF *addAttack; CCLabelTTF *addDefense; CCLabelTTF *exitShop; CCLabelTTF *enter;}@property (nonatomic,assign)int curUpgrade;@property (nonatomic,assign)int curAttack;@property (nonatomic,assign)int curDefense;@property (nonatomic,assign)int curExperience;@property (nonatomic,assign)int curExperience2;//当前选中商店编号@property (nonatomic,assign) int selID;//是否在购买状态@property (nonatomic,assign) int isOnShop;@property (nonatomic,retain) CCSprite *selSprite; -(id)initWithID:(int) shopID;@end
- #import "Business.h"
- @implementation Business
- @synthesize curUpgrade;
- @synthesize curExperience;
- @synthesize curExperience2;
- @synthesize curAttack;
- @synthesize curDefense;
- @synthesize selSprite;
- @synthesize isOnShop;
- @synthesize selID;
- -(void)viewInit
- {
- //获取屏幕大小
- CGSize size = [[CCDirector sharedDirector] winSize];
- self.selSprite = [CCSprite spriteWithFile:@"logo_select.png"];
- self.selSprite.scaleX = 2.0;
- id blink = [CCBlink actionWithDuration:2 blinks:2];
- [self.selSprite runAction:[CCRepeatForever actionWithAction:blink]];
- self.selID = 0;
- //背景
- CCTMXTiledMap *background = [CCTMXTiledMap tiledMapWithTMXFile:@"shopbg.tmx"];
- background.scale = 2.0;
- background.position = ccp(35, size.height / 2 - 200);
- [self addChild:background];
- //介绍标签
- introduction = [[CCLabelTTF alloc] initWithString:@"勇士你好,你可以用经验值提升自己的能力" fontName:@"Verdana-Bold" fontSize:30];
- introduction = [[CCLabelTTF alloc] initWithString:@"勇士你好,你可以用经验值提升自己的能力" dimensions:CGSizeMake(500, 100) alignment:UITextAlignmentCenter fontName:@"Verdana-Bold" fontSize:32];
- introduction.position = ccp(350, size.height - 200);
- [self addChild:introduction];
- //加血标签
- addGrade = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"%d经验提升%d级",self.curExperience,self.curUpgrade] fontName:@"Verdana-Bold" fontSize:30];
- addGrade.position = ccp(350, size.height - 260);
- [self addChild:addGrade];
- //加攻标签
- addAttack = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"%d经验增加%d攻击",self.curExperience2,self.curAttack] fontName:@"Verdana-Bold" fontSize:30];
- addAttack.position = ccp(350, size.height - 320);
- [self addChild:addAttack];
- //加防标签
- addDefense = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"%d经验增加%d防御",self.curExperience2,self.curDefense] fontName:@"Verdana-Bold" fontSize:30];
- addDefense.position = ccp(350, size.height - 380);
- [self addChild:addDefense];
- //离开商店
- exitShop = [[CCLabelTTF alloc] initWithString:@"离开商店" fontName:@"Verdana-Bold" fontSize:30];
- exitShop.position = ccp(350, size.height - 440);
- [self addChild:exitShop];
- //确定
- enter = [[CCLabelTTF alloc] initWithString:@"确定" fontName:@"Verdana-Bold" fontSize:30];
- enter.position = ccp(350,size.height - 500);
- [self addChild:enter];
- [self addChild:self.selSprite];
- self.selSprite.position = addGrade.position;
- }
- -(id)initWithID:(int) shopID
- {
- if ((self = [super init]))
- {
- if (shopID == 4)
- {
- self.curUpgrade = 1;
- self.curAttack = 5;
- self.curDefense = 5;
- self.curExperience = 100;
- self.curExperience2 = 30;
- }
- else
- {
- self.curUpgrade = 3;
- self.curAttack = 17;
- self.curDefense = 17;
- self.curExperience = 270;
- self.curExperience2 = 90;
- }
- [self viewInit];
- }
- return self;
- }
- @end
#import "Business.h"@implementation Business@synthesize curUpgrade;@synthesize curExperience;@synthesize curExperience2;@synthesize curAttack;@synthesize curDefense;@synthesize selSprite;@synthesize isOnShop;@synthesize selID;-(void)viewInit{ //获取屏幕大小 CGSize size = [[CCDirector sharedDirector] winSize]; self.selSprite = [CCSprite spriteWithFile:@"logo_select.png"]; self.selSprite.scaleX = 2.0; id blink = [CCBlink actionWithDuration:2 blinks:2]; [self.selSprite runAction:[CCRepeatForever actionWithAction:blink]]; self.selID = 0; //背景 CCTMXTiledMap *background = [CCTMXTiledMap tiledMapWithTMXFile:@"shopbg.tmx"]; background.scale = 2.0; background.position = ccp(35, size.height / 2 - 200); [self addChild:background]; //介绍标签 introduction = [[CCLabelTTF alloc] initWithString:@"勇士你好,你可以用经验值提升自己的能力" fontName:@"Verdana-Bold" fontSize:30]; introduction = [[CCLabelTTF alloc] initWithString:@"勇士你好,你可以用经验值提升自己的能力" dimensions:CGSizeMake(500, 100) alignment:UITextAlignmentCenter fontName:@"Verdana-Bold" fontSize:32]; introduction.position = ccp(350, size.height - 200); [self addChild:introduction]; //加血标签 addGrade = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"%d经验提升%d级",self.curExperience,self.curUpgrade] fontName:@"Verdana-Bold" fontSize:30]; addGrade.position = ccp(350, size.height - 260); [self addChild:addGrade]; //加攻标签 addAttack = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"%d经验增加%d攻击",self.curExperience2,self.curAttack] fontName:@"Verdana-Bold" fontSize:30]; addAttack.position = ccp(350, size.height - 320); [self addChild:addAttack]; //加防标签 addDefense = [[CCLabelTTF alloc] initWithString:[NSString stringWithFormat:@"%d经验增加%d防御",self.curExperience2,self.curDefense] fontName:@"Verdana-Bold" fontSize:30]; addDefense.position = ccp(350, size.height - 380); [self addChild:addDefense]; //离开商店 exitShop = [[CCLabelTTF alloc] initWithString:@"离开商店" fontName:@"Verdana-Bold" fontSize:30]; exitShop.position = ccp(350, size.height - 440); [self addChild:exitShop]; //确定 enter = [[CCLabelTTF alloc] initWithString:@"确定" fontName:@"Verdana-Bold" fontSize:30]; enter.position = ccp(350,size.height - 500); [self addChild:enter]; [self addChild:self.selSprite]; self.selSprite.position = addGrade.position;}-(id)initWithID:(int) shopID{ if ((self = [super init])) { if (shopID == 4) { self.curUpgrade = 1; self.curAttack = 5; self.curDefense = 5; self.curExperience = 100; self.curExperience2 = 30; } else { self.curUpgrade = 3; self.curAttack = 17; self.curDefense = 17; self.curExperience = 270; self.curExperience2 = 90; } [self viewInit]; } return self;}@endBuykey.h代码:
- #import <Foundation/Foundation.h>
- #import "cocos2d.h"
- Buykey : CCLayer
- {
- CCLabelTTF *introduction;
- CCLabelTTF *Key1Lable;
- CCLabelTTF *Key2Lable;
- CCLabelTTF *Key3Lable;
- CCLabelTTF *exitShop;
- CCLabelTTF *enter;
- }
- @property (nonatomic,assign)int yellowKeyPrice;
- @property (nonatomic,assign)int blueKeyPrice;
- @property (nonatomic,assign)int redKeyPrice;
- //当前选中商店编号
- @property (nonatomic,assign) int selID;
- //是否在购买状态
- @property (nonatomic,assign) int isOnShop;
- @property (nonatomic,retain) CCSprite *selSprite;
- -(void)viewInit:(int) shopID;
- @end
#import#import "cocos2d.h"@interface Buykey : CCLayer { CCLabelTTF *introduction; CCLabelTTF *Key1Lable; CCLabelTTF *Key2Lable; CCLabelTTF *Key3Lable; CCLabelTTF *exitShop; CCLabelTTF *enter;}@property (nonatomic,assign)int yellowKeyPrice;@property (nonatomic,assign)int blueKeyPrice;@property (nonatomic,assign)int redKeyPrice;//当前选中商店编号@property (nonatomic,assign) int selID;//是否在购买状态@property (nonatomic,assign) int isOnShop;@property (nonatomic,retain) CCSprite *selSprite; -(void)viewInit:(int) shopID;@end
Buykey.m代码:
- #import "Buykey.h"
- @implementation Buykey
- @synthesize yellowKeyPrice;
- @synthesize blueKeyPrice;
- @synthesize redKeyPrice;
- @synthesize selSprite;
- @synthesize isOnShop;
- @synthesize selID;
- -(void)viewInit:(int) shopID
- {
- if (shopID == 5)
- {
- self.yellowKeyPrice = 10;
- self.blueKeyPrice = 50;
- self.redKeyPrice = 100;
- [introduction setString:@"勇士你好,我这里有各种钥匙如果你有钱我可以卖给你"];
- }
- else
- {
- self.yellowKeyPrice = 5;
- self.blueKeyPrice = 25;
- self.redKeyPrice = 50;
- [introduction setString:@"勇士你好,如果你有多余的钥你可以卖给我"];
- }
- [Key1Lable setString:[NSString stringWithFormat:@"黄钥匙(%d)",self.yellowKeyPrice]];
- [Key2Lable setString:[NSString stringWithFormat:@"蓝钥匙(%d)",self.blueKeyPrice]];
- [Key3Lable setString:[NSString stringWithFormat:@"红钥匙(%d)",self.redKeyPrice]];
- [self removeChild:self.selSprite cleanup:YES];
- id blink = [CCBlink actionWithDuration:2 blinks:2];
- [self.selSprite runAction:[CCRepeatForever actionWithAction:blink]];
- [self addChild:self.selSprite];
- self.selSprite.position = Key1Lable.position;
- }
- -(id)init
- {
- if ((self = [super init]))
- {
- //获取屏幕大小
- CGSize size = [[CCDirector sharedDirector] winSize];
- self.selSprite = [CCSprite spriteWithFile:@"logo_select.png"];
- self.selSprite.scaleX = 2.0;
- id blink = [CCBlink actionWithDuration:2 blinks:2];
- [self.selSprite runAction:[CCRepeatForever actionWithAction:blink]];
- self.selID = 0;
- //背景
- CCTMXTiledMap *background = [CCTMXTiledMap tiledMapWithTMXFile:@"shopbg.tmx"];
- background.scale = 2.0;
- background.position = ccp(35, size.height / 2 - 200);
- [self addChild:background];
- //介绍标签
- //introduction = [[CCLabelTTF alloc] initWithString:@"勇士你好,我这里有各种钥匙如果你有钱我可以卖给你" fontName:@"Verdana-Bold" fontSize:30];
- introduction = [[CCLabelTTF alloc] initWithString:@"勇士你好,我这里有各种钥匙如果你有钱我可以卖给你" dimensions:CGSizeMake(500, 100) alignment:UITextAlignmentCenter fontName:@"Verdana-Bold" fontSize:32];
- introduction.position = ccp(350, size.height - 200);
- [self addChild:introduction];
- //黄钥匙标签
- Key1Lable = [[CCLabelTTF alloc] initWithString:@"黄钥匙(10)" fontName:@"Verdana-Bold" fontSize:30];
- Key1Lable.position = ccp(350, size.height - 260);
- [self addChild:Key1Lable];
- //蓝钥匙标签
- Key2Lable = [[CCLabelTTF alloc] initWithString:@"蓝钥匙(50)" fontName:@"Verdana-Bold" fontSize:30];
- Key2Lable.position = ccp(350, size.height - 320);
- [self addChild:Key2Lable];
- //红钥匙标签
- Key3Lable = [[CCLabelTTF alloc] initWithString:@"红钥匙(100)" fontName:@"Verdana-Bold" fontSize:30];
- Key3Lable.position = ccp(350, size.height - 380);
- [self addChild:Key3Lable];
- //离开商店
- exitShop = [[CCLabelTTF alloc] initWithString:@"离开商店" fontName:@"Verdana-Bold" fontSize:30];
- exitShop.position = ccp(350, size.height - 440);
- [self addChild:exitShop];
- //确定
- enter = [[CCLabelTTF alloc] initWithString:@"确定" fontName:@"Verdana-Bold" fontSize:30];
- enter.position = ccp(350,size.height - 500);
- [self addChild:enter];
- [self addChild:self.selSprite];
- self.selSprite.position = Key1Lable.position;
- }
- return self;
- }
- @end
#import "Buykey.h"@implementation Buykey@synthesize yellowKeyPrice;@synthesize blueKeyPrice;@synthesize redKeyPrice;@synthesize selSprite;@synthesize isOnShop;@synthesize selID;-(void)viewInit:(int) shopID{ if (shopID == 5) { self.yellowKeyPrice = 10; self.blueKeyPrice = 50; self.redKeyPrice = 100; [introduction setString:@"勇士你好,我这里有各种钥匙如果你有钱我可以卖给你"]; } else { self.yellowKeyPrice = 5; self.blueKeyPrice = 25; self.redKeyPrice = 50; [introduction setString:@"勇士你好,如果你有多余的钥你可以卖给我"]; } [Key1Lable setString:[NSString stringWithFormat:@"黄钥匙(%d)",self.yellowKeyPrice]]; [Key2Lable setString:[NSString stringWithFormat:@"蓝钥匙(%d)",self.blueKeyPrice]]; [Key3Lable setString:[NSString stringWithFormat:@"红钥匙(%d)",self.redKeyPrice]]; [self removeChild:self.selSprite cleanup:YES]; id blink = [CCBlink actionWithDuration:2 blinks:2]; [self.selSprite runAction:[CCRepeatForever actionWithAction:blink]]; [self addChild:self.selSprite]; self.selSprite.position = Key1Lable.position;}-(id)init{ if ((self = [super init])) { //获取屏幕大小 CGSize size = [[CCDirector sharedDirector] winSize]; self.selSprite = [CCSprite spriteWithFile:@"logo_select.png"]; self.selSprite.scaleX = 2.0; id blink = [CCBlink actionWithDuration:2 blinks:2]; [self.selSprite runAction:[CCRepeatForever actionWithAction:blink]]; self.selID = 0; //背景 CCTMXTiledMap *background = [CCTMXTiledMap tiledMapWithTMXFile:@"shopbg.tmx"]; background.scale = 2.0; background.position = ccp(35, size.height / 2 - 200); [self addChild:background]; //介绍标签 //introduction = [[CCLabelTTF alloc] initWithString:@"勇士你好,我这里有各种钥匙如果你有钱我可以卖给你" fontName:@"Verdana-Bold" fontSize:30]; introduction = [[CCLabelTTF alloc] initWithString:@"勇士你好,我这里有各种钥匙如果你有钱我可以卖给你" dimensions:CGSizeMake(500, 100) alignment:UITextAlignmentCenter fontName:@"Verdana-Bold" fontSize:32]; introduction.position = ccp(350, size.height - 200); [self addChild:introduction]; //黄钥匙标签 Key1Lable = [[CCLabelTTF alloc] initWithString:@"黄钥匙(10)" fontName:@"Verdana-Bold" fontSize:30]; Key1Lable.position = ccp(350, size.height - 260); [self addChild:Key1Lable]; //蓝钥匙标签 Key2Lable = [[CCLabelTTF alloc] initWithString:@"蓝钥匙(50)" fontName:@"Verdana-Bold" fontSize:30]; Key2Lable.position = ccp(350, size.height - 320); [self addChild:Key2Lable]; //红钥匙标签 Key3Lable = [[CCLabelTTF alloc] initWithString:@"红钥匙(100)" fontName:@"Verdana-Bold" fontSize:30]; Key3Lable.position = ccp(350, size.height - 380); [self addChild:Key3Lable]; //离开商店 exitShop = [[CCLabelTTF alloc] initWithString:@"离开商店" fontName:@"Verdana-Bold" fontSize:30]; exitShop.position = ccp(350, size.height - 440); [self addChild:exitShop]; //确定 enter = [[CCLabelTTF alloc] initWithString:@"确定" fontName:@"Verdana-Bold" fontSize:30]; enter.position = ccp(350,size.height - 500); [self addChild:enter]; [self addChild:self.selSprite]; self.selSprite.position = Key1Lable.position; } return self;}@end好了这两个类都有了,那么就让我们添加Game01.m里面的代码吧
这次我们要添加到if(npc_tileGid)里面:
- case 4:
- business = [[Business alloc] initWithID:type];
- business.isOnShop = YES;
- [self addChild:business];
- break;
- case 5:
- [buykey viewInit:5];
- [self addChild:buykey];
- buykey.isOnShop = YES;
- break;
- case 6:
- [buykey viewInit:6];
- [self addChild:buykey];
- buykey.isOnShop = YES;
- break;
- case 7:
- business = [[Business alloc] initWithID:type];
- business.isOnShop = YES;
- [self addChild:business];
- break;
case 4: business = [[Business alloc] initWithID:type]; business.isOnShop = YES; [self addChild:business]; break;case 5: [buykey viewInit:5]; [self addChild:buykey]; buykey.isOnShop = YES; break;case 6: [buykey viewInit:6]; [self addChild:buykey]; buykey.isOnShop = YES; break;case 7: business = [[Business alloc] initWithID:type]; business.isOnShop = YES; [self addChild:business]; break;这样我们的“可用”npc又多了几个,之后我们会继续完善我们的npc,好了继续添加我们的代码:
- if (business.isOnShop)
- {
- for (int i = 0; i <= 4; i++)
- {
- CGRect Rect1 = CGRectMake(200,
- size.height - 290 - i*60,
- 400,
- 60);
- //检测触点是否在控件区
- if (CGRectIntersectsRect(Rect, Rect1))
- {
- if (i == 4)
- {
- if (herohp.Experience >= business.curExperience2)
- {
- switch (business.selID)
- {
- case 0:
- if (herohp.Experience >= business.curExperience)
- {
- _hero.HP += 1000*business.curUpgrade;
- _hero.Attack += 7*business.curUpgrade;
- _hero.Defense += 7*business.curUpgrade;
- herohp.Grade += 1;
- [herohp updateGrade];
- herohp.Experience -= business.curExperience;
- }
- break;
- case 1:
- if (herohp.Experience >= business.curExperience2)
- {
- _hero.Attack += business.curAttack;
- herohp.Experience -= business.curExperience2;
- }
- break;
- case 2:
- if (herohp.Experience >= business.curExperience2)
- {
- _hero.Defense += business.curDefense;
- herohp.Experience -= business.curExperience2;
- }
- break;
- default:
- break;
- }
- [herohp updateHeroHp];
- [herohp updateHeroAttack];
- [herohp updateHeroDefense];
- [herohp updateExperience];
- }
- }
- else if (i == 3)
- {
- _hero.isFighting = NO;
- business.isOnShop = NO;
- [self removeChild:business cleanup:YES];
- }
- else
- business.selID = i;
- if (i<3)
- {
- business.selSprite.position = ccp(350, size.height - 260 - i*60);
- }
- }
- }
- }
- if (buykey.isOnShop)
- {
- for (int i = 0; i <= 4; i++)
- {
- CGRect Rect1 = CGRectMake(200,
- size.height - 290 - i*60,
- 400,
- 60);
- //检测触点是否在控件区
- if (CGRectIntersectsRect(Rect, Rect1))
- {
- if (i == 4)
- {
- switch (buykey.selID)
- {
- case 0:
- if (buykey.yellowKeyPrice > 5)
- {
- if (herohp.Coin >= 10)
- {
- herohp.Coin -= 10;
- herohp.YellowKey += 1;
- }
- }
- else
- {
- herohp.Coin += 5;
- herohp.YellowKey -= 1;
- }
- break;
- case 1:
- if (buykey.yellowKeyPrice > 5)
- {
- if (herohp.Coin >= 50)
- {
- herohp.Coin -= 50;
- herohp.BlueKey += 1;
- }
- }
- else
- {
- herohp.Coin += 25;
- herohp.BlueKey -= 1;
- }
- break;
- case 2:
- if (buykey.yellowKeyPrice > 5)
- {
- if (herohp.Coin >= 100)
- {
- herohp.Coin -= 100;
- herohp.RedKey += 1;
- }
- }
- else
- {
- herohp.Coin += 50;
- herohp.RedKey -= 1;
- }
- break;
- default:
- break;
- }
- [herohp updateCoin];
- [herohp updateKey1];
- }
- else if (i == 3)
- {
- _hero.isFighting = NO;
- buykey.isOnShop = NO;
- [self removeChild:buykey cleanup:YES];
- }
- else
- {
- buykey.selID = i;
- }
- if (i<3)
- {
- buykey.selSprite.position = ccp(350, size.height - 260 - i*60);
- }
- }
- }
- }
if (business.isOnShop) { for (int i = 0; i <= 4; i++) { CGRect Rect1 = CGRectMake(200, size.height - 290 - i*60, 400, 60); //检测触点是否在控件区 if (CGRectIntersectsRect(Rect, Rect1)) { if (i == 4) { if (herohp.Experience >= business.curExperience2) { switch (business.selID) { case 0: if (herohp.Experience >= business.curExperience) { _hero.HP += 1000*business.curUpgrade; _hero.Attack += 7*business.curUpgrade; _hero.Defense += 7*business.curUpgrade; herohp.Grade += 1; [herohp updateGrade]; herohp.Experience -= business.curExperience; } break; case 1: if (herohp.Experience >= business.curExperience2) { _hero.Attack += business.curAttack; herohp.Experience -= business.curExperience2; } break; case 2: if (herohp.Experience >= business.curExperience2) { _hero.Defense += business.curDefense; herohp.Experience -= business.curExperience2; } break; default: break; } [herohp updateHeroHp]; [herohp updateHeroAttack]; [herohp updateHeroDefense]; [herohp updateExperience]; } } else if (i == 3) { _hero.isFighting = NO; business.isOnShop = NO; [self removeChild:business cleanup:YES]; } else business.selID = i; if (i<3) { business.selSprite.position = ccp(350, size.height - 260 - i*60); } } } } if (buykey.isOnShop) { for (int i = 0; i <= 4; i++) { CGRect Rect1 = CGRectMake(200, size.height - 290 - i*60, 400, 60); //检测触点是否在控件区 if (CGRectIntersectsRect(Rect, Rect1)) { if (i == 4) { switch (buykey.selID) { case 0: if (buykey.yellowKeyPrice > 5) { if (herohp.Coin >= 10) { herohp.Coin -= 10; herohp.YellowKey += 1; } } else { herohp.Coin += 5; herohp.YellowKey -= 1; } break; case 1: if (buykey.yellowKeyPrice > 5) { if (herohp.Coin >= 50) { herohp.Coin -= 50; herohp.BlueKey += 1; } } else { herohp.Coin += 25; herohp.BlueKey -= 1; } break; case 2: if (buykey.yellowKeyPrice > 5) { if (herohp.Coin >= 100) { herohp.Coin -= 100; herohp.RedKey += 1; } } else { herohp.Coin += 50; herohp.RedKey -= 1; } break; default: break; } [herohp updateCoin]; [herohp updateKey1]; } else if (i == 3) { _hero.isFighting = NO; buykey.isOnShop = NO; [self removeChild:buykey cleanup:YES]; } else { buykey.selID = i; } if (i<3) { buykey.selSprite.position = ccp(350, size.height - 260 - i*60); } } } }好了运行一下试试吧!
在这里我要感谢这几天大家对我的支持,你们的支持是我最大的动力!
还有请转载我文章的朋友们注意添加原文连接,谢谢!
在这里我补充一点内容就是之前的代码中钥匙商店没有初始化,我们需要在
Game01.m初始化方法中添加buykey = [[Buykey alloc] init];这样就行了。