设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4986|回复: 11
打印 上一主题 下一主题

[RMVX发布] 【另类原理】VX复杂区域设置

[复制链接]

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4694
在线时间
5240 小时
注册时间
2009-4-29
帖子
14318

贵宾

跳转到指定楼层
1
发表于 2012-10-26 14:55:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

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号地图的敌人蝙蝠。
你们还可以用语句:
  1. if $game_player.new_area_data[3] == "<区域>=1"
复制代码
来判定角色是否在名称为“<区域>=1”的地图哦!

这样一来,我们VX也可以像VA那样轻易设计复杂的区域了。
2013年10月23日更新:
附上范例工程: 复杂区域设置.rar (244.05 KB, 下载次数: 77)
应某些用户的需求,发布兼容战斗背景的版本: 【战斗背景兼容版】复杂区域设置.rar (1.53 MB, 下载次数: 84)

附上脚本:
  1. #==============================================================================
  2. # ■ 复杂区域设置
  3. #------------------------------------------------------------------------------
  4. #
  5. #   本脚本来自www.66RPG.com,使用和转载请保留此信息
  6. #
  7. #   作者:protosssonny   
  8. #
  9. #==============================================================================
  10. # 脚本介绍:
  11. #     本脚本打破了VX默认区域只能设计成矩形的局限。
  12. # 主要原理:
  13. #     利用指定图块在已被设定成区域的地图上直接绘制复杂区域。
  14. # 主要用途:
  15. #     1、可以利用本脚本实现复杂区域的遇敌设置
  16. #     2、可以利用本脚本判定角色是否在指定名称的复杂区域中
  17. #     判定方法:使用语句if $game_player.new_area_data[3] == "区域名称" 来判定
  18. #     例如:if $game_player.new_area_data[3] == "<区域>=1"
  19. # 兼容性:
  20. #     1、与默认的区域兼容,如果角色同时处于默认区域和复杂区域,则会同时遇到指
  21. #     定默认区域的敌人和复杂区域的敌人。
  22. #     2、复杂区域间兼容,如果角色同时处于多个复杂区域,则会同时遇到这些复杂区
  23. #     域的敌人。
  24. #     3、地图遇敌与默认区域、复杂区域兼容,如果地图还设计了可遇敌人,那么在区
  25. #     域中也可以遇到地图本身设定的敌人。
  26. #==============================================================================

  27. #==============================================================================
  28. # ■ 参数设定
  29. #------------------------------------------------------------------------------
  30. # 在这里设定一些脚本需要的参数
  31. #==============================================================================
  32. module Area_Map
  33.   
  34. # 请设置区域图块的ID。如果需要设置区域,就要统一使用以下ID的图块来绘制区域。
  35. # 如果不清楚想设计成为区域图块的图块ID,请在任意地图上绘制一个该图块,在它上面
  36. # 设置一个事件,事件内写脚本:$game_player.show_tile_id 即可查看到该图块的ID。
  37.   TILE_ID = 528
  38.   
  39. # 请设置地图及其对应的区域,想把ID为2和3的地图设置成ID为1的地图的区域,就写
  40. # 1 => [2,3] 即可达到目的。注意,除了最后一行以外,每行的最后都要加逗号。
  41.   AREA_MAP =
  42.   {
  43.     1 => [2,3],   # 2、3号ID的地图作为1号ID地图的区域
  44.     4 => [5]      # 5号ID的地图作为4号ID地图的区域
  45.    
  46.    
  47.   } # 这半个括号不可以删掉
  48. end  

  49. #==============================================================================
  50. # ■ Game_Player
  51. #------------------------------------------------------------------------------
  52. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  53. # 本类的实例请参考 $game_player。
  54. #==============================================================================

  55. class Game_Player < Game_Character
  56.   #--------------------------------------------------------------------------
  57.   # ● 【新定义】新地图作为区域的判定计算
  58.   #--------------------------------------------------------------------------
  59.   def new_area(map_id)
  60.     area_maps = []
  61.     if Area_Map::AREA_MAP.keys.include?(map_id)
  62.       area_maps = Area_Map::AREA_MAP[map_id]
  63.     end
  64.     return area_maps
  65.   end  
  66.   #--------------------------------------------------------------------------
  67.   # ● 【新定义】新地图作为区域的数据生成以及返回
  68.   #--------------------------------------------------------------------------
  69.   def new_area_data
  70.     data = [false, 0, [], ""]
  71.     for map in new_area($game_map.map_id)
  72.       if load_data("Data/MapInfos.rvdata")[map].name.include?("<区域>")
  73.         case map
  74.         when 1..9
  75.           name_id = "00#{map}"
  76.         when 10..99  
  77.           name_id = "0#{map}"
  78.         when 100..999  
  79.           name_id = "#{map}"
  80.         end
  81.         load = load_data("Data/Map"+ name_id + ".rvdata")
  82.         data[0] = load.data[x, y, 2] == Area_Map::TILE_ID
  83.         if data[0]
  84.           data[1] = load.encounter_step
  85.           data[2] += load.encounter_list
  86.           data[3] = load_data("Data/MapInfos.rvdata")[map].name
  87.         else
  88.           data[2].delete(load.encounter_list)
  89.         end  
  90.         break if data[0]
  91.       end
  92.     end
  93.     return data
  94.   end  
  95.   #--------------------------------------------------------------------------
  96.   # ● 【新定义】用于查看图块ID的方法
  97.   #--------------------------------------------------------------------------
  98.   def show_tile_id
  99.     p $game_map.map.data[x, y, 2]
  100.   end  
  101.   #--------------------------------------------------------------------------
  102.   # ● 【再定义】初始化遇敌计数
  103.   #--------------------------------------------------------------------------
  104.   def make_encounter_count
  105.     if $game_map.map_id != 0
  106.       n = $game_map.encounter_step
  107.       @encounter_count = rand(n) + rand(n) + 1  # 好比掷两个骰子
  108.     end
  109.     @encounter_count = new_area_data[1] if new_area_data[1] != 0 # 更改处
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 【再定义】生成遇敌队伍
  113.   #--------------------------------------------------------------------------
  114.   def make_encounter_troop_id
  115.     encounter_list = $game_map.encounter_list.clone
  116.     encounter_list += new_area_data[2] # 更改处
  117.     for area in $data_areas.values
  118.       encounter_list += area.encounter_list if in_area?(area)
  119.     end
  120.     if encounter_list.empty?
  121.       make_encounter_count
  122.       return 0
  123.     end
  124.     return encounter_list[rand(encounter_list.size)]
  125.   end
  126. end  
  127. #------------------------------------------------------------------------------
  128. #
  129. #   本脚本来自www.66RPG.com,使用和转载请保留此信息
  130. #
  131. #                                                          作者:protosssonny   
  132. #                                                             2012年10月26日
  133. #==============================================================================
