Project1

标题: 新手教程-区域控制事件 [打印本页]

作者: 仲秋启明    时间: 2010-10-4 13:17
标题: 新手教程-区域控制事件
既然这几天夕阳没有功夫,我就发一个自己的新手教程吧。

这次是利用区域控制事件开始

其实,这个用事件的条件分歧就可以做到了,但是,如果侍庞大的地图和大量的坐标哪种方法就显得很废柴

用VX默认的事件就可以做到大量的区域发生事件了

首先要在Game_Player加入以下脚本
  1.   #--------------------------------------------------------------------------
  2.   # ● 判断当前人物所在区域id
  3.   #--------------------------------------------------------------------------
  4.   def area_id
  5.     for area in $data_areas.values
  6.      if in_area?(area)
  7.        return area.id
  8.      end
  9.    end
  10. end
复制代码

以上脚本作者:beside

然后,在地图上设置一个区域

VX主程序里的效果

看到那个没有阴影的地方了吗?当角色走到那里时就会有人说话的
放置一个事件

事件ID,一会儿会用到

再设置一个并行处理事件,判断角色是否在区域里

用到的事件脚本:
  1. area = $game_player.area_id
  2. $game_map.events[X].start if area == M    #X代表地图上事件编号 M代表区域编号
复制代码


然后运行游戏,见证奇迹吧!!!
效果:



异常简陋的工程: Project1.rar (238.21 KB, 下载次数: 2275)

华丽的谢幕

作者: 红灯    时间: 2010-10-4 14:54
不知道能否达到此种效果:限制某NPC只在某区域活动?
如楼主范例所示,能否设置事件001只在区域001内随机移动?
作者: 小幽的马甲    时间: 2010-10-4 16:37
首先要在Game_Player加入以下脚本
  1.   #--------------------------------------------------------------------------
  2.   # ● 判断当前人物所在区域id
  3.   #--------------------------------------------------------------------------
  4.   def area_id
  5.     for area in $data_areas.values
  6.      if in_area?(area)
  7.        return area.id
  8.      end
  9.    end
  10. end
复制代码
---------------
与其让新手去找Game_Player还不如直接把这个方法封装在Game_Player里= =

  1. class Game_Player < Game_Character
  2.   def area_id
  3.     $data_areas.values.each{|area| return area.id if in_area?(area)}
  4.   end
  5. end
复制代码

作者: overpan    时间: 2010-10-4 18:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: 夕阳武士    时间: 2010-10-10 22:06
支持学长,一起努力吧,咱争取出他30篇教程~
作者: ypkkjt    时间: 2010-12-28 13:13
很实用的:lol
作者: doublefred    时间: 2011-4-10 12:44
area== 1, 1代表区域1,不过 同时 我又使用了 显示区域名称 的脚本.
不想在地图上显示Area001的字样.
想把其换成文字, 不知道怎么实现?
请大大帮我...
作者: 仲秋启明    时间: 2011-4-10 17:27
回复 doublefred 的帖子
  1. 01.class Game_Player < Game_Character

  2. 02.  def area_name

  3. 03.    $data_areas.values.each{|area| return area.name if in_area?(area)}

  4. 04.  end

  5. 05.end
复制代码
应该是这样吧,未测试

area = $game_player.area_name
$game_map.events[X].start if area == "M"   #X代表地图上事件编号 M代表区域名称
作者: doublefred    时间: 2011-4-11 07:28
啊 万分感谢, 作为一个新手, 我对RM有无穷的兴趣.
谢谢楼上的支持.
作者: 无德妖道    时间: 2011-5-16 13:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: yijianhuifu    时间: 2011-6-20 17:14
代码怎么用啊?区域设置在哪?本人新手谢谢
作者: 各种压力的猫君    时间: 2011-9-21 06:19
本帖最后由 各种压力的猫君 于 2011-9-21 06:27 编辑

既然已经挖起来了……- - 报告BUG
如果事件是显示文章的话,会无限循环。
如果用暂时消除事件会报错
  1. ---------------------------
  2. Project2
  3. ---------------------------
  4. 脚本 'Game_Event' 的第 41 行发生了 NoMethodError .

  5. undefined method `size' for nil:NilClass
  6. ---------------------------
  7. 确定   
  8. ---------------------------
复制代码
于是我现在只能用开关控制了

范例提供: 区域控制事件 范例.rar (231.98 KB, 下载次数: 90)
作者: MSQ    时间: 2011-9-21 15:26
好吧!我这废材只能说支持和感谢。




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