代码改变世界

浅谈游戏(dota)中的炮塔攻击,人物攻击(未完待续)

2012-12-27 19:04  eoeAndroid社区  阅读(208)  评论(0编辑  收藏  举报

玩过dota的玩家都晓得,游戏中炮塔会优先攻击攻击范围内攻击本方英雄的敌方英雄。以下我们就讨论哈攻击与被攻击的实现

1.单机模式,当前地图怪全部加载到数据

战斗场景内的类公用类
class npc
{
//攻击目标
target
//类型(建筑,npc,英雄,炮塔等)
type

//判断攻击目标是否在攻击范围内
private boolean functon isInRange()
{
if(target!=null)
{
long distance=Math.sprt((this.worldX-target.worldX)*(this.worldX-target.worldX)+(this.worldY-target.worldY)*(this.worldY-target.worldY));
if(distance<攻击范围)
return true;
}
return false;
}

//判断目标是否激活状态(有目标,在范围内,没死亡)
private boolean function isactive()
{
return target!=null && target.isdead && isInRange();
}


}
英雄类
 class  hero extends npc
{

        type=npctype.hero

        //开始攻击
        public function  attack()
{
//在指定位置播放英雄的技能效果图形
         FightEffertManager.playEffert(英雄的技能效果id,worldX,worldY);
//目标接收到被攻击
target.receiveBeAttacked(this);

//派发出告诉炮塔要帮助攻击事件
dispatch(TowerAttackEvent,target);
}

        //j接收到被攻击
        public function  receiveBeAttacked(attackNpc)
{
//在指定位置播放英雄的技能效果图形
 FightEffertManager.playEffert(播放被英雄攻击的技能效果id,worldX,worldY);
//减血,减的血量为攻击者当前使用的技能的
hp-=attackNpc.getCurrentAttack().attackStrength();
if(hp<0)hp=0;
}

//线程 (处理视图)渲染英雄的界面图形,如播放攻击图形还是普通的等
public function render(){}

//线程 (处理逻辑)追击到范围内攻击,移动,判断英雄是否死亡,死亡回收等
public function update(){
//追击范围内攻击
chaseattack();
//移动
move();
//是否死亡
isDead();
}
}

炮塔
class tower extends npc
{
        type=npctype.tower
//注册炮塔攻击监听
addEventLisenter(TowerAttackEvent,receiveAttackCmd);
//接受到友军攻击命令事件
public function receiveAttackCmd(event)
{
//如果炮塔当前已经有攻击目标,并且为英雄目标,同时此目标在范围内就无视该命令
if(target!=null && target.type==npc.hero && isactiveTarget())
{
return;
}
else
//如果友军传来的目标在范围内就设定为攻击目标,否则无视
{
if(inRange(event.target))
target=event.target
}
}
//线程 (处理视图)渲染炮塔的界面图形,如播放攻击图形还是普通的等
public function render(){}

//线程 (处理逻辑)选定范围内目标,攻击
public function update()
{
//平时时间如果目标不是激活状态就重新寻找目标攻击
if(isactive())
findTarget();
//在攻击频率内有目标,并且目标在范围内,没死亡就攻击
if(空闲时间>攻击频率时间 && isactive())
attack(target)

}

}


待续,A*寻路,切换移动攻击状态,图形渲染,追击攻击等·······

 

2.单机模式,当前地图怪按照界面范围加载数据,移除不在范围内的

待续


3.多人对战模式