Project1

标题: 怎么能做出按下某键后,主角正前方的NPC自动触发事件? [打印本页]

作者: 恶魔般的天使    时间: 2014-7-20 20:36
标题: 怎么能做出按下某键后,主角正前方的NPC自动触发事件?
本帖最后由 恶魔般的天使 于 2014-7-21 02:13 编辑

大概就是想做出一个效果。
就是玩家按下一个键后,主角正前方的NPC就爆炸了。我把事件设定在那个NPC里面。
那么玩家按下那个键后,主角正前方的NPC自动触发事件,自动爆咋,但是NPC如果距离主角很远的话就触发不了。。。
=========
横线以上是之前的提问,估计不够清楚,我在下面补充说明下
我大概是想做事件及时制战斗。
主角按下X键以后,那么开始判断主角正前方是否有NPC,有NPC的话那个NPC的事件就自动触发了。就是这样。
那么主角按下D键后,判断主角周围一圈都是否有NPC,有的话这周围一圈的NPC都自动触发本身的事件。
大概就是这样想做一个半事件半脚本的及时制吧。
作者: 芯☆淡茹水    时间: 2014-7-20 21:01
正前方?范围是多少格以内?
作者: 冰之滄月    时间: 2014-7-20 21:02
LZ事件接受吗
作者: 恐惧剑刃    时间: 2014-7-20 21:29
本帖最后由 恐惧剑刃 于 2014-7-20 21:31 编辑
  1. class Scene_Map
  2.   def 爆破(爆破距离 = 3)
  3.     # 寻找事件
  4.     for i in $game_map.events.keys.sort
  5.       # 判断主角朝向
  6.       case $game_player.direction
  7.       when 2 # Y+
  8.         if $game_map.events[i].y > $game_player.y and
  9.           $game_map.events[i].y <= $game_player.y + 爆破距离
  10.           $game_map.events[i].start
  11.         end
  12.       when 4 # X-
  13.         if $game_map.events[i].x < $game_player.x and
  14.           $game_map.events[i].x >= $game_player.x - 爆破距离
  15.           $game_map.events[i].start
  16.         end
  17.       when 6 # X+
  18.         if $game_map.events[i].x > $game_player.x and
  19.           $game_map.events[i].x <= $game_player.x + 爆破距离
  20.           $game_map.events[i].start
  21.         end
  22.       when 8 # Y-
  23.         if $game_map.events[i].y < $game_player.y and
  24.           $game_map.events[i].y >= $game_player.y - 爆破距离
  25.           $game_map.events[i].start
  26.         end
  27.       end
  28.     end
  29.   end
  30. end
复制代码
如果按下键,就执行 爆破方法 可以给一个 距离 参数 默认是3
此方法原理就是判断坐标然后直接执行事件内容
作者: 芯☆淡茹水    时间: 2014-7-20 21:33
本帖最后由 芯☆淡茹水 于 2014-7-20 21:36 编辑

下面这个,按 Z 键,自动打开 角色 正前方离角色最近的 事件 的 独立开关A 。好像有点拗口。

Project1.rar (193.06 KB, 下载次数: 107)


PS:有点像射击游戏的感觉。
作者: 冰之滄月    时间: 2014-7-20 21:36
本帖最后由 冰之滄月 于 2014-7-20 21:39 编辑

咳咳,慢了一步。
在角色的四个方向,分别复制四个事件,然后玩家接触,内容是打开开关“可以死”。
接下来在这四个事件的周围再次加入四个事件,内容关闭“可以死”,也是玩家接触。这样就变成了一个正菱形形状。
然后右上角并行处理一个事件。内容为:“如果开关‘已经死’被关闭(新建开关已经死),如果按钮“XXX”被按下时,(这样的按钮可以自拟)。然后设置各种华丽的特效,打开开关‘已经死’。”
然后敌人设置第二个事件页,条件是已经死打开。
然后就可以利用公共事件做出“在地图上使用技能或者物品偷袭敌人”的效果了。
作者: 恶魔般的天使    时间: 2014-7-21 01:58
恐惧剑刃 发表于 2014-7-20 21:29
如果按下键,就执行 爆破方法 可以给一个 距离 参数 默认是3
此方法原理就是判断坐标然后直接执行事件内容 ...

谢谢你,这个脚本知道原理。因为懂易语言,但是对RPBU是渣,所以现在赶工,要交给公司,所以我想制作一个简单点就是用半事件半脚本的战斗模式。
那么,我就想做到把一串代码写在事件中,那么主角按下某键后就攻击了,那么对方的NPC如果距离够进就被伤害到了。怎么实现这个伤害呢?就是这个NPC自身的事件触发了。
所以大神您的脚本虽然解决了我一时的需要,但是我还想继续做下去就没法了。希望大神能留下QQ能指导下怎么完成这个简单的事件战斗
作者: 恶魔般的天使    时间: 2014-7-21 02:10
芯☆淡茹水 发表于 2014-7-20 21:33
下面这个,按 Z 键,自动打开 角色 正前方离角色最近的 事件 的 独立开关A 。好像有点拗口。