复制代码

点评

3Q ...谢谢大侠。。。为啥不能赛唐了  发表于 2013-10-23 10:22
嗷呜~~刚邀请了20位好友前来围观,给这20位好友添麻烦了。喵~~  发表于 2012-10-26 15:02

评分

参与人数 10星屑 +1808 收起 理由
八宝粥先生 + 60 P叔大触
Luciffer + 440 精品文章
Mic_洛洛 + 24 给P叔大触手塞糖了,喵~
彭格列第XI代 + 2 咦0 0可以给糖~所以怎么做QAQ写个空白窗口.
feizhaodan + 900 奖赏条例
咕噜 + 2 标记已读 - 没糖果了
Password + 60 只能给这么多了
a364774426 + 60 P叔好牛啊
zx工作室2 + 60 虽然不用VX但塞糖~
迷糊的安安 + 100 虽然不用VX但塞糖~

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747

Lv4.逐梦者

送快递的水表员

梦石
10
星屑
4867
在线时间
3303 小时
注册时间
2012-6-27
帖子
7160

开拓者贵宾

2
发表于 2012-10-26 15:30:55 | 只看该作者
大地图用起来效果会很好

嘛……最近不需要这个功能,P叔辛苦了
以前用过纯事件来做不规则区域遇敌
有点麻烦,不过做好一个复制黏贴就可以了,只要区域不是很大

P叔想听的话短消息或者QQ都可以

评分

参与人数 1星屑 +20 收起 理由
怪蜀黍 + 20 谢谢苏联支持,最近评分总是不够用.

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

3
发表于 2012-10-26 15:59:11 | 只看该作者
本帖最后由 精灵使者 于 2012-10-26 16:06 编辑

