level 8
顺便问一下 ,如果一个技能有3桢, 和怪碰撞之后设定hp-2,
但动作有3桢,所以会每一桢hp都减2, 这要怎么解决?
2014年10月11日 09点10分
2
level 13
既然知道的帧数,自然就好解决喔~你的攻击判定应该在
image_index=你想判定的帧
满足这个条件后再触发~
2014年10月11日 09点10分
3
我是想3个桢每个桢都有可能打到怪,就象dnf里的技能那样,我感觉游戏里应该是那样的,要么就是我感觉错了
2014年10月11日 09点10分
回复 anheimfb :T大都给你回答问题了。
2014年10月12日 14点10分
吧务
level 13
考虑到可能第一帧打到怪物A,第二帧打到怪物B,那么
你需要一个自定义数组来存储“当前技能已经攻击了谁”,当触发命中条件是遍历数组,未攻击过的进行扣血动作并记录,已经攻击过的则略过。
技能结束或开始下一个攻击判定的连续技时清空数组。
数组的总大小嘛……看你同屏怪物数量了。
2014年10月12日 07点10分
4
..哦 这样啊
2014年10月12日 08点10分
回复 anheimfb :不过,貌似通常只需要一个变量来追踪这次判定“是否已经命中”就可以了,无论在哪一帧命中,之后的帧都不再有攻击判定。
2014年10月12日 15点10分
吧务
level 12
create事件:
ds_id = ds_list_create();//用于记录攻击过敌人的所有id
与敌人的collision事件:
ds_list_add(ds_id,other.id);
if ds_list_find_index(ds_id,other.id) = -1
{
other.life -= 2;//敌人血减少了2
}
2014年10月13日 15点10分
12
每次放技能前,记得清除ds_id。
2014年10月13日 15点10分
回复 blovestorm :恩 我是想敌人出碰撞盒就清理对应的id
2014年10月13日 15点10分
回复 blovestorm :哎,我还以为你要敌人咋碰撞盒里多久,就受到多少帧的攻击呢。起初我还纳闷,这功能不是碰撞函数就能实现的吗
2014年10月13日 15点10分
回复 blovestorm :haha
2014年10月13日 15点10分
吧务
level 12
上面的代码需要注意一个地方,那就是碰撞事件!
你不能用碰撞函数,例如instance_place,place_meeting,position_meeting。
这就是碰撞事件与碰撞函数的区别。
碰撞事件是一个repeat循环事件。每一帧里的执行次数,是碰撞到多少个实例的总数量。
而碰撞函数则不然,其实碰撞函数是与对象的碰撞。
在一帧里,如果同时碰撞对象的多个实例,只会执行与某一实例的碰撞(具体看id,id小的会执行)。其他实例根本不会受到碰撞函数影响。
当然,你可以用place_meeting(x, y, id)来实现某一实例的碰撞。但这对于你所说的要求,几乎没有任何意义。
2014年10月13日 15点10分
13
吧务
level 12
应你要求,给你个敌人出碰撞盒,就清除他id的代码。
create事件:
ds_id = ds_list_create();//用于记录攻击过敌人的所有id
ds_temp = ds_list_create();//用于每一帧临时存储攻击过敌人的所有id
step事件:
ds_list_clear(ds_id);
ds_list_copy(ds_id,ds_temp);
ds_list_clear(ds_temp);
与敌人的collision事件:
ds_list_add(ds_temp,other.id);
if ds_list_find_index(ds_id,other.id) = -1
{
other.life -= 2;//敌人血减少了2
}
这个功能有个问题。如果敌人在攻击判定时间(假设为n帧)里,逃脱后又再次回到攻击判定里,那么敌人会再次受到伤害。
当然,攻击判定时间足够短的话,上述情况是不可能发生的。
2014年10月13日 16点10分
14