您当前的位置: 首页 >  游戏

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

发布时间:2015-11-17 08:59:45 ,浏览量:0

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

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

// Add these instance variables int 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
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    110453博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0546s