博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cocos2D:塔防游戏制作之旅(十四)
阅读量:6331 次
发布时间:2019-06-22

本文共 2776 字,大约阅读时间需要 9 分钟。

塔之战:炮塔的攻击

炮塔就位了?检查.敌人前进中?再次检查 - 它们看起来就是如此!看起来到了击溃这些家伙的时候了!这里我们将智能置入炮塔的代码中去.

每一个炮塔检查是否有敌人在其攻击范围.(炮塔一次只能攻击一个敌人.猫猪注)如果有,炮塔将开始向敌人开火直到两件事之一发生:敌人移出攻击范围或者敌人被摧毁.炮塔接着开始寻找其他欠扁的家伙 :]

将它们放到一起,新建新炮塔!你已经有一个防御基础了!

因为敌人和炮塔类相互依赖彼此,你不得不首先更新它们类的头文件,去避免你在修改实现代码时Xcode发生显示错误.

首先,打开Tower.h文件,然后完成以下修改:

// Add some instance variablesBOOL attacking;Enemy *chosenEnemy;// Add method definition-(void)targetKilled;

打开Enemy.h文件修改如下:

// Add instance variableNSMutableArray *attackedBy;// Add method definitions-(void)getAttacked:(Tower *)attacker;-(void)gotLostSight:(Tower *)attacker;-(void)getDamaged:(int)damage;

下一步,回到Tower.m中做如下修改:

// Import Enemy header at the top of the file:#import "Enemy.h"// Add the following methods-(void)attackEnemy{    [self schedule:@selector(shootWeapon) interval:fireRate];}-(void)chosenEnemyForAttack:(Enemy *)enemy{    chosenEnemy = nil;    chosenEnemy = enemy;    [self attackEnemy];    [enemy getAttacked:self];}-(void)shootWeapon{    CCSprite * bullet = [CCSprite spriteWithFile:@"bullet.png"];    [theGame addChild:bullet];    [bullet setPosition:mySprite.position];    [bullet runAction:[CCSequence actions:                       [CCMoveTo actionWithDuration:0.1 position:chosenEnemy.mySprite.position],                       [CCCallFunc actionWithTarget:self selector:@selector(damageEnemy)],                       [CCCallFuncN actionWithTarget:self selector:@selector(removeBullet:)], nil]];}-(void)removeBullet:(CCSprite *)bullet{    [bullet.parent removeChild:bullet cleanup:YES];}-(void)damageEnemy{    [chosenEnemy getDamaged:damage];}-(void)targetKilled{    if(chosenEnemy)        chosenEnemy =nil;    [self unschedule:@selector(shootWeapon)];}-(void)lostSightOfEnemy{    [chosenEnemy gotLostSight:self];    if(chosenEnemy)        chosenEnemy =nil;     [self unschedule:@selector(shootWeapon)];}

最后,替换之前版本只能怪留下的空白update方法:

-(void)update:(ccTime)dt {    if (chosenEnemy){        //We make it turn to target the enemy chosen        CGPoint normalized = ccpNormalize(ccp(chosenEnemy.mySprite.position.x-mySprite.position.x,                                              chosenEnemy.mySprite.position.y-mySprite.position.y));        mySprite.rotation = CC_RADIANS_TO_DEGREES(atan2(normalized.y,-normalized.x))+90;        if(![theGame circle:mySprite.position withRadius:attackRange              collisionWithCircle:chosenEnemy.mySprite.position collisionCircleRadius:1])        {            [self lostSightOfEnemy];        }    } else {        for(Enemy * enemy in theGame.enemies)        {            if([theGame circle:mySprite.position withRadius:attackRange                 collisionWithCircle:enemy.mySprite.position collisionCircleRadius:1])            {                [self chosenEnemyForAttack:enemy];                break;            }        }    }}

转载地址:http://xudoa.baihongyu.com/

你可能感兴趣的文章
Flash文字效果
查看>>
各种排序算法总结篇(高速/堆/希尔/归并)
查看>>
使用c#訪问Access数据库时,提示找不到可安装的 ISAM
查看>>
Highcharts X轴纵向显示
查看>>
windows 注册表讲解
查看>>
【算法】论平衡二叉树(AVL)的正确种植方法
查看>>
基于DDD的现代ASP.NET开发框架--ABP系列之1、ABP总体介绍
查看>>
【原】东拼西凑PBR(1):PBR基础
查看>>
react 从零开始搭建开发环境
查看>>
scala recursive value x$5 needs type
查看>>
ps -ef |grep 输出的具体含义
查看>>
markdown编辑
查看>>
ASCII 在线转换器
查看>>
Linux内核同步:RCU
查看>>
Android逆向进阶——让你自由自在脱壳的热身运动(dex篇)
查看>>
Java设计模式之五大创建型模式(附实例和详解)
查看>>
60 Permutation Sequence
查看>>
主流的RPC框架有哪些
查看>>
Hive学习之路 (七)Hive的DDL操作
查看>>
[转]mysql使用关键字作为列名的处理方式
查看>>