可以考虑用图块-地形标志,这样可能会简易很多
回复 支持 反对

使用道具 举报

Lv3.寻梦者

最萌的小猫

梦石
0
星屑
1347
在线时间
692 小时
注册时间
2011-11-5
帖子
3443
4
发表于 2012-10-26 16:07:39 | 只看该作者
异常的…………完美…………啊……………………(人吧,太厉害了——不好

点评

小猫,你不是说要更改头像把爪子漏出来吗?可是现在爪子还是被文字遮挡。喵~~~  发表于 2012-10-26 16:26
小猫,感情浓郁的天然嘿啾一只,属性:水,嘿啾,无轨迹流线萌。喜欢在正午伸出小爪子卖着各种次元萌。平行穿越次元萌差。
如需要小猫,请认准啾怪时空电话。这宇宙萌源的秘密,需要找到时空边界萌源能量爆发的封印钥匙。快来和小猫一同去冒险吧!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
38
在线时间
1165 小时
注册时间
2012-3-16
帖子
5336
5
发表于 2012-10-26 17:22:01 | 只看该作者
区域遇怪吗- -
这货不怎么用的类型~
喜欢用撞到怪就开始战斗滴~[怪在地图上晃悠的]
发现P叔还没回答昨天滴问题QAQ

点评

你昨天的问题,如果要建一个可选择的窗口就需要设计一个新的场景。  发表于 2012-10-26 17:36
我想要到的是保护同伴的力量,能与同伴一起欢笑的未来的力量,如果无法做到的话,那就无需继承,如果是这样的彭格列的话,那我亲手毁掉它!
  
                       欢迎加入我们的家族~
回复 支持 反对

使用道具 举报

Lv3.寻梦者

伴侣:北岛谜烟

梦石
0
星屑
3042
在线时间
3547 小时
注册时间
2012-8-7
帖子
12181

贵宾

6
发表于 2012-10-26 17:25:28 | 只看该作者
会不会发布到主站!

点评

不知道呢,如果能发布最好了,不能发布也没关系。只要能帮助到大家就行了。  发表于 2012-10-26 17:34
本人收不到提醒(点评|回复|@人),总之有事情到空间留言一起普通普通
回复 支持 反对

使用道具 举报

Lv3.寻梦者

双子人

梦石
0
星屑
3195
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

7
发表于 2012-10-26 17:52:01 | 只看该作者
所以说在XP里面为了实现一些功能,我会在原有的图块上面用脚本动手脚……

点评

是呀,我就是用这个判断的,喵~~这句脚本很强大。制作毒沼什么的都可以用它来判断~~  发表于 2012-10-26 18:01
[url=home.php?mod=space&username=protosssonny]@protosssonny[/url]可以用$game_map.data[x,y,i]来判断  发表于 2012-10-26 17:57
喵,XP也没有这功能,所以在图块上面动手脚是好办法。  发表于 2012-10-26 17:53
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
23
在线时间
585 小时
注册时间
2012-7-3
帖子
2123
8
发表于 2012-10-26 18:31:00 | 只看该作者
复杂区域脚本么..
如果要在同样区域有不同怪物战斗的话..
..这个脚本适合你..
应该多谢P叔..这个脚本会对人有帮助的..
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

9
发表于 2012-10-26 18:41:35 | 只看该作者
直接全部画在一张图然后脚本做条件分歧不就行了吗···

点评

直接画在一张图上的画,会消耗掉你的图块BCDE,比方说,你想在遇敌区域画一棵小草就不行了,因为位置已经被小石块的图块占据。  发表于 2012-10-26 18:49
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

Assassin-K

梦石
0
星屑
3623
在线时间
2281 小时
注册时间
2012-5-23
帖子
4065

贵宾

10
发表于 2012-10-26 18:50:24 | 只看该作者
P叔也快发给VA党们发布技术吧,喵!
VA区的发展壮大很需要一些和P叔一样,既有技术,又会卖萌的触手的说~

点评

P叔对VA真的不是很熟悉,如果P叔能把VA用得像VX一样熟练的话,一定会发布VA的技术的。话说现在VA区的问题被P叔和没是的人瓜分完了。静静等待中。  发表于 2012-10-26 18:54

◆ROZONE◆
>洛子又要去流浪地球了……
>如果你看到我在线,又没动静,那只能说明我在挂机……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-22 11:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表