个人用的在GMS2里面的攻击攻击系统
骨折好少女
2017-07-28
成品
我来展示一个 一把飞刀 穿过每个人只吃一次伤害的做法吧(后面展示的东西有点魔法了)
目标效果
做到每个人仅仅被攻击一次的效果
效果作用
划定一个范围 范围内的敌人 会被记录 然后进行 每个敌人仅仅造成 一次伤害 的行为
清理掉 记录后 即可再次进行伤害行为
作案工具
Multi_Object_Collisions系列的脚本
代码很简单我直接贴出来算了
collision_multiple( x,y,argument0);
//红色部分就是可以修改的内容 除了instance_place 外还可以使用 collision系列 反正安装需要替换就是了 var x1 = argument0; var y1 = argument1; var obj = argument2; var list = ds_list_create(); do { var hit = instance_place(x1, y1, obj); if (hit != noone) { ///Add the colliding object to the list { ///deactivate it so that we don't collide with it again. ///It'll be reactivated later on... ds_list_add(list, hit); instance_deactivate_object(hit); } } until (hit == noone); ///Reactivate all the objects which were deactivated if (ds_list_size(list) > 0) for (var i = 0; i < ds_list_size(list); i++) { instance_activate_object(list[|i]); } ///Return the list of objects OR noone return list;
一个叫做AtkStep的脚本
var AColBox = argument0; if ds_list_size(AColBox) > 0 { for (i = 0; i < ds_list_size(AColBox); i += 1) { if ds_list_find_index(AtkList, ds_list_find_value(AColBox, i)) = -1 { ds_list_add(AtkList, ds_list_find_value(AColBox, i)) //每加入一个草一个 var Col = ds_list_find_value(AColBox, i);//这家伙就是目标了 if (object_get_parent(Col.object_index) = 目标的父对象) //我想你们肯定需要 对攻击的不同 类型进行不同的处理 在这里直接分类 {Col.HP -= max(0,self.ATK )//self 表示的是自身 目标的HP减少 自身的攻击力 Max的作用 是在计算攻击的 时候 考虑进去防御力 的话 负数不久给敌人加血了? //******************这两句是 击飞的范例 乐意可以考究一下 //Col.vx = (max(0,self.AFlyH - Col.DFlyH)+abs(Col.vx))*self.facing //目标.横向移动速度 = (max(0,自身.击飞力度 - 目标。击飞补正)+ 目标现在的移动速度的绝对值)*自身攻击的方向[只有-1和1] // Col.vy = -max(0,self.AFlyV - Col.DFlyV); //******************************* } } }}
创建事件
AtkList = ds_list_create();//记录 被攻击过的目标 //我通过启用 计时器时间【0】 来周期性清理 AtkList 这样就能持续对人进行攻击了 比如火焰的 多段连续伤害 AtkListCleanTime = -1;//不使用就写个-1 alarm[0] = AtkListCleanTime; Atk = 1;//攻击力 其实我这边还有一堆信息 反正挑个最简单的讲解
步事件
var AColBox = collision_multiple( x,y,怪物); AtkStep(AColBox);
计时器[0]事件
ds_list_clear(AtkList) alarm[0] = AtkListCleanTime;//通过自己调用自己 这样持续清理
销毁事件
日常收拾手尾
ds_list_destroy(AtkList);
关于如何 自爆嘛
比如我这个飞刀 就是添加了个离开房间范围就销毁
比如 火焰持续燃烧 再价格计时器 到了自己销毁
好了卖弄的都卖弄完了()
我先转几天制作吧
(转发自:原日志地址)
BloveStorm
2017-09-03
支持一切干货!
关于模拟碰撞事件函数方面,我和LZ实现方法几乎一样。但我用的数据结构不是list,而是queue。
用queue的好处是不用for循环来activate实例,并且从理论上来讲queue的执行效率应该比list快那么一丁丁点,不过也不用在意这些细节了。
干货少女啊!
为啥这脚本代码的语法,这么像JS?
另外就是,好强!
骨折好少女
2017-09-26
gms的语言就是这样的嘛
只想说给大佬跪了……orz