发一仿dnf动作的渣作, 求批评 求意见 求改进
gamemaker吧
全部回复
仅看楼主
level 8
anheimfb 楼主
http://pan.baidu[OK].com/s/1mg[OK]l2h6K
2014年10月11日 09点10分 1
level 8
anheimfb 楼主
顺便问一下 ,如果一个技能有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
技能有3帧,每一帧都可以同时攻击所有敌人吗?
2014年10月12日 14点10分 5
是啊 比如说 踢腿的动作 有3贞,也就是碰撞盒会持续3桢,我是想敌人在碰撞盒里的时候hp-=2, 但是有3桢,所以会hp-=6。 有时候也可能只有2桢,敌人在碰撞盒里,那就是hp-=4. 我只想只要怪在碰撞盒里 hp只减2,而且算1次攻击。
2014年10月12日 15点10分
有时,也觉得自己的这种设定可能思路不太对,也许dnf本身攻击的设定没这么烦琐
2014年10月12日 15点10分
回复 anheimfb :正常碰撞不行吗。碰撞也是按照帧执行的。
2014年10月13日 03点10分
回复 anheimfb :只算一次攻击的话,可以当被碰撞的时候减血然后设置hit为true,然后在alarm里设置一段时间后hit为false。当hit为false时才会扣血
2014年10月13日 03点10分
level 8
anheimfb 楼主
话说没有人会注意到 我的渣作里的 浮空连击和 空中射击比较带感?[汗]
2014年10月13日 06点10分 8
判定不错啦,人倒地的还原度很好~不过你的显卡追人也太快了,应该需要些延迟~如果想做动作游戏,一定要注意一条哦,敌人的出手一定要有预先的动作。
2014年10月13日 08点10分
回复 tifaices :到是有预先动作 可能时间太短了 下次会注意的
2014年10月13日 08点10分
吧务
level 12
LZ看看这个是否是你所说的3帧攻击。
[无效] http://pan.baidu.com/s/1hq25r0K
2014年10月13日 12点10分 10
attacker 4贞后消失。。 然后enemy每贞减2hp.. 这个 好象不是我说的效果。。至少要是1段攻击的栗子吧
2014年10月13日 13点10分
回复 anheimfb :如果一个技能有3桢, 和怪碰撞之后设定hp-2, 但动作有3桢,所以会每一桢hp都减2, 这要怎么解决? 你这话到底啥意思。
2014年10月13日 15点10分
回复 blovestorm :什么叫1段攻击,这个attacker你就理解为技能判定对象就行。
2014年10月13日 15点10分
回复 anheimfb :我终于明白你的意思了。你只想要一次攻击判定啊。也就是敌人虽说在碰撞里持续3帧,但只想-2的血。
2014年10月13日 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
[OK]
2014年10月16日 04点10分
1