cocos2d iphone之魔塔20層第五部分

2021-08-27 09:50:51 字數 4101 閱讀 5508

這部分教程源**連線

這一章我們就要開始在game01.m檔案中canmoveto: 方法中的if迴圈中添

加相應的事件了,我在製作地圖時圖塊都設定了其屬性如圖:

這裡我就要獲取其屬性值

nsdictionary *props = [self.curtitlemap propertiesforgid:enemy_tilegid];

nsstring *value = [props valueforkey:@"enemy"];

int type = [value intvalue];

通過獲取到的屬性值來判斷是那一類怪物,這裡還得再新增兩個類enemy 和 monster

為了有重點的講解這裡我就先不介紹這兩個類了。**如下:

enemy.h**

#import #import "cocos2d.h"

@inte***ce enemy : ccsprite

//怪物編號

@property (nonatomic,assign) int enemyid;

//怪物名

@property (nonatomic,retain) nsstring *name;

//血量

@property (nonatomic,assign) int hp;

//攻擊

@property (nonatomic,assign) int attack;

//防禦

@property (nonatomic,assign) int defense;

//金幣

@property (nonatomic,assign) int coin;

//經驗

@property (nonatomic,assign) int experience;

//怪物行走動畫

@property (nonatomic,retain) ccanimation *walkaction;

-(enemy*) initwithemeny:(enemy*) copyform;

@end

enemy.m**

#import "enemy.h"

@implementation enemy

@synthesize enemyid;

@synthesize name;

@synthesize hp;

@synthesize attack;

@synthesize defense;

@synthesize coin;

@synthesize experience;

@synthesize walkaction;

-(id) copywithzone:(nszone *)zone

-(enemy*) initwithemeny:(enemy *)copyform

return self;

}@end

monster.h**

#import #import "cocos2d.h"

#import "enemy.h"

@inte***ce monster : enemy

+(id)initwith:(int)typeid;

@end

monster.m**

#import "monster.h"

@implementation monster

+(id)initwith:(int)typeid

enemy.enemyid = typeid;

enemy.name = name;

enemy.hp = hp;

enemy.attack = attack;

enemy.defense = defense;

enemy.coin = coin;

enemy.experience = experience;

}return enemy;

}@end

這裡面的有怪物引數我自己修改了一部分。

根據獲取到的屬性值來例項化響應的怪物**如下:

selenemy:當前選中怪物 ,應為要在其它方法裡呼叫這個怪物的引數所以這裡定義了乙個屬性。

這樣我們已經例項化了怪物,那麼接下來就要新增怪物的打鬥介面了在打鬥之前呢我們要判斷

是否能夠打過當前怪物所以再接著新增如下**:

self.selenemy = enemy;

int enemyhp,_herohp;

enemyhp = enemy.hp;

_herohp = _hero.hp;

if (_hero.attack > enemy.defense)

}} while (enemyhp >0 && _herohp >0);

}if (enemyhp <=0 )

這裡我沒還要再新增乙個建立打鬥場景的方法creatfightscene。

-(void)creatfightscene

寫到這裡我們還得再新增乙個類fightlayer ,用於建立戰鬥場景,通過敵人的編號來建立相應

的場景。

fightlayer.h**

#import #import "cocos2d.h"

@class hero;

@class enemy;

@inte***ce fightlayer : cclayer

-(id)initwith:(int) type;

@end

fightlayer.m**

#import "fightlayer.h"

#import "enemy.h"

#import "monster.h"

#import "hero.h"

#import "herohp.h"

@implementation fightlayer

-(id)initwith:(int)type

return self;

}-(void)update

else

[enemyhplable setstring:[nsstring stringwithformat:@"生命 %i",selenemy.hp]];

[herohplable setstring:[nsstring stringwithformat:@"生命 %i",hero.hp]];

}}@end

這裡我只講一下更新方法裡面的**,

if (selenemy.hp <= 0) 

這個是判斷敵人是否死亡如果死亡則呼叫父節點消除敵人的方法,並把自己從父場景中消除

這個時候我們就要在game01中新增removeenemy方法。

-(void)removeenemy

好了到這裡我們的勇士就可以和怪物打鬥了

還有乙個問題就是canmove這個變數主要就是控制勇士是否可以移動,在很多地方都有用到

前面updatamove方法裡要新增乙個控制,否則有時候怪物就消除不掉,需要新增的**:

新增這樣乙個判斷就ok了。

完成之後遊戲截圖

Cocos2D iPhone開發思考

主頁 最近看了 ios 5 cocos2d遊戲開發實戰 第2版 這本書,對cocos2d這款遊戲引擎產生了濃厚的興趣。由於本書並沒有對cocos2d的前世今生做明確的交代,出於對cocos2d遊戲引擎的喜愛,我在網際網路搜尋了cocos2d相關的歷史,也看了其作者ricardo自己對cocos2d的...

關於cocos2d iphone小總結

1.導演通常只有乙個,因此這個物件是單例 signleton cocos2d iphone框架已經預定義了該例項,不需建立,我們直接使用就可以。2.director 物件管理場景的方法主要有以下幾個 1.主程式啟勱,顯示第乙個場景的方法 void runwithscene scene scene 2...

cocos2d iphone之魔塔20層第五部分

這部分教程源 連線 這一章我們就要開始在game01.m檔案中canmoveto 方法中的if迴圈中添 加相應的事件了,我在製作地圖時圖塊都設定了其屬性如圖 這裡我就要獲取其屬性值 nsdictionary props self.curtitlemap propertiesforgid enemy ...