晓月_普通攻击(一)简单实现
发表于2016-09-19
大部分游戏都会有战斗,战斗当中比较重要也是最基础的就是普通攻击了。attack
下面我简单分析一下普通攻击,有不对的地方大家指出来,我会尽快回复大家的。
首先一般的普通攻击不会消耗什么,不需要你消耗红蓝材料等。这一点降低了大家释放的成本,从而也是最常用的。附加的功能又非常的多。
从普通攻击的逻辑上来说,简单的划分一下步骤:
1、是否闪避
2、是否物理免疫
3、是否暴击
4、普通攻击攻防计算
暂时不讨论吸血才
1、是否闪避,你可以自己设定一个闪避率,当然实际开发中应该会考虑使用攻击者的命中率+被击中的闪避率来进行平衡计算。这样可以充分体现出这2个属性他应有的价值。
2、游戏发展到今天,已经出了很多很多不可思议的玩法了。物理免疫这种也算是比较经典的了,他的意思就是物理攻击对他没有作用,当然物理免疫和闪避的判断顺序可以调换一下位置也是没有关系的。实现它的方法也很简单,视觉上你可以添加一个BUFF计时加上一个炫酷到不行的无敌特效,当然声音也是可以起到很好的效果的。你仔细想想超级玛丽第一关那颗无敌的星星就应该知道了吧?
3、暴击也算是游戏里面比较好玩的一部分了吧。因为差距很大,暴击一般伤害在150%~200%之间。而且经常会用高亮大的字体进行显示刺激玩家。也增加游戏的趣味性和属性倾向,通常管追求暴击的叫做了暴击流。当然PK时候浮动也会比较大,刀刀暴击也不是那么简单的一件事情。
4、普通攻击下的攻防计算就比较复杂了,最最最简单的方式就是攻击力减去防御力。但是这样造成的后果也是很明显的,就是他们2个属性之间是呈线性关系,1点攻击力永远和1点防御力的价值相等,这样的话如果狂堆攻击力和狂堆防御力到后面严重影响游戏平衡。
需要注意的一点这个算法有一个问题就是有的场景下新手可能会挑战比较厉害的BOSS,剧情需要。所以还要判断一下伤害值要大于等于0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /// 物理伤害 public static void physical( Creatures attack , Creatures hit ) { //是否闪避 //是否物理免疫 //是否暴击 //普通攻击 if (HitrateHandle.isAttack(attack, hit)) { //未闪避 if (AttributeHandle.isPhysicalImmune(hit.Atts)) { //是物理免疫 Debug.Log(attack.name + "虽然击中了,但是很可惜" + hit.name + "现在身上有物理免疫。" ); } else { //没有物理免疫 if (HitrateHandle.isCrit(attack, hit)) { //这次攻击产生了暴击哦 PhysicalAttack.NomalAttack( attack , hit ); } else { //这次攻击就是普通攻击 PhysicalAttack.CritAttack(attack, hit); } } } else //闪避了 { Debug.Log(attack.name + "的攻击被" + hit.name + "闪避掉了.MISS" ); } } |