Cocos2D:塔防游戏制作之旅(十一)

来源:互联网 发布:木工柜门半盖怎么算法 编辑:程序博客网 时间:2024/05/04 08:03

是时候放一些坏家伙来搅合一下了!

打开HelloWorldLayer.h并且添加以下代码:

// Add these instance variablesint wave;CCLabelBMFont *ui_wave_lbl;// Add the following property to the properties section@property (nonatomic,strong) NSMutableArray *enemies;

使HelloWorldLayer.m文件修改如下:

// Synthesize enemies@synthesize enemies;

现在到了创建保存敌人信息并且管理它们如何在屏幕上移动的类了.创建一个新的类,名字为Enemy,继承于CCNode.

将Enemy.h替换为如下内容:

#import "cocos2d.h"#import "HelloWorldLayer.h"@class HelloWorldLayer, Waypoint, Tower;@interface Enemy: CCNode {    CGPoint myPosition;    int maxHp;    int currentHp;    float walkingSpeed;    Waypoint *destinationWaypoint;    BOOL active;}@property (nonatomic,assign) HelloWorldLayer *theGame;@property (nonatomic,assign) CCSprite *mySprite;+(id)nodeWithTheGame:(HelloWorldLayer*)_game;-(id)initWithTheGame:(HelloWorldLayer *)_game;-(void)doActivate;-(void)getRemoved;@end

现在将Enemy.m文件替换为如下内容:

#import "Enemy.h"#import "Tower.h"#import "Waypoint.h"#define HEALTH_BAR_WIDTH 20#define HEALTH_BAR_ORIGIN -10@implementation Enemy@synthesize mySprite, theGame;+(id)nodeWithTheGame:(HelloWorldLayer*)_game {    return [[self alloc] initWithTheGame:_game];}-(id)initWithTheGame:(HelloWorldLayer *)_game {    if ((self=[super init])) {        theGame = _game;        maxHp = 40;        currentHp = maxHp;        active = NO;        walkingSpeed = 0.5;        mySprite = [CCSprite spriteWithFile:@"enemy.png"];        [self addChild:mySprite];        Waypoint * waypoint = (Waypoint *)[theGame.waypoints                                            objectAtIndex:([theGame.waypoints count]-1)];        destinationWaypoint = waypoint.nextWaypoint;        CGPoint pos = waypoint.myPosition;        myPosition = pos;        [mySprite setPosition:pos];        [theGame addChild:self];        [self scheduleUpdate];    }    return self;}-(void)doActivate{    active = YES;}-(void)update:(ccTime)dt{    if(!active)return;    if([theGame circle:myPosition withRadius:1 collisionWithCircle:destinationWaypoint.myPosition         collisionCircleRadius:1])    {        if(destinationWaypoint.nextWaypoint)        {            destinationWaypoint = destinationWaypoint.nextWaypoint;        }else        {            //Reached the end of the road. Damage the player            [theGame getHpDamage];            [self getRemoved];        }    }    CGPoint targetPoint = destinationWaypoint.myPosition;    float movementSpeed = walkingSpeed;    CGPoint normalized = ccpNormalize(ccp(targetPoint.x-myPosition.x,targetPoint.y-myPosition.y));    mySprite.rotation = CC_RADIANS_TO_DEGREES(atan2(normalized.y,-normalized.x));    myPosition = ccp(myPosition.x+normalized.x * movementSpeed,                     myPosition.y+normalized.y * movementSpeed);   [mySprite setPosition:myPosition];}-(void)getRemoved{    [self.parent removeChild:self cleanup:YES];    [theGame.enemies removeObject:self];    //Notify the game that we killed an enemy so we can check if we can send another wave    [theGame enemyGotKilled];}-(void)draw{    ccDrawSolidRect(ccp(myPosition.x+HEALTH_BAR_ORIGIN,                        myPosition.y+16),                    ccp(myPosition.x+HEALTH_BAR_ORIGIN+HEALTH_BAR_WIDTH,                        myPosition.y+14),                    ccc4f(1.0, 0, 0, 1.0));    ccDrawSolidRect(ccp(myPosition.x+HEALTH_BAR_ORIGIN,                        myPosition.y+16),                    ccp(myPosition.x+HEALTH_BAR_ORIGIN + (float)(currentHp * HEALTH_BAR_WIDTH)/maxHp,                        myPosition.y+14),                    ccc4f(0, 1.0, 0, 1.0));}@end
0 0
原创粉丝点击