Project1

标题: 直接用地图做战斗背景(多层远景图版本)完美版本 [打印本页]

作者: ikki    时间: 2006-11-16 21:24
标题: 直接用地图做战斗背景(多层远景图版本)完美版本
既然有人缺,那就发出来了,呵呵,其实很简单的哦和默认的那个改的位置一样。
这个是双层远景的。

  1. #===============================================================
  2. # 本脚本来自www.66rpg.com
  3. # 功能:对于没有设置战斗背景的地图,直接用地图做战斗背景
  4. #===============================================================
  5. #==============================================================================
  6. # 本脚本来自www.66rpg.com,使用前请参考制作录像
  7. #==============================================================================
  8. # ■ Spriteset_Map
  9. #------------------------------------------------------------------------------
  10. #  处理地图画面活动块和元件的类。本类在
  11. # Scene_Map 类的内部使用。
  12. #==============================================================================

  13. class Spriteset_Map
  14.   #--------------------------------------------------------------------------
  15.   # ● 初始化对像
  16.   #--------------------------------------------------------------------------
  17.   def initialize(flag = false)
  18.     # 生成显示端口
  19.     @viewport1 = Viewport.new(0, 0, 640, 480)
  20.     @viewport2 = Viewport.new(0, 0, 640, 480)
  21.     @viewport3 = Viewport.new(0, 0, 640, 480)
  22.     @viewport2.z = 200
  23.     @viewport3.z = 5000
  24.     # 生成元件地图
  25.     @tilemap = Tilemap.new(@viewport1)
  26.     @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  27.     for i in 0..6
  28.       autotile_name = $game_map.autotile_names[i]
  29.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  30.     end
  31.     @tilemap.map_data = $game_map.data
  32.     @tilemap.priorities = $game_map.priorities
  33.     # 生成远景平面
  34.     @panorama = Plane.new(@viewport1)
  35.     @panorama.z = -1000
  36.     @panorama2 = Plane.new(@viewport1)
  37.     @panorama2.z = 3000
  38.     # 生成雾平面
  39.     @fog = Plane.new(@viewport1)
  40.     @fog.z = 3000
  41.     unless flag
  42.       # 生成角色活动块
  43.       @character_sprites = []
  44.       for i in $game_map.events.keys.sort
  45.         sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  46.         @character_sprites.push(sprite)
  47.       end
  48.       @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  49.     end
  50.     # 生成天气
  51.     @weather = RPG::Weather.new(@viewport1)
  52.     # 生成图片
  53.     @picture_sprites = []
  54.     for i in 1..50
  55.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  56.         $game_screen.pictures[i]))
  57.     end
  58.     # 生成计时器块
  59.     @timer_sprite = Sprite_Timer.new
  60.     # 刷新画面
  61.     update
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 释放
  65.   #--------------------------------------------------------------------------
  66.   def dispose(flag = false)
  67.     # 释放元件地图
  68.     @tilemap.tileset.dispose
  69.     for i in 0..6
  70.       @tilemap.autotiles[i].dispose
  71.     end
  72.     @tilemap.dispose
  73.     # 释放远景平面
  74.     @panorama.dispose
  75.     @panorama2.dispose
  76.     # 释放雾平面
  77.     @fog.dispose
  78.     unless flag
  79.      # 释放角色活动块
  80.      for sprite in @character_sprites
  81.        sprite.dispose
  82.      end
  83.     end
  84.     # 释放天候
  85.     @weather.dispose
  86.     # 释放图片
  87.     for sprite in @picture_sprites
  88.       sprite.dispose
  89.     end
  90.     # 释放计时器块
  91.     @timer_sprite.dispose
  92.     # 释放显示端口
  93.     @viewport1.dispose
  94.     @viewport2.dispose
  95.     @viewport3.dispose
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● 刷新画面
  99.   #--------------------------------------------------------------------------
  100.   def update
  101.     # 远景与现在的情况有差异发情况下
  102.     if @panorama_name != $game_map.panorama_name or
  103.        @panorama_hue != $game_map.panorama_hue
  104.       @panorama_name = $game_map.panorama_name
  105.       @panorama_hue = $game_map.panorama_hue
  106.       if @panorama.bitmap != nil
  107.         @panorama.bitmap.dispose
  108.         @panarama2.bitmap.dispose
  109.         @panorama2.bitmap = nil
  110.         @panarama.bitmap = nil
  111.       end
  112.       if @panorama_name != ""
  113.         @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  114.         @panorama2.bitmap = RPG::Cache.panorama(@panorama_name+"_2", @panorama_hue)
  115.       end
  116.       Graphics.frame_reset
  117.     end
  118.     # 雾与现在的情况有差异的情况下
  119.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  120.       @fog_name = $game_map.fog_name
  121.       @fog_hue = $game_map.fog_hue
  122.       if @fog.bitmap != nil
  123.         @fog.bitmap.dispose
  124.         @fog.bitmap = nil
  125.       end
  126.       if @fog_name != ""
  127.         @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  128.       end
  129.       Graphics.frame_reset
  130.     end
  131.     # 刷新元件地图
  132.     @tilemap.ox = $game_map.display_x / 4
  133.     @tilemap.oy = $game_map.display_y / 4
  134.     @tilemap.update
  135.     # 刷新远景平面
  136.     @panorama.ox = $game_map.display_x / 4
  137.     @panorama.oy = $game_map.display_y / 4
  138.     @panorama2.ox = @panorama.ox
  139.     @panorama2.oy = @panorama.oy
  140.     # 刷新雾平面
  141.     @fog.zoom_x = $game_map.fog_zoom / 100.0
  142.     @fog.zoom_y = $game_map.fog_zoom / 100.0
  143.     @fog.opacity = $game_map.fog_opacity
  144.     @fog.blend_type = $game_map.fog_blend_type
  145.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  146.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  147.     @fog.tone = $game_map.fog_tone
  148.     # 刷新角色活动块
  149.   if @character_sprites != nil
  150.     for sprite in @character_sprites
  151.       sprite.update
  152.     end
  153.   end
  154.     # 刷新天候图形
  155.     @weather.type = $game_screen.weather_type
  156.     @weather.max = $game_screen.weather_max
  157.     @weather.ox = $game_map.display_x / 4
  158.     @weather.oy = $game_map.display_y / 4
  159.     @weather.update
  160.     # 刷新图片
  161.     for sprite in @picture_sprites
  162.       sprite.update
  163.     end
  164.     # 刷新计时器块
  165.     @timer_sprite.update
  166.     # 设置画面的色调与震动位置
  167.     @viewport1.tone = $game_screen.tone
  168.     @viewport1.ox = $game_screen.shake
  169.     # 设置画面的闪烁色
  170.     @viewport3.color = $game_screen.flash_color
  171.     # 刷新显示端口
  172.     @viewport1.update
  173.     @viewport3.update
  174.   end
  175. end

  176. class Scene_Battle
  177. alias battleback_map_main main
  178. def main
  179.   @battleback_sprite = Spriteset_Map.new(true)
  180.   battleback_map_main
  181.   @battleback_sprite.dispose(true)
  182. end
  183. end
  184. #===============================================================
  185. # 申请者:张永;脚本作者:bluefool 改进人:亿万星辰  完美化:IKKI
  186. #===============================================================