谢谢您的完美答案,很完美,但是可能是我的要求不够清楚吧。我想要的实际效果的确是这样的。
但是我更想做一个半事件半脚本的按键攻击系统。
大概的思路是这样的。
比如说主角有三个技能。
普通攻击  格挡  觉醒攻击。
那么当我按下X键以后,主角是普通攻击,那么“判断主角正前方的[多少]步以内的距离是否有NPC。
如果有的话,那么这个NPC的内容就自动触发了。比如这个NPC事件里面设置他掉血啦怎么滴。
所以重点就是在 我想把脚本写在事件里面,直接判断主角正前方是否有NPC,有的话NPC就自动触发
事件以内的事情了。我想您能帮帮我吗?具体可以联系我QQ1300570901.十分感谢。

作者: 恐惧剑刃    时间: 2014-7-21 07:31
本帖最后由 恐惧剑刃 于 2014-7-21 07:45 编辑

大概就这个样子了脚本有很多注释应该很容易修改

半事件半脚本地图战斗.rar (229.98 KB, 下载次数: 89)
作者: 冰之滄月    时间: 2014-7-21 19:46
LZ你要的效果的话可以用坐标判定来做到。也是纯事件的。
作者: 恶魔般的天使    时间: 2014-7-21 20:29
冰之滄月 发表于 2014-7-21 19:46
LZ你要的效果的话可以用坐标判定来做到。也是纯事件的。

能指点一下咩?如何坐标判断。
作者: 芯☆淡茹水    时间: 2014-7-21 20:44
用事件做出伤害效果,被伤害的 NPC 的 HP 从哪儿来?也就是说怎样赋予给 NPC HP值?(回合战斗模式的敌人 HP 是数据库编辑好的)。
再一个,伤害需要伤害显示,也是必须要改脚本的。

作者: 冰之滄月    时间: 2014-7-21 20:56
本帖最后由 冰之滄月 于 2014-7-21 21:02 编辑

LZ范例来了
@恶魔般的天使  

Project5.rar

189.84 KB, 下载次数: 114


作者: 恶魔般的天使    时间: 2014-7-21 22:56
芯☆淡茹水 发表于 2014-7-21 20:44
用事件做出伤害效果,被伤害的 NPC 的 HP 从哪儿来?也就是说怎样赋予给 NPC HP值?(回合战斗模式的敌人 H ...

因为以前我用纯事件赋予了NPC生命值,战斗力。等等。有这个模块。。。
我给你看下


但是因为不懂RPBU,所以不知道怎么判定NPC和主角的距离,NPC内的内容是否被触发...
作者: 恶魔般的天使    时间: 2014-7-21 23:16
恐惧剑刃 发表于 2014-7-21 07:31
大概就这个样子了脚本有很多注释应该很容易修改

又研究了下您的这个范例,其实距离我的要求也很接近了,可能是之前没看懂,现在看懂了。算法的话我去学学,应该能自己用脚本写点算法。唯一还疑惑的就是 我用您的这个范例 可以完整的做出一个及时制战斗出来吗? 比如说我如果按X键,那么效果是正前方的NPC减血。那么我如果要做的话,是不是自己学会了算法后,自己把您事件脚本代码里面关于算法的地方修改成吸血的算法就成立了呢?如果是这样的话就太好了。
作者: 冰之滄月    时间: 2014-7-22 08:49
LZ,我又改了一下,增加了纯事件打人模式,如果可以的话LZ可以借题发挥加上障碍物等等,。

Project5.rar

189.73 KB, 下载次数: 66


作者: 芯☆淡茹水    时间: 2014-7-22 09:03
计算距离用事件可以办到,但是很麻烦。以下是两个方法,可写在事件脚本里,希望能帮上LZ。
  1. #==============================================================================
  2. #计算距离的话用下面那个:range_jude(event_id)。 可直接在事件里写入脚本:
  3. #$game_variables[变量ID] = range_jude(事件ID)  把当前角色与指定ID的事件距离代入
  4. #变量,就可以用该变量条件分歧。
  5. #
  6. #用 lately_event 直接是一个当前离角色最近的事件ID ,如果当前地图没有拥有行走图
  7. #的事件,返回的ID是 0 。
  8. #==============================================================================
  9. def range_jude(event_id)
  10.   event = $game_map.events[event_id]
  11.   return ($game_player.x - event.x).abs + ($game_player.y - event.y).abs
  12. end
  13. #-----------------------------------------------------------------------------
  14. def lately_event
  15.   date = []
  16.   for event in $game_map.events.values
  17.     next if event.character_name = ""
  18.     date.push(event)
  19.   end
  20.   return 0 if date == []
  21.   date.sort! {|a,b| range_jude(a.id) - range_jude(b.id)}
  22.   return date[0].id
  23. end
  24. #==============================================================================
复制代码

作者: shanlong闪龙    时间: 2014-7-24 10:06
条件分歧里好像有的




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1