Project1

标题: 如何让一个事件在指定范围内辨识其他事件? [打印本页]

作者: DivineCrow    时间: 2014-7-29 00:11
标题: 如何让一个事件在指定范围内辨识其他事件?
 

如何让一个事件周围的一个矩形范围内侦测其他事件是否经过  (能设定菱形、圆形等其他形状更好)

可以在其他事件经过时打开1号开关或自用开关A、离开时关闭之类


并且可以调整设定范围的大小  (以该事件为中心的3*3、5*5或以上的矩形)


我试过用一并行处理的事件以每个事件的座标对变量赋值

不过这样需要使用到非常多的变量 (事件数量很多) 扩展性不佳


有什么更好的方法吗? 事件、脚本不限


 
作者: 正太君    时间: 2014-7-29 19:34
有事件进入区域的话,游戏画面会变量,开关1打开,否则就关闭...
这是范例...
Project3.rar (1.42 MB, 下载次数: 84)
作者: 正太君    时间: 2014-7-29 22:42
以上只做了范例,没有补充说明,现在补充一下...

首先设置一个区域,形状随意,不局限于矩形...


关键的脚本是这样的...


下面是几个“1”的解释...
$game_switches[1]的1表示开关1随区域内是否事件开启和关闭...
i[1]这个1不用管它,统一写1,这是由Hash本身的性质决定的...
== 1这个1是表示判定区域是区域1,如果你是用区域2作判定,则要改成2...
最后是效果截图...


作者: DivineCrow    时间: 2014-7-30 01:10
本帖最后由 DivineCrow 于 2014-7-30 01:28 编辑
正太君 发表于 2014-7-29 22:42
以上只做了范例,没有补充说明,现在补充一下...

首先设置一个区域,形状随意,不局限于矩形...


这个嘛... 这样就没办法以事件为中心来探测了

想让该区域随着事件移动而移动

这是昨天想到的一个方式


这能辨识3*3范围内(不包括中心) ID为1以上的事件

侦测到其他事件后可以再开启自用开关打开另一个分页
然后重复上面那段  取得位置资讯那里则把条件分支那里改成

事件离开区域后自用开关A关闭


不过这种方式要是扩大区域  上面那段就会变得非常长 :(

你的构想也不错  给了我一些思路˙0˙

嗯...我就再等个1、2天看看有没有更好的答案吧?



@taroxd :看到@VIPArcher当上了这里的版主 于是就屁颠屁颠的跑到这里玩了:D  
作者: 正太君    时间: 2014-7-30 13:01
重新做了一个范例... Project1.rar (1.42 MB, 下载次数: 67)
范例里的事件名中带有【正太】二字的事件只要经过怪蜀黍身边一个范围,怪蜀黍头上就会有心的心情,而其它事件无效...
事件设置及事件脚本设置请看范例中的事件【怪蜀黍】...

图中粉色的四个框里的数据是四个参数,不必更改...绿色框里的参数是可以更改的...
默认方法名【in_square】是45度倾斜正方形区域判定,要换成端正矩形的区域判定,需要把方法名改成【in_rectangle】,同时增加一个参数...参数的意义见一下脚本中的注释...
这是必须添加在脚本编辑器里的脚本,转载请注明脚本来源哦...
RUBY 代码复制
  1. #==============================================================================
  2. # 事件周围区域判定
  3. #------------------------------------------------------------------------------
  4. # 作者:正太君(聪仔)
  5. # 请保留脚本来源...
  6. # 本脚本来自rpg.blue
  7. #==============================================================================
  8.  
  9. #==============================================================================
  10. # ■ Game_Character
  11. #==============================================================================
  12. class Game_Character < Game_CharacterBase
  13.   attr_reader   :event
  14. end
  15.  
  16. module Kernel
  17.   #--------------------------------------------------------------------------
  18.   # ● 矩形  共6个参数
  19.   #--------------------------------------------------------------------------
  20.   # x、y     :进入区域的事件x、y坐标...
  21.   # ox, oy   :区域中心的事件x、y坐标...
  22.   # a        :矩形的长边减1后的一半,可理解成长轴向的半径...
  23.   # b        :矩形的短边减1后的一半,可理解成短轴向的半径...
  24.   # 例如一个7×3的矩形,a为3,b为1;端正的正方形a、b相等...
  25.   #--------------------------------------------------------------------------
  26.   def in_rectangle(x, y, ox, oy, a, b)
  27.     (x - ox).abs <= a and (y - oy).abs <= b
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 45度倾斜的正方形(或称为LZ所谓的菱形)  共5个参数
  31.   #--------------------------------------------------------------------------
  32.   # x、y     :进入区域的事件x、y坐标...
  33.   # ox, oy   :区域中心的事件x、y坐标...
  34.   # r        : 正方形的对角线长度减1后的一半,可理解成正方形的半径...
  35.   #--------------------------------------------------------------------------
  36.   def in_square(x, y, ox, oy, r)
  37.     ((x - ox) - (y - oy)).abs <= r and ((x - ox) + (y - oy)).abs <= r
  38.   end
  39. end

作者: 正太君    时间: 2014-7-30 14:59
@taroxd 版主大人,in_rectangle放在module Kernel下面,有利于在事件脚本里直接调用呢...

作者: DivineCrow    时间: 2014-7-31 01:37
正太君 发表于 2014-7-30 13:01
重新做了一个范例...
范例里的事件名中带有【正太】二字的事件只要经过怪蜀黍身边一个范围,怪蜀黍头上就会 ...


把那种扫描方式放到脚本里

再用事件去RUN一遍  这个主意不错 ˙0˙

最重要的是还可以调整半径~ ❤

嗯 这玩意儿太棒了 感谢 ˙3˙~


话说我之前一直以为那个大叔才是怪蜀黍... 一直盯着大叔看想说怎么没效果 -3- ...呵呵





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