Cocos2D:塔防游戏制作之旅(十四)
来源:互联网 发布:unity3d 自动寻路算法 编辑:程序博客网 时间:2024/05/17 02:38
塔之战:炮塔的攻击
炮塔就位了?检查.敌人前进中?再次检查 - 它们看起来就是如此!看起来到了击溃这些家伙的时候了!这里我们将智能置入炮塔的代码中去.
每一个炮塔检查是否有敌人在其攻击范围.(炮塔一次只能攻击一个敌人.猫猪注)如果有,炮塔将开始向敌人开火直到两件事之一发生:敌人移出攻击范围或者敌人被摧毁.炮塔接着开始寻找其他欠扁的家伙 :]
将它们放到一起,新建新炮塔!你已经有一个防御基础了!
因为敌人和炮塔类相互依赖彼此,你不得不首先更新它们类的头文件,去避免你在修改实现代码时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; } } }}
0 0
- Cocos2D:塔防游戏制作之旅(十四)
- Cocos2D:塔防游戏制作之旅(一)
- Cocos2D:塔防游戏制作之旅(二)
- Cocos2D:塔防游戏制作之旅(三)
- Cocos2D:塔防游戏制作之旅(四)
- Cocos2D:塔防游戏制作之旅(五)
- Cocos2D:塔防游戏制作之旅(六)
- Cocos2D:塔防游戏制作之旅(七)
- Cocos2D:塔防游戏制作之旅(八)
- Cocos2D:塔防游戏制作之旅(九)
- Cocos2D:塔防游戏制作之旅(十)
- Cocos2D:塔防游戏制作之旅(十一)
- Cocos2D:塔防游戏制作之旅(十二)
- Cocos2D:塔防游戏制作之旅(十三)
- Cocos2D:塔防游戏制作之旅(十五)
- Cocos2D:塔防游戏制作之旅(十六)
- Cocos2D:塔防游戏制作之旅(十七)
- Cocos2D:塔防游戏制作之旅(十八)
- ViewPager实现滑动切换页面
- Volley框架的使用
- Mysql怎么样避免全表扫描,sql查询优化
- Java中hashmap、linkedhashmap、treemap的区别
- 标准二维表问题
- Cocos2D:塔防游戏制作之旅(十四)
- 采用AsyncTask异步加载网络图片
- 最有收获的一个晚上
- 【Java并发编程】之十一:线程间通信中notify通知的遗漏(含代码)
- POJ3630 Phone List(字典树)
- 总结Superpixel: Empirical Studies and Applications
- java.lang.OutOfMemoryError解决方法
- Android调用WebService
- 曝光的原理 自动曝光