复制代码


              [本贴由 雷欧纳德 于 2006-11-20 19:00:29 进行了编辑]
作者: ikki    时间: 2006-11-16 21:24
标题: 直接用地图做战斗背景(多层远景图版本)完美版本
既然有人缺,那就发出来了,呵呵,其实很简单的哦和默认的那个改的位置一样。
这个是双层远景的。

  1. #===============================================================
  2. # 本脚本来自www.66rpg.com
  3. # 功能:对于没有设置战斗背景的地图,直接用地图做战斗背景
  4. #===============================================================
  5. #==============================================================================
  6. # 本脚本来自www.66rpg.com,使用前请参考制作录像
  7. #==============================================================================
  8. # ■ Spriteset_Map
  9. #------------------------------------------------------------------------------
  10. #  处理地图画面活动块和元件的类。本类在
  11. # Scene_Map 类的内部使用。
  12. #==============================================================================

  13. class Spriteset_Map
  14.   #--------------------------------------------------------------------------
  15.   # ● 初始化对像
  16.   #--------------------------------------------------------------------------
  17.   def initialize(flag = false)
  18.     # 生成显示端口
  19.     @viewport1 = Viewport.new(0, 0, 640, 480)
  20.     @viewport2 = Viewport.new(0, 0, 640, 480)
  21.     @viewport3 = Viewport.new(0, 0, 640, 480)
  22.     @viewport2.z = 200
  23.     @viewport3.z = 5000
  24.     # 生成元件地图
  25.     @tilemap = Tilemap.new(@viewport1)
  26.     @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  27.     for i in 0..6
  28.       autotile_name = $game_map.autotile_names[i]
  29.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  30.     end
  31.     @tilemap.map_data = $game_map.data
  32.     @tilemap.priorities = $game_map.priorities
  33.     # 生成远景平面
  34.     @panorama = Plane.new(@viewport1)
  35.     @panorama.z = -1000
  36.     @panorama2 = Plane.new(@viewport1)
  37.     @panorama2.z = 3000
  38.     # 生成雾平面
  39.     @fog = Plane.new(@viewport1)
  40.     @fog.z = 3000
  41.     unless flag
  42.       # 生成角色活动块
  43.       @character_sprites = []
  44.       for i in $game_map.events.keys.sort
  45.         sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  46.         @character_sprites.push(sprite)
  47.       end
  48.       @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  49.     end
  50.     # 生成天气
  51.     @weather = RPG::Weather.new(@viewport1)
  52.     # 生成图片
  53.     @picture_sprites = []
  54.     for i in 1..50
  55.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  56.         $game_screen.pictures[i]))
  57.     end
  58.     # 生成计时器块
  59.     @timer_sprite = Sprite_Timer.new
  60.     # 刷新画面
  61.     update
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 释放
  65.   #--------------------------------------------------------------------------
  66.   def dispose(flag = false)
  67.     # 释放元件地图
  68.     @tilemap.tileset.dispose
  69.     for i in 0..6
  70.       @tilemap.autotiles[i].dispose
  71.     end
  72.     @tilemap.dispose
  73.     # 释放远景平面
  74.     @panorama.dispose
  75.     @panorama2.dispose
  76.     # 释放雾平面
  77.     @fog.dispose
  78.     unless flag
  79.      # 释放角色活动块
  80.      for sprite in @character_sprites
  81.        sprite.dispose
  82.      end
  83.     end
  84.     # 释放天候
  85.     @weather.dispose
  86.     # 释放图片
  87.     for sprite in @picture_sprites
  88.       sprite.dispose
  89.     end
  90.     # 释放计时器块
  91.     @timer_sprite.dispose
  92.     # 释放显示端口
  93.     @viewport1.dispose
  94.     @viewport2.dispose
  95.     @viewport3.dispose
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● 刷新画面
  99.   #--------------------------------------------------------------------------
  100.   def update
  101.     # 远景与现在的情况有差异发情况下
  102.     if @panorama_name != $game_map.panorama_name or
  103.        @panorama_hue != $game_map.panorama_hue
  104.       @panorama_name = $game_map.panorama_name
  105.       @panorama_hue = $game_map.panorama_hue
  106.       if @panorama.bitmap != nil
  107.         @panorama.bitmap.dispose
  108.         @panarama2.bitmap.dispose
  109.         @panorama2.bitmap = nil
  110.         @panarama.bitmap = nil
  111.       end
  112.       if @panorama_name != ""
  113.         @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  114.         @panorama2.bitmap = RPG::Cache.panorama(@panorama_name+"_2", @panorama_hue)
  115.       end
  116.       Graphics.frame_reset
  117.     end
  118.     # 雾与现在的情况有差异的情况下
  119.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  120.       @fog_name = $game_map.fog_name
  121.       @fog_hue = $game_map.fog_hue
  122.       if @fog.bitmap != nil
  123.         @fog.bitmap.dispose
  124.         @fog.bitmap = nil
  125.       end
  126.       if @fog_name != ""
  127.         @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  128.       end
  129.       Graphics.frame_reset
  130.     end
  131.     # 刷新元件地图
  132.     @tilemap.ox = $game_map.display_x / 4
  133.     @tilemap.oy = $game_map.display_y / 4
  134.     @tilemap.update
  135.     # 刷新远景平面
  136.     @panorama.ox = $game_map.display_x / 4
  137.     @panorama.oy = $game_map.display_y / 4
  138.     @panorama2.ox = @panorama.ox
  139.     @panorama2.oy = @panorama.oy
  140.     # 刷新雾平面
  141.     @fog.zoom_x = $game_map.fog_zoom / 100.0
  142.     @fog.zoom_y = $game_map.fog_zoom / 100.0
  143.     @fog.opacity = $game_map.fog_opacity
  144.     @fog.blend_type = $game_map.fog_blend_type
  145.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  146.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  147.     @fog.tone = $game_map.fog_tone
  148.     # 刷新角色活动块
  149.   if @character_sprites != nil
  150.     for sprite in @character_sprites
  151.       sprite.update
  152.     end
  153.   end
  154.     # 刷新天候图形
  155.     @weather.type = $game_screen.weather_type
  156.     @weather.max = $game_screen.weather_max
  157.     @weather.ox = $game_map.display_x / 4
  158.     @weather.oy = $game_map.display_y / 4
  159.     @weather.update
  160.     # 刷新图片
  161.     for sprite in @picture_sprites
  162.       sprite.update
  163.     end
  164.     # 刷新计时器块
  165.     @timer_sprite.update
  166.     # 设置画面的色调与震动位置
  167.     @viewport1.tone = $game_screen.tone
  168.     @viewport1.ox = $game_screen.shake
  169.     # 设置画面的闪烁色
  170.     @viewport3.color = $game_screen.flash_color
  171.     # 刷新显示端口
  172.     @viewport1.update
  173.     @viewport3.update
  174.   end
  175. end

  176. class Scene_Battle
  177. alias battleback_map_main main
  178. def main
  179.   @battleback_sprite = Spriteset_Map.new(true)
  180.   battleback_map_main
  181.   @battleback_sprite.dispose(true)
  182. end
  183. end
  184. #===============================================================
  185. # 申请者:张永;脚本作者:bluefool 改进人:亿万星辰  完美化:IKKI
  186. #===============================================================


