Project1

标题: 【教程】如何制作沼泽地图块 [打印本页]

作者: 怪蜀黍    时间: 2011-7-24 13:43
标题: 【教程】如何制作沼泽地图块
本帖最后由 protosssonny 于 2013-7-13 20:01 编辑

我搜索了本站的帖子,关于“沼泽”的帖子基本没有,而关于“我所谓的沼泽”的帖子数量为0!
所以我今天来弥补这个空缺!
帖子很长,但是不要因此就不看,对你有帮助的。想想,我都有写的工夫,你难道还没看的工夫吗?是吧?其实内容很简单。
首先我解释关键词“我所谓的沼泽”:即是一种地图图块,走在上面的时候就会全体队员的HP减少一定的数值。相信大家玩过这么多RPG游戏,对这种地形一定都了解,比如FC游戏中的《吞食天地》《勇者斗恶龙》等都有这类地形的设计。
下面就来教大家怎么来制作这种地形效果。一共分三步,非常简单
第一步:选择TileA5.png中的一个图块作为沼泽图块,并替换成沼泽的地形图案。
我选择的替换是截图的第2行最后一个图块。如图:


第二步:添加一处脚本。但是为了防止某些同学伸手过长,没有把修改后脚本整合,这个工作请大家各自完成。
Game_Map类下面有个:
  1.   #--------------------------------------------------------------------------
  2.   # ● 判断草木繁茂处
  3.   #     x : X 坐标
  4.   #     y : Y 坐标
  5.   #--------------------------------------------------------------------------
  6.   def bush?(x, y)
  7.     return false unless valid?(x, y)
  8.     return @passages[@map.data[x, y, 1]] & 0x40 == 0x40
  9.   end
复制代码
我们仿照这个脚本,添加一个类似的定义,即在这个脚本的后面加上:
  1.   #--------------------------------------------------------------------------
  2.   # ● 判断沼泽
  3.   #     x : X 坐标
  4.   #     y : Y 坐标
  5.   #--------------------------------------------------------------------------
  6.   def moor?(x, y)
  7.     return false unless valid?(x, y)
  8.     return true if $game_map.data[x, y, 0] == 1631  
  9.   end  
复制代码
这样我们就把沼泽定义好了。解释一下1631,这个数字代表我的截图第2行最后一个图块的位置的代号。假如你替换沼泽的图块和我的图块位置不同,那么可以按照本文最后的注释设置,现在先不打岔。
第三步:修改一处脚本。
在Game_Player类下面有一个:
  1.   #--------------------------------------------------------------------------
  2.   # ● 更新遇敌
  3.   #--------------------------------------------------------------------------
  4.   def update_encounter
  5.     return if $TEST and Input.press?(Input::CTRL)   # 正在显示?
  6.     return if in_vehicle?                           # 乘座了交通工具?
  7.     if $game_map.bush?(@x, @y)                      # 繁茂
  8.       @encounter_count -= 2                         # 计数减少 2
  9.     else                                            # 繁茂以外的情况
  10.       @encounter_count -= 1                         # 计数减少 1
  11.     end
  12.   end
复制代码
我们添加几行,使它变成这样:
  1.   #--------------------------------------------------------------------------
  2.   # ● 更新遇敌
  3.   #--------------------------------------------------------------------------
  4.   def update_encounter
  5.     return if $TEST and Input.press?(Input::CTRL)   # 测试游戏中
  6.     return if in_vehicle?                           # 乘坐交通工具中
  7.     if $game_map.bush?(@x, @y)                      # 在草木繁茂处
  8.       @encounter_count -= 2                         # 将遇敌计数减2
  9.     else                                            # 否则
  10.       @encounter_count -= 1                         # 将遇敌计数减1
  11.     end
  12.     if $game_map.moor?(@x, @y)                      # 在沼泽
  13.       $game_map.screen.start_flash(Color.new(255,0,0,255),5)
  14.       Audio.se_play("Audio/SE/" + "Wind10", 100, 100)
  15.       for i in $game_party.members
  16.         a = i.maxhp / 15
  17.         a = a == 0 ? 1 : a
  18.         if i.hp > a and i.hp != 0
  19.           i.hp -= a
  20.         else
  21.           i.hp = 1
  22.         end
  23.       end
  24.     end
  25.   end
复制代码
这里解释一下“a”,它代表每走一步全员减少的HP数值,你们可以根据需要设置成别的数字,我这里是每走一步减少最大HP的1/15。至于前面的1...4中的“4”代表队员数,假如你的队伍由3人组成就改成3,5人就改成5。(这里请参考一下2楼的办法)
好了,设置完成了。是不是很简单啊?测试一下吧,效果真的很理想哦!

游戏效果(普通):

走在沼泽上:


最后希望高手们勿喷,其实我是一个好人,其实我只是想把自己学会的东西分享给大家而已。

文章末尾附加注释:
假如你替换沼泽的图块和我的图块位置不同,那么可以在地图上画出你所替换的图块,然后在这个把代码加一行变成这样:
  1.   #--------------------------------------------------------------------------
  2.   # ● 判断沼泽
  3.   #     x : X 坐标
  4.   #     y : Y 坐标
  5.   #--------------------------------------------------------------------------
  6.   def moor?(x, y)
  7.     return false unless valid?(x, y)
  8.     #return true if $game_map.data[x, y, 0] == 1631  
  9.     p $game_map.data[x, y, 0]
  10.   end  
复制代码
即显示沼泽图块的代码,然后你把角色走到你地图上画的沼泽处,它弹出对话框中的数字就是沼泽图块的代号,替换脚本中的1631,删除1631这行开头的“#”符号,再删除p $game_map.map.data[x, y, 0]这行即可!


作者: 仲秋启明    时间: 2011-7-24 13:50
“我所谓的沼泽”又叫“毒沼”搜索可见
作者: 月夜神音    时间: 2011-7-24 13:55
挺不错的,之前还想用公共事件来完成的~

不过关于那个update_encounter里的
for i in 1...4
换成
for i in 0..$game_party.members.size(这是用来计算队伍人数用的)
然后下面的$game_actors[i]全部换成$game_party.members[i],
会比较好~
作者: 黑之翅膀    时间: 2011-11-2 04:56
原谅我一次吧


作者: makinoa    时间: 2011-11-2 12:09
学习一下,希望对我有帮助
作者: 珍珠利特    时间: 2012-7-9 13:40
话说我这个菜鸟问一下,脚本插在哪里啊。。。
作者: q1270524984    时间: 2013-2-23 10:56
VA就有嘛!喵!




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