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

Project1

 找回密码
 注册会员
搜索

有没有什么好点办法实现踏门就撩开黑雾。。

查看数: 2131 | 评论数: 5 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-10-14 19:02

正文摘要:

大家儿时不知道有木有玩过 FC的勇者斗恶龙呢??   没玩过也不打紧啦。。。 举个栗子 如此坑图所示   有一天勇者从1进入这个洞穴  。。。。。。。   忽然! 他发现 除 ...

回复

rjterry 发表于 2014-10-15 13:06:36
tseyik 发表于 2014-10-14 20:57
http://blog.livedoor.jp/kuremente-rgssscript/archives/32091238.html

哇哇。。 效果不错  而且 让2 同时可见 2和 1   3 同时可见  1 和 2  和 3   也可以做到  最主要是。。。省事啊。。。。    谢谢@VIPArcher  
tseyik 发表于 2014-10-14 20:57:36
本帖最后由 tseyik 于 2014-10-15 10:12 编辑

http://blog.livedoor.jp/kurement ... hives/32091238.html


範例

把ZERO_REGION_SEE_MODE = 0改成1

Project27.rar (312.45 KB, 下载次数: 91)
  1. #==============================================================================
  2. # ■リージョン可視領域設定 for RGSS3 Ver1.02-β
  3. # □作成者 kure
  4. #===============================================================================

  5. module KURE
  6.   module RegionSee
  7.     REGION_SEE = []
  8.     NORMAL_REGION = []
  9.     NORMAL_MAP = []
  10.    
  11.     #適用區域設定
  12.       #設定以角色中心可見的範囲(図塊)。
  13.       AREA_X = 30
  14.       AREA_Y = 30
  15.       
  16.       #設定不適用這設定之MAPID設定
  17.       NORMAL_MAP = []
  18.    
  19.     #通常區域
  20.     #已設置區設置不適用於
  21.     NORMAL_REGION = []
  22.    
  23.     ##設置多個區域
  24.     #REGION_SEE[區域編號]=和[可見區域]
  25.     REGION_SEE[6] = [1,2]
  26.     REGION_SEE[7] = [2,3]
  27.     REGION_SEE[8] = [2,4]
  28.     REGION_SEE[9] = [4,5]
  29.    
  30.     #未設置區域的處理方法
  31.    
  32.       #表示設定
  33.       # 0 = 進入己設定区域後変不可見
  34.       # 1 = 總是可見
  35.       ZERO_REGION_SEE_MODE = 0
  36.    
  37.       #動作処理
  38.       # 0 = 他のリージョンと同じ動作(リージョン未設定のみ見える)
  39.       # 1 = 全てのマスが見える
  40.       ZERO_REGION_ACT_MODE = 1
  41.    
  42.   end
  43. end


  44. #==============================================================================
  45. # ■ Sprite_Character
  46. #==============================================================================
  47. class Sprite_Character < Sprite_Base
  48.   #--------------------------------------------------------------------------
  49.   # ● その他の更新(再定義)
  50.   #--------------------------------------------------------------------------
  51.   def update_other
  52.     self.opacity = @character.opacity
  53.     self.blend_type = @character.blend_type
  54.     self.bush_depth = @character.bush_depth
  55.     self.visible = [email protected] && [email protected]
  56.   end
  57. end

  58. #==============================================================================
  59. # ■ Game_Map
  60. #==============================================================================
  61. class Game_Map
  62.   attr_accessor :keep_map_data            # マップデータ保存
  63.   #--------------------------------------------------------------------------
  64.   # ● セットアップ(エイリアス再定義)
  65.   #--------------------------------------------------------------------------
  66.   alias k_transcolor_before_setup setup
  67.   def setup(map_id)
  68.     k_transcolor_before_setup(map_id)
  69.     @keep_map_data = @map.data.clone
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 指定座標にあるタイル ID の取得(エイリアス再定義)
  73.   #--------------------------------------------------------------------------
  74.   alias k_transcolor_before_tile_id tile_id
  75.   def tile_id(x, y, z)
  76.     if @keep_map_data
  77.       return @keep_map_data[x, y, z] if @keep_map_data[x, y, z]
  78.       return 0 unless @keep_map_data[x, y, z]
  79.     end
  80.    
  81.     k_transcolor_before_tile_id(x, y, z)
  82.   end
  83. end

  84. #==============================================================================
  85. # ■ Game_CharacterBase
  86. #==============================================================================
  87. class Game_CharacterBase
  88.   attr_accessor :transparent2              # 透明状態  
  89. end

  90. #==============================================================================
  91. # ■ Game_Player
  92. #==============================================================================
  93. class Game_Player < Game_Character
  94.   attr_accessor :keep_passed_region            # リージョンID保存
  95.   #--------------------------------------------------------------------------
  96.   # ● 歩数増加(エイリアス再定義)
  97.   #--------------------------------------------------------------------------
  98.   alias k_transcolor_before_increase_steps increase_steps
  99.   def increase_steps
  100.     refresh_region_tile(@x, @y) unless KURE::RegionSee::NORMAL_MAP.include?($game_map.map_id)
  101.     k_transcolor_before_increase_steps
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 場所移動の実行(エイリアス再定義)
  105.   #--------------------------------------------------------------------------
  106.   alias k_transcolor_before_perform_transfer perform_transfer
  107.   def perform_transfer
  108.     keep_x = @new_x
  109.     keep_y = @new_y
  110.     keep_id = @new_map_id
  111.     keep_trans = 0
  112.     keep_trans = 1 if transfer?
  113.    
  114.     k_transcolor_before_perform_transfer

  115.     if keep_trans == 1
  116.       refresh_region_tile(keep_x, keep_y) unless KURE::RegionSee::NORMAL_MAP.include?(keep_id)
  117.     end
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● タイルの更新(追加定義)
  121.   #--------------------------------------------------------------------------
  122.   def refresh_region_tile(x,y)   
  123.     id = $game_map.region_id(x, y)
  124.    
  125.     if @keep_passed_region != id
  126.       @keep_passed_region = id
  127.       width = $game_map.width
  128.       height = $game_map.height
  129.       
  130.       
  131.       x1 = [0,@x - (KURE::RegionSee::AREA_X / 2).to_i].max
  132.       x2 = [@x + (KURE::RegionSee::AREA_X / 2).to_i,width].min
  133.       y1 = [0,@y - (KURE::RegionSee::AREA_Y / 2).to_i].max
  134.       y2 = [@y + (KURE::RegionSee::AREA_Y / 2).to_i,height].min
  135.       
  136.       rigion_area = Array.new
  137.       #指定リージョンのエリアのみを取得
  138.       for w in x1..x2
  139.         for h in y1..y2
  140.           see = 0
  141.           event = $game_map.events_xy(w,h)
  142.           see = 1 if $game_map.region_id(w, h) == @keep_passed_region
  143.          
  144.           #リージョンの設定
  145.           if KURE::RegionSee::REGION_SEE[@keep_passed_region]
  146.             see = 1 if KURE::RegionSee::REGION_SEE[@keep_passed_region].include?($game_map.region_id(w, h))
  147.           end
  148.          
  149.           #0リージョン上では全てが見える設定の場合
  150.           if @keep_passed_region == 0
  151.             see = 1 if KURE::RegionSee::ZERO_REGION_ACT_MODE == 1
  152.           end
  153.          
  154.           see = 1 if KURE::RegionSee::NORMAL_REGION.include?(@keep_passed_region)
  155.             
  156.           #0リージョンは常に見える設定の場合
  157.           if $game_map.region_id(w, h) == 0
  158.             see = 2 if KURE::RegionSee::ZERO_REGION_SEE_MODE == 1
  159.           end
  160.          
  161.           rigion_area.push([w,h,see]) if see != 0
  162.          
  163.           #一旦タイルイベントを消去
  164.           $game_map.data[w, h, 0] = 0
  165.           $game_map.data[w, h, 1] = 0
  166.           $game_map.data[w, h, 2] = 0
  167.             
  168.           event.each do |ev|
  169.             ev.transparent2 = true
  170.           end
  171.          
  172.         end
  173.       end
  174.       
  175.       #見える範囲を適用する
  176.       rigion_area.each do |area|
  177.         if area[2] == 1
  178.           s_x_area1 = [0,area[0] - 1].max
  179.           s_x_area2 = [width,area[0] + 1].min
  180.           s_y_area1 = [0,area[1] - 1].max
  181.           s_y_area2 = [height,area[1] + 1].min
  182.         
  183.           for sw in s_x_area1..s_x_area2
  184.             for sy in s_y_area1..s_y_area2
  185.               #タイルイベントを復活
  186.               event = $game_map.events_xy(sw,sy)
  187.               $game_map.data[sw, sy, 0] = $game_map.keep_map_data[sw, sy, 0]
  188.               $game_map.data[sw, sy, 1] = $game_map.keep_map_data[sw, sy, 1]
  189.               $game_map.data[sw, sy, 2] = $game_map.keep_map_data[sw, sy, 2]
  190.             
  191.               event.each do |ev|
  192.                   ev.transparent2 = false
  193.               end
  194.               
  195.             end
  196.           end
  197.          
  198.         elsif area[2] == 2
  199.           sw = area[0]
  200.           sy = area[1]
  201.           event = $game_map.events_xy(sw,sy)
  202.           $game_map.data[sw, sy, 0] = $game_map.keep_map_data[sw, sy, 0]
  203.           $game_map.data[sw, sy, 1] = $game_map.keep_map_data[sw, sy, 1]
  204.           $game_map.data[sw, sy, 2] = $game_map.keep_map_data[sw, sy, 2]
  205.             
  206.           event.each do |ev|
  207.             ev.transparent2 = false
  208.           end
  209.         
  210.         end
  211.       end
  212.          
  213.     end
  214.   end
  215.   
  216. end