复制代码


              [本贴由 雷欧纳德 于 2006-11-20 19:00:29 进行了编辑]
作者: ikki    时间: 2006-11-16 21:53
再来一个三层远景图的直接用地图做战斗背景

  1. #==============================================================================
  2. # 本脚本来自www.66rpg.com,使用前请参考制作录像
  3. # 作者:柳柳
  4. #
  5. # 脚本的功能:
  6. #
  7. # 1、设置第二层远景,做遮挡
  8. # 2、设置第三层远景,做通行判定
  9. #    这个通行判定,以图的判定为最高,如果要求某地通行,请把那个地方擦白。
  10. #    本通行判定和录像中讲的方法并不冲突
  11. #==============================================================================
  12. # ■ Spriteset_Map
  13. #------------------------------------------------------------------------------
  14. #  处理地图画面活动块和元件的类。本类在
  15. # Scene_Map 类的内部使用。
  16. #==============================================================================

  17. class Spriteset_Map
  18.   #--------------------------------------------------------------------------
  19.   # ● 初始化对像
  20.   #--------------------------------------------------------------------------
  21.   def initialize(flag = false)
  22.     # 生成显示端口
  23.     @viewport1 = Viewport.new(0, 0, 640, 480)
  24.     @viewport2 = Viewport.new(0, 0, 640, 480)
  25.     @viewport3 = Viewport.new(0, 0, 640, 480)
  26.     @viewport2.z = 200
  27.     @viewport3.z = 5000
  28.     # 生成元件地图
  29.     @tilemap = Tilemap.new(@viewport1)
  30.     @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  31.     for i in 0..6
  32.       autotile_name = $game_map.autotile_names[i]
  33.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  34.     end
  35.     @tilemap.map_data = $game_map.data
  36.     @tilemap.priorities = $game_map.priorities
  37.     # 生成远景平面
  38.     @panorama = Plane.new(@viewport1)
  39.     @panorama.z = -1000
  40.     @panorama2 = Plane.new(@viewport1)
  41.     @panorama2.z = 3000
  42.     # 生成雾平面
  43.     @fog = Plane.new(@viewport1)
  44.     @fog.z = 3000
  45.     unless flag
  46.       # 生成角色活动块
  47.       @character_sprites = []
  48.       for i in $game_map.events.keys.sort
  49.         sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  50.         @character_sprites.push(sprite)
  51.       end
  52.       @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  53.     end
  54.     # 生成天气
  55.     @weather = RPG::Weather.new(@viewport1)
  56.     # 生成图片
  57.     @picture_sprites = []
  58.     for i in 1..50
  59.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  60.         $game_screen.pictures[i]))
  61.     end
  62.     # 生成计时器块
  63.     @timer_sprite = Sprite_Timer.new
  64.     # 刷新画面
  65.     update
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 释放
  69.   #--------------------------------------------------------------------------
  70.   def dispose(flag = false)
  71.     # 释放元件地图
  72.     @tilemap.tileset.dispose
  73.     for i in 0..6
  74.       @tilemap.autotiles[i].dispose
  75.     end
  76.     @tilemap.dispose
  77.     # 释放远景平面
  78.     @panorama.dispose
  79.     @panorama2.dispose
  80.     # 释放雾平面
  81.     @fog.dispose
  82.     unless flag
  83.       # 释放角色活动块
  84.       for sprite in @character_sprites
  85.         sprite.dispose
  86.       end
  87.     end
  88.     # 释放天候
  89.     @weather.dispose
  90.     # 释放图片
  91.     for sprite in @picture_sprites
  92.       sprite.dispose
  93.     end
  94.     # 释放计时器块
  95.     @timer_sprite.dispose
  96.     # 释放显示端口
  97.     @viewport1.dispose
  98.     @viewport2.dispose
  99.     @viewport3.dispose
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 刷新画面
  103.   #--------------------------------------------------------------------------
  104.   def update
  105.     # 远景与现在的情况有差异发情况下
  106.     if @panorama_name != $game_map.panorama_name or
  107.        @panorama_hue != $game_map.panorama_hue
  108.       @panorama_name = $game_map.panorama_name
  109.       @panorama_hue = $game_map.panorama_hue
  110.       if @panorama.bitmap != nil        
  111.         @panorama.bitmap.dispose
  112.         @panarama2.bitmap.dispose
  113.         @panorama2.bitmap = nil
  114.         @panarama.bitmap = nil
  115.       end
  116.       if @panorama_name != ""
  117.         if $panorama3 != nil
  118.          $panorama3.dispose
  119.        end
  120.         $panorama3 = Sprite.new
  121.         $panorama3.bitmap = RPG::Cache.panorama(@panorama_name+"_3", @panorama_hue)
  122.         $panorama3.visible = false
  123.         @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  124.         @panorama2.bitmap = RPG::Cache.panorama(@panorama_name+"_2", @panorama_hue)
  125.       end
  126.       Graphics.frame_reset
  127.     end
  128.     # 雾与现在的情况有差异的情况下
  129.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  130.       @fog_name = $game_map.fog_name
  131.       @fog_hue = $game_map.fog_hue
  132.       if @fog.bitmap != nil
  133.         @fog.bitmap.dispose
  134.         @fog.bitmap = nil
  135.       end
  136.       if @fog_name != ""
  137.         @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  138.       end
  139.       Graphics.frame_reset
  140.     end
  141.     # 刷新元件地图
  142.     @tilemap.ox = $game_map.display_x / 4
  143.     @tilemap.oy = $game_map.display_y / 4
  144.     @tilemap.update
  145.     # 刷新远景平面
  146.     @panorama.ox = $game_map.display_x / 4
  147.     @panorama.oy = $game_map.display_y / 4
  148.     @panorama2.ox = @panorama.ox
  149.     @panorama2.oy = @panorama.oy
  150.     # 刷新雾平面
  151.     @fog.zoom_x = $game_map.fog_zoom / 100.0
  152.     @fog.zoom_y = $game_map.fog_zoom / 100.0
  153.     @fog.opacity = $game_map.fog_opacity
  154.     @fog.blend_type = $game_map.fog_blend_type
  155.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  156.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  157.     @fog.tone = $game_map.fog_tone
  158.     if @character_sprites != nil
  159.       # 刷新角色活动块
  160.       for sprite in @character_sprites
  161.         sprite.update
  162.       end
  163.     end
  164.     # 刷新天候图形
  165.     @weather.type = $game_screen.weather_type
  166.     @weather.max = $game_screen.weather_max
  167.     @weather.ox = $game_map.display_x / 4
  168.     @weather.oy = $game_map.display_y / 4
  169.     @weather.update
  170.     # 刷新图片
  171.     for sprite in @picture_sprites
  172.       sprite.update
  173.     end
  174.     # 刷新计时器块
  175.     @timer_sprite.update
  176.     # 设置画面的色调与震动位置
  177.     @viewport1.tone = $game_screen.tone
  178.     @viewport1.ox = $game_screen.shake
  179.     # 设置画面的闪烁色
  180.     @viewport3.color = $game_screen.flash_color
  181.     # 刷新显示端口
  182.     @viewport1.update
  183.     @viewport3.update
  184.   end
  185. end
  186. #==============================================================================
  187. # 本脚本来自www.66rpg.com,使用前请参考制作录像
  188. #==============================================================================
  189. #==============================================================================
  190. # ■ Game_Map
  191. #------------------------------------------------------------------------------
  192. #  处理地图的类。包含卷动以及可以通行的判断功能。
  193. # 本类的实例请参考 $game_map 。
  194. #==============================================================================
  195. class Game_Map
  196.   attr_accessor :map
  197.   attr_accessor :map_id
  198.     #--------------------------------------------------------------------------
  199.   # ● 可以通行判定
  200.   #     x          : X 坐标
  201.   #     y          : Y 坐标
  202.   #     d          : 方向 (0,2,4,6,8,10)
  203.   #                  ※ 0,10 = 全方向不能通行的情况的判定 (跳跃等)
  204.   #     self_event : 自己 (判定事件可以通行的情况下)
  205.   #--------------------------------------------------------------------------
  206.   def passable?(x, y, d, self_event = nil)
  207.     # 被给予的坐标地图外的情况下
  208.     unless valid?(x, y)
  209.       # 不能通行
  210.       return false
  211.     end
  212.     martix = [false,false,false,false,false,false,false,false,false]
  213.     for panorama_x in 32*x..32*x+10
  214.       next if panorama_x %2 == 0
  215.       for panorama_y in 32*y..32*y+10
  216.         next if panorama_y %2 == 0
  217.         color = $panorama3.bitmap.get_pixel(panorama_x,panorama_y)
  218.         if color.green.to_i==0
  219.           martix[0] = true
  220.           break
  221.         end
  222.       end
  223.       break if martix[0]
  224.     end
  225.     for panorama_x in 32*x+10..32*x+22
  226.       next if panorama_x %2 == 0
  227.       for panorama_y in 32*y..32*y+10
  228.       next if panorama_y %2 == 0
  229.         color = $panorama3.bitmap.get_pixel(panorama_x,panorama_y)
  230.         if color.green.to_i==0
  231.           martix[1] = true
  232.           break
  233.         end
  234.       end
  235.       break if martix[1]
  236.     end
  237.     for panorama_x in 32*x+23..32*x+32
  238.       next if panorama_x %2 == 0
  239.       for panorama_y in 32*y..32*y+10
  240.       next if panorama_x %y == 0
  241.         color = $panorama3.bitmap.get_pixel(panorama_x,panorama_y)
  242.         if color.green.to_i==0
  243.           martix[2] = true
  244.           break
  245.         end
  246.       end
  247.       break if martix[2]
  248.     end
  249.     for panorama_x in 32*x..32*x+10
  250.       next if panorama_x %2 == 0
  251.       for panorama_y in 32*y+10..32*y+22
  252.         next if panorama_y %2 == 0
  253.         color = $panorama3.bitmap.get_pixel(panorama_x,panorama_y)
  254.         if color.green.to_i==0
  255.           martix[3] = true
  256.           break
  257.         end
  258.       end
  259.       break if martix[3]
  260.     end
  261.     for panorama_x in 32*x+10..32*x+22
  262.       next if panorama_x %2 == 0
  263.       for panorama_y in 32*y+10..32*y+22
  264.       next if panorama_y %2 == 0
  265.         color = $panorama3.bitmap.get_pixel(panorama_x,panorama_y)
  266.         if color.green.to_i==0
  267.           martix[4] = true
  268.           break
  269.         end
  270.       end
  271.       break if martix[4]
  272.     end
  273.     for panorama_x in 32*x+23..32*x+32
  274.       next if panorama_x %2 == 0
  275.       for panorama_y in 32*y+10..32*y+22
  276.       next if panorama_x %y == 0
  277.         color = $panorama3.bitmap.get_pixel(panorama_x,panorama_y)
  278.         if color.green.to_i==0
  279.           martix[5] = true
  280.           break
  281.         end
  282.       end
  283.       break if martix[5]
  284.     end
  285.     for panorama_x in 32*x..32*x+10
  286.       next if panorama_x %2 == 0
  287.       for panorama_y in 32*y+23..32*y+32
  288.         next if panorama_y %2 == 0
  289.         color = $panorama3.bitmap.get_pixel(panorama_x,panorama_y)
  290.         if color.green.to_i==0
  291.           martix[6] = true
  292.           break
  293.         end
  294.       end
  295.       break if martix[6]
  296.     end
  297.     for panorama_x in 32*x+10..32*x+22
  298.       next if panorama_x %2 == 0
  299.       for panorama_y in 32*y+23..32*y+32
  300.       next if panorama_y %2 == 0
  301.         color = $panorama3.bitmap.get_pixel(panorama_x,panorama_y)
  302.         if color.green.to_i==0
  303.           martix[7] = true
  304.           break
  305.         end
  306.       end
  307.       break if martix[7]
  308.     end
  309.     for panorama_x in 32*x+23..32*x+32
  310.       next if panorama_x %2 == 0
  311.       for panorama_y in 32*y+23..32*y+32
  312.       next if panorama_x %y == 0
  313.         color = $panorama3.bitmap.get_pixel(panorama_x,panorama_y)
  314.         if color.green.to_i==0
  315.           martix[8] = true
  316.           break
  317.         end
  318.       end
  319.       break if martix[8]
  320.     end
  321.     pass_up = true
  322.     pass_down = true
  323.     pass_left = true
  324.     pass_right = true
  325.     #---------------------------------------------------------------------
  326.     # 注意,如果打算严格要求,则把and前加井号。我测试感觉放松似乎更自然一些,看情况吧。
  327.     # 这种算法是把一个小格分为9个格(参考小键盘)
  328.     #
  329.     # 放松要求是2,4,6,8格决定能否通行
  330.     # 而严格要求则是2,4,6,8格并且要求至少附带临近旁一格才能通行
  331.     #---------------------------------------------------------------------
  332.     if martix[1] and (martix[0] or martix[2])
  333.       pass_up = false
  334.     end
  335.     if martix[3] and (martix[0] or martix[6])
  336.       pass_left = false
  337.     end
  338.     if martix[7] and (martix[6] or martix[8])
  339.       pass_down = false
  340.     end
  341.     if martix[5] and (martix[2] or martix[8])
  342.       pass_right = false
  343.     end
  344.     if martix[4]
  345.       pass_up = false
  346.       pass_down = false
  347.       pass_left = false
  348.       pass_right = false
  349.     end
  350.     pass_up = pass_up== false ? 0 : 1
  351.     pass_left = pass_left== false ? 0 : 1
  352.     pass_right = pass_right== false ? 0 : 1
  353.     pass_down = pass_down== false ? 0 : 1
  354.     pass = pass_down * 1 + pass_left * 2 + pass_right * 4 + pass_up * 8
  355.     pass = 15-pass
  356.    
  357.     # 方向 (0,2,4,6,8,10) 与障碍物接触 (0,1,2,4,8,0) 后变换
  358.     bit = (1 << (d / 2 - 1)) & 0x0f
  359.     # 循环全部的事件
  360.     for event in events.values
  361.       # 自己以外的元件与坐标相同的情况
  362.       if event.tile_id >= 0 and event != self_event and
  363.          event.x == x and event.y == y and not event.through
  364.         # 如果障碍物的接触被设置的情况下
  365.         if @passages[event.tile_id] & bit != 0
  366.           # 不能通行
  367.           return false
  368.         # 如果全方向的障碍物的接触被设置的情况下
  369.         elsif @passages[event.tile_id] & 0x0f == 0x0f
  370.           # 不能通行
  371.           return false
  372.         # 这以外的优先度为 0 的情况下
  373.         elsif @priorities[event.tile_id] == 0
  374.           # 可以通行
  375.           return true
  376.         end
  377.       end
  378.     end
  379.     # 从层按从上到下的顺序调查循环
  380.     for i in [2, 1, 0]
  381.       # 取得元件 ID
  382.       tile_id = data[x, y, i]            
  383.       # 取得元件 ID 失败
  384.       if tile_id == nil
  385.         # 不能通行
  386.         return false
  387.       # 如果障碍物的接触被设置的情况下
  388.       elsif @passages[tile_id] & bit != 0
  389.         # 不能通行
  390.         return false
  391.       # 如果全方向的障碍物的接触被设置的情况下
  392.       elsif @passages[tile_id] & 0x0f == 0x0f
  393.         # 不能通行
  394.         return false
  395.       # 这以外的优先度为 0 的情况下
  396.       elsif @priorities[tile_id] == 0
  397.         # 可以通行
  398.         #p pass
  399.         if pass & bit != 0
  400.           return false
  401.         elsif pass & 0x0f == 0x0f
  402.           return false
  403.         end
  404.       end
  405.     end
  406.     # 可以通行
  407.     return true
  408.   end
  409. end
  410. #==============================================================================
  411. # 本脚本的用途请参考制作录像
  412. #==============================================================================
  413. #===============================================================
  414. # 本脚本来自www.66rpg.com
  415. # 功能:对于没有设置战斗背景的地图,直接用地图做战斗背景
  416. #===============================================================
  417. class Scene_Battle
  418. alias battleback_map_main main
  419. def main
  420. @battleback_sprite = Spriteset_Map.new(true)
  421. battleback_map_main
  422. @battleback_sprite.dispose(true)
  423. end
  424. end
  425. #===============================================================
  426. # 申请者:张永;脚本作者:bluefool 改进人:亿万星辰  完美化:IKKI
  427. #===============================================================
