赞 | 40 |
VIP | 559 |
好人卡 | 234 |
积分 | 47 |
经验 | 251834 |
最后登录 | 2024-10-11 |
在线时间 | 5240 小时 |
Lv3.寻梦者 (版主) 八宝粥的基叔
- 梦石
- 0
- 星屑
- 4684
- 在线时间
- 5240 小时
- 注册时间
- 2009-4-29
- 帖子
- 14318
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 protosssonny 于 2013-10-23 09:53 编辑
序言:
VA是可以轻易设置任意形状区域,而VX只能设置矩形区域,若要设置任意形状的区域则需要多个矩形区域的拼凑,十分麻烦。所以今天P叔发布一个VX复杂区域设置的脚本,献给我们VX党的同学们。
为什么叫【另类原理】呢?因为本脚本的实现原理是用新建地图来设置区域的,与之前猫君的方法不同。
脚本介绍:
本脚本打破了VX默认区域只能设计成矩形的局限。
主要原理:
利用指定图块在已被设定成区域的地图上直接绘制复杂区域。
主要用途:
1、可以利用本脚本实现复杂区域的遇敌设置
2、可以利用本脚本判定角色是否在指定名称的复杂区域中
判定方法:使用语句if $game_player.new_area_data[3] == "区域名称" 来判定
例如:if $game_player.new_area_data[3] == "<区域>=1"
兼容性:
1、与默认的区域兼容,如果角色同时处于默认区域和复杂区域,则会同时遇到指定默认区域的敌人和复杂区域的敌人。
2、复杂区域间兼容,如果角色同时处于多个复杂区域,则会同时遇到这些复杂区域的敌人。
3、地图遇敌与默认区域、复杂区域兼容,如果地图还设计了可遇敌人,那么在区域中也可以遇到地图本身设定的敌人。
【图文教程使用方法】
总目标:实现泥地为MAP001的一个遇敌区域(可遇到史莱姆),雪地为MAP001的另一个遇敌区域(可遇到蝙蝠)。
1、新建工程,再新建3张地图,其中第一张地图为主地图,后面两张地图用于设计为主地图的两个区域。主地图命名为MAP001(可任意命名),但是区域地图必须带有“<区域>”二字(含尖括号)
2、绘制MAP001,并画出泥地和雪地,把他们的形状画成不规则图形。
3、复制MAP001的图形到两张区域地图,主要是用于区域的对齐。
4、用小石块的图块填充区域地图的泥地和雪地。因为默认脚本中是作为ID为528图块(也就是小石块)作为区域图块的。这个可以在脚本中自己设置。
5、为区域地图分别设置可遇到的敌人队伍。
好了,这样就全部完成了。假入主角在泥地行走,就可能遇到2号地图的敌人史莱姆,假入主角在雪地行走,就可能遇到3号地图的敌人蝙蝠。
你们还可以用语句:- if $game_player.new_area_data[3] == "<区域>=1"
复制代码 来判定角色是否在名称为“<区域>=1”的地图哦!
这样一来,我们VX也可以像VA那样轻易设计复杂的区域了。
2013年10月23日更新:
附上范例工程:
复杂区域设置.rar
(244.05 KB, 下载次数: 77)
应某些用户的需求,发布兼容战斗背景的版本:
【战斗背景兼容版】复杂区域设置.rar
(1.53 MB, 下载次数: 84)
附上脚本:- #==============================================================================
- # ■ 复杂区域设置
- #------------------------------------------------------------------------------
- #
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #
- # 作者:protosssonny
- #
- #==============================================================================
- # 脚本介绍:
- # 本脚本打破了VX默认区域只能设计成矩形的局限。
- # 主要原理:
- # 利用指定图块在已被设定成区域的地图上直接绘制复杂区域。
- # 主要用途:
- # 1、可以利用本脚本实现复杂区域的遇敌设置
- # 2、可以利用本脚本判定角色是否在指定名称的复杂区域中
- # 判定方法:使用语句if $game_player.new_area_data[3] == "区域名称" 来判定
- # 例如:if $game_player.new_area_data[3] == "<区域>=1"
- # 兼容性:
- # 1、与默认的区域兼容,如果角色同时处于默认区域和复杂区域,则会同时遇到指
- # 定默认区域的敌人和复杂区域的敌人。
- # 2、复杂区域间兼容,如果角色同时处于多个复杂区域,则会同时遇到这些复杂区
- # 域的敌人。
- # 3、地图遇敌与默认区域、复杂区域兼容,如果地图还设计了可遇敌人,那么在区
- # 域中也可以遇到地图本身设定的敌人。
- #==============================================================================
- #==============================================================================
- # ■ 参数设定
- #------------------------------------------------------------------------------
- # 在这里设定一些脚本需要的参数
- #==============================================================================
- module Area_Map
-
- # 请设置区域图块的ID。如果需要设置区域,就要统一使用以下ID的图块来绘制区域。
- # 如果不清楚想设计成为区域图块的图块ID,请在任意地图上绘制一个该图块,在它上面
- # 设置一个事件,事件内写脚本:$game_player.show_tile_id 即可查看到该图块的ID。
- TILE_ID = 528
-
- # 请设置地图及其对应的区域,想把ID为2和3的地图设置成ID为1的地图的区域,就写
- # 1 => [2,3] 即可达到目的。注意,除了最后一行以外,每行的最后都要加逗号。
- AREA_MAP =
- {
- 1 => [2,3], # 2、3号ID的地图作为1号ID地图的区域
- 4 => [5] # 5号ID的地图作为4号ID地图的区域
-
-
- } # 这半个括号不可以删掉
- end
- #==============================================================================
- # ■ Game_Player
- #------------------------------------------------------------------------------
- # 处理主角的类。事件启动的判定、以及地图的滚动等功能。
- # 本类的实例请参考 $game_player。
- #==============================================================================
- class Game_Player < Game_Character
- #--------------------------------------------------------------------------
- # ● 【新定义】新地图作为区域的判定计算
- #--------------------------------------------------------------------------
- def new_area(map_id)
- area_maps = []
- if Area_Map::AREA_MAP.keys.include?(map_id)
- area_maps = Area_Map::AREA_MAP[map_id]
- end
- return area_maps
- end
- #--------------------------------------------------------------------------
- # ● 【新定义】新地图作为区域的数据生成以及返回
- #--------------------------------------------------------------------------
- def new_area_data
- data = [false, 0, [], ""]
- for map in new_area($game_map.map_id)
- if load_data("Data/MapInfos.rvdata")[map].name.include?("<区域>")
- case map
- when 1..9
- name_id = "00#{map}"
- when 10..99
- name_id = "0#{map}"
- when 100..999
- name_id = "#{map}"
- end
- load = load_data("Data/Map"+ name_id + ".rvdata")
- data[0] = load.data[x, y, 2] == Area_Map::TILE_ID
- if data[0]
- data[1] = load.encounter_step
- data[2] += load.encounter_list
- data[3] = load_data("Data/MapInfos.rvdata")[map].name
- else
- data[2].delete(load.encounter_list)
- end
- break if data[0]
- end
- end
- return data
- end
- #--------------------------------------------------------------------------
- # ● 【新定义】用于查看图块ID的方法
- #--------------------------------------------------------------------------
- def show_tile_id
- p $game_map.map.data[x, y, 2]
- end
- #--------------------------------------------------------------------------
- # ● 【再定义】初始化遇敌计数
- #--------------------------------------------------------------------------
- def make_encounter_count
- if $game_map.map_id != 0
- n = $game_map.encounter_step
- @encounter_count = rand(n) + rand(n) + 1 # 好比掷两个骰子
- end
- @encounter_count = new_area_data[1] if new_area_data[1] != 0 # 更改处
- end
- #--------------------------------------------------------------------------
- # ● 【再定义】生成遇敌队伍
- #--------------------------------------------------------------------------
- def make_encounter_troop_id
- encounter_list = $game_map.encounter_list.clone
- encounter_list += new_area_data[2] # 更改处
- for area in $data_areas.values
- encounter_list += area.encounter_list if in_area?(area)
- end
- if encounter_list.empty?
- make_encounter_count
- return 0
- end
- return encounter_list[rand(encounter_list.size)]
- end
- end
- #------------------------------------------------------------------------------
- #
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #
- # 作者:protosssonny
- # 2012年10月26日
- #==============================================================================
复制代码 |
评分
-
查看全部评分
|