复制代码

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 认可答案

查看全部评分

rjterry 发表于 2014-10-14 20:39:46
VIPArcher 发表于 2014-10-14 19:48
嗯,你可以试试我想到的一个小办法,就是用图片遮罩。事件来决定是否显示某张遮罩图,你会比较辛苦。自己看 ...

嗯。。。。应该比我想到办法好使。。    看来用事件解决这样的问题 似乎还是比较费力啊。
双叶GL 发表于 2014-10-14 20:27:06
本帖最后由 双叶GL 于 2014-10-14 20:37 编辑

好像,添加行走图,然后固定朝向
最上方显示允许穿透
可以模拟出来呢



建议用32*32然后3的倍数作为遮盖,不然会自动平衡
所以用96*96就可以了


另外想要用脚本做的话,可以做到,具体方法,我线占坑

{J7EZ69GGNFNSCP(VZO([email protected] (328.67 KB, 下载次数: 37)

{J7EZ69GGNFNSCP(VZO(N@X.jpg

G%`@{481]TOZK`FM`X~_%WJ.png (72.13 KB, 下载次数: 37)

G%`@{481]TOZK`FM`X~_%WJ.png

M277)F0J)U3@@09OX7}RH13.jpg (456.49 KB, 下载次数: 37)

M277)F0J)U3@@09OX7}RH13.jpg

点评

哦 哦 。。 刚看到 你后编辑的。。 感觉 还不错的样子 我试试  发表于 2014-10-14 20:47
没太懂。。。  发表于 2014-10-14 20:40
VIPArcher 发表于 2014-10-14 19:48:28
嗯,你可以试试我想到的一个小办法,就是用图片遮罩。事件来决定是否显示某张遮罩图,你会比较辛苦。自己看着办吧。(ULDS无限图层系统也许可以降低一些工作量。
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-22 16:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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