复制代码

作者: 高兴    时间: 2006-11-16 22:30
嗯……虽然暂时还没用到……
不过是好东西我都收集~~~{/dy}
帮楼主顶一下~~!!!
作者: 轮回者    时间: 2006-11-17 03:21
感谢共享!
(虽说我没有发布的权利{/cy})
作者: ikki    时间: 2006-11-18 16:04
{/pz}{/fd}没人需要了?{/dk}早知道,不发了。
作者: 小传子    时间: 2006-11-18 16:08
改进人:亿万星辰
星子也改也几下么 ```
恩 顶一下 {/hx}
作者: 南宫恋絮    时间: 2006-11-19 22:09
对我来说满有用的{/hx}
作者: ikki    时间: 2006-11-19 22:09
以下引用传说VS天涯于2006-11-18 8:08:30的发言:

改进人:亿万星辰
星子也改也几下么 ```
恩 顶一下  

原版的(普通地图版本),亿万星辰改进过,只是不算完美,这个绝对够完美了哦。
作者: 绝望    时间: 2007-7-11 09:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: 绝世☆妖镜    时间: 2007-7-12 22:28
头~~~晕晕的~~~{/pz}果然不是我这种新人该来的地方……
作者: 精灵使者    时间: 2007-7-12 23:34
这个很重要。魔力里面的核心脚本。谢谢了!{/qiang}
我也要用。
作者: linan1028sll    时间: 2007-7-29 22:02
很需要``但是怎么用呢?总说错误...




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