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

Project1

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

[已经解决] RMXP地图问题-关于双远景地图切片

[复制链接]

Lv1.梦旅人

梦石
0
星屑
85
在线时间
210 小时
注册时间
2013-7-26
帖子
346
跳转到指定楼层
1
发表于 2015-6-12 10:29:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
使用分辨率拓展后 分辨率扩大为800 600
但是在地图中会出现黑边,有两种解决办法,第一种就是把地图切片尺寸提高到400 300,但工程量相当大
第二种就是增加7个精灵
0   1   2   3
4   5   6   7
8   9  10 11
12 13 14 15

相当于增加个外围,小弟我只会增加精灵,但是具体算法还是没办法依样画葫芦,希望大神帮帮忙,还有VIP当作奖励



RUBY 代码复制
  1. #==============================================================================
  2. # 本脚本来自[url]www.66rpg.com[/url],使用前请参考制作录像
  3. #==============================================================================
  4. # ■ Spriteset_Map
  5. #------------------------------------------------------------------------------
  6. #  处理地图画面活动块和元件的类。本类在
  7. # Scene_Map 类的内部使用。
  8. #==============================================================================
  9.  
  10. class Spriteset_Map
  11.   attr_accessor :panorama
  12.   attr_accessor :panorama2
  13.   attr_accessor :plane
  14.   attr_accessor :plane2
  15.   Map_width = 320
  16.   Map_height = 240
  17.   #--------------------------------------------------------------------------
  18.   # ● 初始化对像
  19.   #--------------------------------------------------------------------------
  20.   def initialize
  21.     # 生成显示端口
  22.     @viewport1 = Viewport.new(0, 0, 800, 600)
  23.     @viewport2 = Viewport.new(0, 0, 800, 600)
  24.     @viewport3 = Viewport.new(0, 0, 800, 600)
  25.     #@viewport2.z = 200
  26.     @viewport3.z = 5000
  27.     # 生成元件地图
  28.     @tilemap = Tilemap.new(@viewport1)
  29.     @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  30.     for i in 0..6
  31.       autotile_name = $game_map.autotile_names[i]
  32.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  33.     end
  34.     @tilemap.map_data = $game_map.data
  35.     @tilemap.priorities = $game_map.priorities
  36.     # 生成远景平面
  37.     @path = "map/"#远景图所在路径
  38.     @panorama = []
  39.     @panorama2 = []
  40.     @plane = Plane.new(@viewport1)
  41.     @plane.z = -1000
  42.     @plane2 = Plane.new(@viewport1)
  43.     @plane2.z = 0
  44.     @panorama_status = []
  45.     @type  = ($game_map.width + $game_map.height > 160 ) ? true : false
  46.     for i in 0..8
  47.       @panorama[i] = Sprite.new(@viewport1)
  48.       @panorama[i].z = -1000
  49.       @panorama2[i] = Sprite.new(@viewport1)
  50.       @panorama2[i].z = 0
  51.       @panorama_status[i] = i
  52.     end
  53.     #图像位置初始化
  54.     update_xy
  55.     # 生成雾平面
  56.     @fog = Plane.new(@viewport1)
  57.     @fog.z = 0
  58.     # 生成角色活动块
  59.     @character_sprites = []
  60.     for i in $game_map.events.keys.sort
  61.       sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  62.       @character_sprites.push(sprite)
  63.     end
  64.     @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  65.     # 生成天气
  66.     @weather = RPG::Weather.new(@viewport1)
  67.     # 生成图片
  68.     @picture_sprites = []
  69.     for i in 1..50
  70.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  71.         $game_screen.pictures[i]))
  72.     end
  73.     # 生成计时器块
  74.     @timer_sprite = Sprite_Timer.new
  75.     # 刷新画面
  76.     update
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 释放
  80.   #--------------------------------------------------------------------------
  81.   def dispose
  82.     # 释放元件地图
  83.     @tilemap.tileset.dispose
  84.     for i in 0..6
  85.       @tilemap.autotiles[i].dispose
  86.     end
  87.     @tilemap.dispose
  88.     # 释放远景平面
  89.     for i in 0..8
  90.       if @panorama[i].bitmap != nil
  91.         @panorama[i].bitmap.dispose
  92.       end
  93.       if @panorama2[i].bitmap != nil
  94.         @panorama2[i].bitmap.dispose
  95.       end
  96.       @panorama[i].dispose
  97.       @panorama2[i].dispose
  98.     end
  99.     if @plane.bitmap != nil
  100.       @plane.bitmap.dispose
  101.     end
  102.     if @plane2.bitmap != nil
  103.       @plane2.bitmap.dispose
  104.     end
  105.     @plane.dispose
  106.     @plane2.dispose
  107.     # 释放雾平面
  108.     @fog.dispose
  109.     # 释放角色活动块
  110.     for sprite in @character_sprites
  111.       sprite.dispose
  112.     end
  113.     # 释放天候
  114.     #@weather.dispose
  115.     # 释放图片
  116.     for sprite in @picture_sprites
  117.       sprite.dispose
  118.     end
  119.     # 释放计时器块
  120.     @timer_sprite.dispose
  121.     # 释放显示端口
  122.     @viewport1.dispose
  123.     @viewport2.dispose
  124.     @viewport3.dispose
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 默认刷新画面
  128.   #--------------------------------------------------------------------------
  129.   def update_default
  130.     # 远景与现在的情况有差异发情况下
  131.     if @panorama_name != $game_map.panorama_name or
  132.        @panorama_hue != $game_map.panorama_hue
  133.       @panorama_name = $game_map.panorama_name
  134.       @panorama_hue = $game_map.panorama_hue
  135.       if @plane.bitmap != nil
  136.         @plane.bitmap.dispose
  137.         @plane2.bitmap.dispose
  138.         @plane.bitmap = nil
  139.         @plane2.bitmap = nil
  140.       end
  141.       if @panorama_name != ""
  142.         @plane.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  143.         @plane2.bitmap = RPG::Cache.panorama(@panorama_name+"_2", @panorama_hue)
  144.       end
  145.       Graphics.frame_reset
  146.     end
  147.     # 雾与现在的情况有差异的情况下
  148.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  149.       @fog_name = $game_map.fog_name
  150.       @fog_hue = $game_map.fog_hue
  151.       if @fog.bitmap != nil
  152.         @fog.bitmap.dispose
  153.         @fog.bitmap = nil
  154.       end
  155.       if @fog_name != ""
  156.         @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  157.       end
  158.       Graphics.frame_reset
  159.     end
  160.     # 刷新元件地图
  161.     @tilemap.ox = $game_map.display_x / 4
  162.     @tilemap.oy = $game_map.display_y / 4
  163.     @tilemap.update
  164.     # 刷新远景平面
  165.  
  166.     @plane.ox = $game_map.display_x / 4
  167.     @plane.oy = $game_map.display_y / 4
  168.     @plane2.ox = @plane.ox
  169.     @plane2.oy = @plane.oy
  170.     # 刷新雾平面
  171.     @fog.zoom_x = $game_map.fog_zoom / 100.0
  172.     @fog.zoom_y = $game_map.fog_zoom / 100.0
  173.     @fog.opacity = $game_map.fog_opacity
  174.     @fog.blend_type = $game_map.fog_blend_type
  175.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  176.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  177.     @fog.tone = $game_map.fog_tone
  178.     # 刷新角色活动块
  179.     for sprite in @character_sprites
  180.         sprite.update
  181.     end
  182.     # 刷新天候图形
  183.     #@weather.type = $game_screen.weather_type
  184.     #@weather.max = $game_screen.weather_max
  185.     #@weather.ox = $game_map.display_x / 4
  186.     #@weather.oy = $game_map.display_y / 4
  187.     #@weather.update
  188.     # 刷新图片
  189.     for sprite in @picture_sprites
  190.       sprite.update
  191.     end
  192.     # 刷新计时器块
  193.     @timer_sprite.update
  194.     # 设置画面的色调与震动位置
  195.     @viewport1.tone = $game_screen.tone
  196.     @viewport1.ox = $game_screen.shake
  197.     # 设置画面的闪烁色
  198.     @viewport3.color = $game_screen.flash_color
  199.     # 刷新显示端口
  200.     @viewport1.update
  201.     @viewport3.update
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ● 刷新画面
  205.   #--------------------------------------------------------------------------
  206.   def update
  207.     if @type == false
  208.       update_default
  209.       return
  210.     end
  211.     # 远景与现在的情况有差异发情况下
  212.     if @panorama_name != $game_map.panorama_name or @panorama_hue != $game_map.panorama_hue
  213.       @panorama_name = $game_map.panorama_name
  214.       @panorama_hue = $game_map.panorama_hue
  215.       # 修正display_x和display_y,避免出现黑底
  216.       $game_map.display_x = $game_map.display_x-($game_map.display_x/4%Map_width)*4+Map_width/2*4
  217.       $game_map.display_y = $game_map.display_y-($game_map.display_y/4%Map_height)*4+Map_height/2*4
  218.       # 开始描绘远景图
  219.       update_panorama
  220.       # 记录旧坐标便于刷新ox和oy
  221.       @old_x = $game_map.display_x
  222.       @old_y = $game_map.display_y
  223.       # 修正如果地图切换时,主角在地图边缘边缘时出现黑底的问题
  224.       if ($game_map.display_x/4+@panorama[2].x) >= ($game_map.width*32)
  225.         $game_map.display_x-=800
  226.       end
  227.       if ($game_map.display_y/4+@panorama[6].y) >= ($game_map.height*32)
  228.         $game_map.display_y-=600
  229.       end
  230.       #防止进入地图时角色在最左边找不到人的BUG
  231.       if $game_player.x <= 10
  232.         $game_map.display_x = 0
  233.       end
  234.       #防止进入地图时角色在最上边找不到人的BUG
  235.       if $game_player.y <= 10
  236.         $game_map.display_y = 0
  237.       #防止进入地图时角色在最下面时最后一个图片高度不为120的情况
  238.       elsif ($game_map.height * 32)%240 != 0
  239.         if ($game_map.height * 32)%240 < Map_height / 2
  240.           $game_map.display_y -=Map_height
  241.         end
  242.       end
  243.     end
  244.     # 雾与现在的情况有差异的情况下
  245.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  246.       @fog_name = $game_map.fog_name
  247.       @fog_hue = $game_map.fog_hue
  248.       if @fog.bitmap != nil
  249.         @fog.bitmap.dispose
  250.         @fog.bitmap = nil
  251.       end
  252.       if @fog_name != ""
  253.         @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  254.       end
  255.       Graphics.frame_reset
  256.     end
  257.     # 刷新元件地图
  258.     @tilemap.ox = $game_map.display_x / 4
  259.     @tilemap.oy = $game_map.display_y / 4
  260.     @tilemap.update
  261.     # 刷新远景平面
  262.     #如果水平移动
  263.     if @old_x != $game_map.display_x
  264.       v = @old_x / 4
  265.       d = $game_map.display_x / 4
  266.       for i in 0..8
  267.         @panorama[i].ox -= v - d
  268.         @panorama2[i].ox -= v - d
  269.       end
  270.       @old_x = $game_map.display_x
  271.     end  
  272.     #如果竖直移动
  273.     if @old_y != $game_map.display_y
  274.      v = @old_y / 4
  275.      d = $game_map.display_y / 4
  276.       for i in 0..8
  277.         @panorama[i].oy -= v-d
  278.         @panorama2[i].oy -= v-d
  279.       end
  280.       @old_y = $game_map.display_y
  281.     end
  282.     #重新计算图像布局
  283.     x = $game_map.display_x / 4
  284.     a = x / Map_width + 1
  285.     y = $game_map.display_y / 4
  286.     b = y / Map_height + 1
  287.     if @old_plx != a
  288.       if @old_ply != b
  289.         update_ab(x,y,a,b)
  290.       else
  291.         update_a(x,y,a,b)
  292.       end
  293.     end   
  294.     if @old_ply != b
  295.       if @old_plx != a
  296.         update_ab(x,y,a,b)
  297.       else
  298.         update_b(x,y,a,b)
  299.       end   
  300.     end
  301.     # 刷新雾平面
  302.     @fog.zoom_x = $game_map.fog_zoom / 100.0
  303.     @fog.zoom_y = $game_map.fog_zoom / 100.0
  304.     @fog.opacity = $game_map.fog_opacity
  305.     @fog.blend_type = $game_map.fog_blend_type
  306.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  307.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  308.     @fog.tone = $game_map.fog_tone
  309.     # 刷新角色活动块
  310.     for sprite in @character_sprites
  311.       sprite.update
  312.     end
  313.     # 刷新天候图形
  314.     #@weather.type = $game_screen.weather_type
  315.     #@weather.max = $game_screen.weather_max
  316.     #@weather.ox = $game_map.display_x / 4
  317.     #@weather.oy = $game_map.display_y / 4
  318.     #@weather.update
  319.     # 刷新图片
  320.     for sprite in @picture_sprites
  321.       sprite.update
  322.     end
  323.     # 刷新计时器块
  324.     @timer_sprite.update
  325.     # 设置画面的色调与震动位置
  326.     @viewport1.tone = $game_screen.tone
  327.     @viewport1.ox = $game_screen.shake
  328.     # 设置画面的闪烁色
  329.     @viewport3.color = $game_screen.flash_color
  330.     # 刷新显示端口
  331.     @viewport1.update
  332.     @viewport3.update
  333.   end
  334.   #==============================================================================
  335.   # 精灵图像水平变更
  336.   #==============================================================================  
  337.   def update_a(x,y,a,b)
  338.     if a-1 >= 0
  339.       c = a-1
  340.     else
  341.       c = false
  342.     end  
  343.     wi = $game_map.width*32
  344.     if a+1 <= (wi%Map_width == 0 ? wi / Map_width - 1 : wi / Map_width )
  345.       d = a+1
  346.     else
  347.       d = false
  348.     end
  349.     if b-1 >= 0
  350.       e = b-1
  351.     else
  352.       e = false
  353.     end  
  354.     he = $game_map.height*32
  355.     if b+1 <= (he%Map_height == 0 ? he / Map_height - 1 : he / Map_height)
  356.       f = b+1
  357.     else
  358.       f = false
  359.     end
  360.     if a < @old_plx
  361.       for i in 0..8
  362.         case @panorama_status[i]
  363.         when 2
  364.           if @panorama[i].bitmap != nil
  365.             @panorama[i].bitmap.dispose
  366.             @panorama[i].bitmap = nil
  367.           end
  368.           if @panorama2[i].bitmap != nil
  369.             @panorama2[i].bitmap.dispose
  370.             @panorama2[i].bitmap = nil
  371.           end
  372.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{e}", @panorama_hue) if c.is_a?(Fixnum) and e.is_a?(Fixnum)
  373.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{e}", @panorama_hue) if c.is_a?(Fixnum) and e.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  374.         when 5
  375.           if @panorama[i].bitmap != nil
  376.             @panorama[i].bitmap.dispose
  377.             @panorama[i].bitmap = nil
  378.           end
  379.           if @panorama2[i].bitmap != nil
  380.             @panorama2[i].bitmap.dispose
  381.             @panorama2[i].bitmap = nil
  382.           end
  383.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{b}", @panorama_hue) if c.is_a?(Fixnum) and b.is_a?(Fixnum)
  384.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{b}", @panorama_hue) if c.is_a?(Fixnum) and b.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  385.         when 8
  386.           if @panorama[i].bitmap != nil
  387.             @panorama[i].bitmap.dispose
  388.             @panorama[i].bitmap = nil
  389.           end
  390.           if @panorama2[i].bitmap != nil
  391.             @panorama2[i].bitmap.dispose
  392.             @panorama2[i].bitmap = nil
  393.           end
  394.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{f}", @panorama_hue) if c.is_a?(Fixnum) and f.is_a?(Fixnum)
  395.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{f}", @panorama_hue) if c.is_a?(Fixnum) and f.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  396.         end
  397.       end
  398.         #将数组值迭代给@old_panorama_status,不可直接赋值
  399.         @old_panorama_status = @panorama_status.dup
  400.         @panorama_status[0] = @old_panorama_status[1]
  401.         @panorama_status[1] = @old_panorama_status[2]
  402.         @panorama_status[2] = @old_panorama_status[0]
  403.         @panorama_status[3] = @old_panorama_status[4]
  404.         @panorama_status[4] = @old_panorama_status[5]
  405.         @panorama_status[5] = @old_panorama_status[3]
  406.         @panorama_status[6] = @old_panorama_status[7]
  407.         @panorama_status[7] = @old_panorama_status[8]
  408.         @panorama_status[8] = @old_panorama_status[6]
  409.     else
  410.       for i in 0..8
  411.         case @panorama_status[i]
  412.         when 0
  413.           if @panorama[i].bitmap != nil
  414.             @panorama[i].bitmap.dispose
  415.             @panorama[i].bitmap = nil
  416.           end
  417.           if @panorama2[i].bitmap != nil
  418.             @panorama2[i].bitmap.dispose
  419.             @panorama2[i].bitmap = nil
  420.           end
  421.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{e}", @panorama_hue) if d.is_a?(Fixnum) and e.is_a?(Fixnum)
  422.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{e}", @panorama_hue) if d.is_a?(Fixnum) and e.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  423.         when 3
  424.           if @panorama[i].bitmap != nil
  425.             @panorama[i].bitmap.dispose
  426.             @panorama[i].bitmap = nil
  427.           end
  428.           if @panorama2[i].bitmap != nil
  429.             @panorama2[i].bitmap.dispose
  430.             @panorama2[i].bitmap = nil
  431.           end
  432.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{b}", @panorama_hue) if d.is_a?(Fixnum) and b.is_a?(Fixnum)
  433.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{b}", @panorama_hue) if d.is_a?(Fixnum) and b.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  434.         when 6
  435.           if @panorama[i].bitmap != nil
  436.             @panorama[i].bitmap.dispose
  437.             @panorama[i].bitmap = nil
  438.           end
  439.           if @panorama2[i].bitmap != nil
  440.             @panorama2[i].bitmap.dispose
  441.             @panorama2[i].bitmap = nil
  442.           end
  443.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{f}", @panorama_hue) if d.is_a?(Fixnum) and f.is_a?(Fixnum)     
  444.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{f}", @panorama_hue) if d.is_a?(Fixnum) and f.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  445.         end
  446.       end
  447.       @old_panorama_status = @panorama_status.dup
  448.       @panorama_status[0] = @old_panorama_status[2]
  449.       @panorama_status[1] = @old_panorama_status[0]
  450.       @panorama_status[2] = @old_panorama_status[1]
  451.       @panorama_status[3] = @old_panorama_status[5]
  452.       @panorama_status[4] = @old_panorama_status[3]
  453.       @panorama_status[5] = @old_panorama_status[4]
  454.       @panorama_status[6] = @old_panorama_status[8]
  455.       @panorama_status[7] = @old_panorama_status[6]
  456.       @panorama_status[8] = @old_panorama_status[7]
  457.     end
  458.     #更新图像位置
  459.     update_xy
  460.     #图像传送坐标复位
  461.     m = @panorama[0].ox
  462.     if @panorama[0].ox < 0
  463.       for i in 0..8
  464.         @panorama[i].ox = Map_width+m
  465.         @panorama2[i].ox = Map_width+m
  466.       end     
  467.     else
  468.       for i in 0..8
  469.         @panorama[i].ox = -(Map_width)+m
  470.         @panorama2[i].ox = -(Map_width)+m
  471.       end     
  472.     end
  473.     #更新横向旧标识
  474.     @old_plx = a
  475.   end
  476.   #==============================================================================
  477.   # 精灵图像竖直水平变更
  478.   #==============================================================================  
  479.   def update_ab(x,y,a,b)
  480.     if a < @old_plx and b < @old_ply
  481.       if a-1 >= 0
  482.         c = a-1
  483.       else
  484.         c = false
  485.       end  
  486.       wi = $game_map.width*32
  487.       if a+1 <= (wi%Map_width == 0 ? wi / Map_width - 1 : wi / Map_width)
  488.         d = a+1
  489.       else
  490.         d = false
  491.       end
  492.       he = $game_map.height*32
  493.       if b+2 <= (he%Map_height == 0 ? he / Map_height - 1 : he / Map_height)
  494.         e = b+2
  495.       else
  496.         e = false
  497.       end  
  498.       if b+1 <= (he%Map_height == 0 ? he / Map_height - 1 : he / Map_height)
  499.         f = b+1
  500.       else
  501.         f = false
  502.       end     
  503.       for i in 0..8
  504.         case @panorama_status[i]
  505.         when 2
  506.           if @panorama[i].bitmap != nil
  507.             @panorama[i].bitmap.dispose
  508.             @panorama[i].bitmap = nil
  509.           end
  510.           if @panorama2[i].bitmap != nil
  511.             @panorama2[i].bitmap.dispose
  512.             @panorama2[i].bitmap = nil
  513.           end
  514.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{b}", @panorama_hue) if c.is_a?(Fixnum) and e.is_a?(Fixnum)
  515.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{b}", @panorama_hue) if c.is_a?(Fixnum) and e.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  516.         when 5
  517.           if @panorama[i].bitmap != nil
  518.             @panorama[i].bitmap.dispose
  519.             @panorama[i].bitmap = nil
  520.           end
  521.           if @panorama2[i].bitmap != nil
  522.             @panorama2[i].bitmap.dispose
  523.             @panorama2[i].bitmap = nil
  524.           end
  525.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{f}", @panorama_hue) if c.is_a?(Fixnum) and b.is_a?(Fixnum)
  526.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{f}", @panorama_hue) if c.is_a?(Fixnum) and b.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  527.         when 8
  528.           if @panorama[i].bitmap != nil
  529.             @panorama[i].bitmap.dispose
  530.             @panorama[i].bitmap = nil
  531.           end
  532.           if @panorama2[i].bitmap != nil
  533.             @panorama2[i].bitmap.dispose
  534.             @panorama2[i].bitmap = nil
  535.           end
  536.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{e}", @panorama_hue) if c.is_a?(Fixnum) and f.is_a?(Fixnum)
  537.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{e}", @panorama_hue) if c.is_a?(Fixnum) and f.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  538.         end
  539.       end
  540.       @old_panorama_status = @panorama_status.dup
  541.       @panorama_status[0] = @old_panorama_status[1]
  542.       @panorama_status[1] = @old_panorama_status[2]
  543.       @panorama_status[2] = @old_panorama_status[0]
  544.       @panorama_status[3] = @old_panorama_status[4]
  545.       @panorama_status[4] = @old_panorama_status[5]
  546.       @panorama_status[5] = @old_panorama_status[3]
  547.       @panorama_status[6] = @old_panorama_status[7]
  548.       @panorama_status[7] = @old_panorama_status[8]
  549.       @panorama_status[8] = @old_panorama_status[6]
  550.     elsif a < @old_plx and b > @old_ply
  551.       if a-1 >= 0
  552.         c = a-1
  553.       else
  554.         c = false
  555.       end  
  556.       wi = $game_map.width*32
  557.       if a+1 <= (wi%Map_width == 0 ? wi / Map_width - 1 : wi / Map_width)
  558.         d = a+1
  559.       else
  560.         d = false
  561.       end
  562.       if b-2 >= 0
  563.         e = b-2
  564.       else
  565.         e = false
  566.       end  
  567.       if b-1 >= 0
  568.         f = b-1
  569.       else
  570.         f = false
  571.       end     
  572.       for i in 0..8
  573.         case @panorama_status[i]
  574.         when 2
  575.           if @panorama[i].bitmap != nil
  576.             @panorama[i].bitmap.dispose
  577.             @panorama[i].bitmap = nil
  578.           end
  579.           if @panorama2[i].bitmap != nil
  580.             @panorama2[i].bitmap.dispose
  581.             @panorama2[i].bitmap = nil
  582.           end
  583.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{e}", @panorama_hue) if c.is_a?(Fixnum) and e.is_a?(Fixnum)
  584.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{e}", @panorama_hue) if c.is_a?(Fixnum) and e.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  585.         when 5
  586.           if @panorama[i].bitmap != nil
  587.             @panorama[i].bitmap.dispose
  588.             @panorama[i].bitmap = nil
  589.           end
  590.           if @panorama2[i].bitmap != nil
  591.             @panorama2[i].bitmap.dispose
  592.             @panorama2[i].bitmap = nil
  593.           end
  594.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{f}", @panorama_hue) if c.is_a?(Fixnum) and b.is_a?(Fixnum)
  595.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{f}", @panorama_hue) if c.is_a?(Fixnum) and b.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  596.         when 8
  597.           if @panorama[i].bitmap != nil
  598.             @panorama[i].bitmap.dispose
  599.             @panorama[i].bitmap = nil
  600.           end
  601.           if @panorama2[i].bitmap != nil
  602.             @panorama2[i].bitmap.dispose
  603.             @panorama2[i].bitmap = nil
  604.           end
  605.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{b}", @panorama_hue) if c.is_a?(Fixnum) and f.is_a?(Fixnum)
  606.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{b}", @panorama_hue) if c.is_a?(Fixnum) and f.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  607.         end
  608.       end
  609.       @old_panorama_status = @panorama_status.dup
  610.       @panorama_status[0] = @old_panorama_status[1]
  611.       @panorama_status[1] = @old_panorama_status[2]
  612.       @panorama_status[2] = @old_panorama_status[0]
  613.       @panorama_status[3] = @old_panorama_status[4]
  614.       @panorama_status[4] = @old_panorama_status[5]
  615.       @panorama_status[5] = @old_panorama_status[3]
  616.       @panorama_status[6] = @old_panorama_status[7]
  617.       @panorama_status[7] = @old_panorama_status[8]
  618.       @panorama_status[8] = @old_panorama_status[6]
  619.     elsif a > @old_plx and b < @old_ply
  620.       if a-1 >= 0
  621.         c = a-1
  622.       else
  623.         c = false
  624.       end  
  625.       wi = $game_map.width*32
  626.       if a+1 <= (wi%Map_width == 0 ? wi / Map_width - 1 : wi / Map_width)
  627.         d = a+1
  628.       else
  629.         d = false
  630.       end
  631.       he = $game_map.height*32
  632.       if b+2 <= (he%Map_height == 0 ? he / Map_height - 1 : he / Map_height)
  633.         e = b+2
  634.       else
  635.         e = false
  636.       end  
  637.       if b+1 <= (he%Map_height == 0 ? he / Map_height - 1 : he / Map_height)
  638.         f = b+1
  639.       else
  640.         f = false
  641.       end     
  642.       for i in 0..8
  643.         case @panorama_status[i]
  644.         when 0
  645.           if @panorama[i].bitmap != nil
  646.             @panorama[i].bitmap.dispose
  647.             @panorama[i].bitmap = nil
  648.           end
  649.           if @panorama2[i].bitmap != nil
  650.             @panorama2[i].bitmap.dispose
  651.             @panorama2[i].bitmap = nil
  652.           end
  653.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{b}", @panorama_hue) if d.is_a?(Fixnum) and e.is_a?(Fixnum)
  654.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{b}", @panorama_hue) if d.is_a?(Fixnum) and e.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  655.         when 3
  656.           if @panorama[i].bitmap != nil
  657.             @panorama[i].bitmap.dispose
  658.             @panorama[i].bitmap = nil
  659.           end
  660.           if @panorama2[i].bitmap != nil
  661.             @panorama2[i].bitmap.dispose
  662.             @panorama2[i].bitmap = nil
  663.           end
  664.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{f}", @panorama_hue) if d.is_a?(Fixnum) and b.is_a?(Fixnum)
  665.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{f}", @panorama_hue) if d.is_a?(Fixnum) and b.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  666.         when 6
  667.           if @panorama[i].bitmap != nil
  668.             @panorama[i].bitmap.dispose
  669.             @panorama[i].bitmap = nil
  670.           end
  671.           if @panorama2[i].bitmap != nil
  672.             @panorama2[i].bitmap.dispose
  673.             @panorama2[i].bitmap = nil
  674.           end
  675.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{e}", @panorama_hue) if d.is_a?(Fixnum) and f.is_a?(Fixnum)     
  676.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{e}", @panorama_hue) if d.is_a?(Fixnum) and f.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  677.         end
  678.       end
  679.     else
  680.       if a-1 >= 0
  681.         c = a-1
  682.       else
  683.         c = false
  684.       end  
  685.       wi = $game_map.width*32
  686.       if a+1 <= (wi%Map_width == 0 ? wi / Map_width - 1 : wi / Map_width)
  687.         d = a+1
  688.       else
  689.         d = false
  690.       end
  691.       if b-2 >= 0
  692.         e = b-2
  693.       else
  694.         e = false
  695.       end  
  696.       if b-1 >= 0
  697.         f = b-1
  698.       else
  699.         f = false
  700.       end     
  701.       for i in 0..8
  702.         case @panorama_status[i]
  703.         when 0
  704.           if @panorama[i].bitmap != nil
  705.             @panorama[i].bitmap.dispose
  706.             @panorama[i].bitmap = nil
  707.           end
  708.           if @panorama2[i].bitmap != nil
  709.             @panorama2[i].bitmap.dispose
  710.             @panorama2[i].bitmap = nil
  711.           end
  712.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{e}", @panorama_hue) if d.is_a?(Fixnum) and e.is_a?(Fixnum)
  713.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{e}", @panorama_hue) if d.is_a?(Fixnum) and e.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  714.         when 3
  715.           if @panorama[i].bitmap != nil
  716.             @panorama[i].bitmap.dispose
  717.             @panorama[i].bitmap = nil
  718.           end
  719.           if @panorama2[i].bitmap != nil
  720.             @panorama2[i].bitmap.dispose
  721.             @panorama2[i].bitmap = nil
  722.           end
  723.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{f}", @panorama_hue) if d.is_a?(Fixnum) and b.is_a?(Fixnum)
  724.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{f}", @panorama_hue) if d.is_a?(Fixnum) and b.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  725.         when 6
  726.           if @panorama[i].bitmap != nil
  727.             @panorama[i].bitmap.dispose
  728.             @panorama[i].bitmap = nil
  729.           end
  730.           if @panorama2[i].bitmap != nil
  731.             @panorama2[i].bitmap.dispose
  732.             @panorama2[i].bitmap = nil
  733.           end
  734.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{b}", @panorama_hue) if d.is_a?(Fixnum) and f.is_a?(Fixnum)     
  735.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{b}", @panorama_hue) if d.is_a?(Fixnum) and f.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  736.         end
  737.       end
  738.       @old_panorama_status = @panorama_status.dup
  739.       @panorama_status[0] = @old_panorama_status[2]
  740.       @panorama_status[1] = @old_panorama_status[0]
  741.       @panorama_status[2] = @old_panorama_status[1]
  742.       @panorama_status[3] = @old_panorama_status[5]
  743.       @panorama_status[4] = @old_panorama_status[3]
  744.       @panorama_status[5] = @old_panorama_status[4]
  745.       @panorama_status[6] = @old_panorama_status[8]
  746.       @panorama_status[7] = @old_panorama_status[6]
  747.       @panorama_status[8] = @old_panorama_status[7]
  748.     end
  749.     update_xy
  750.     m = @panorama[0].ox
  751.     if @panorama[0].ox < 0
  752.       for i in 0..8
  753.         @panorama[i].ox = Map_width+m
  754.         @panorama2[i].ox = Map_width+m
  755.       end     
  756.     else
  757.       for i in 0..8
  758.         @panorama[i].ox = -(Map_width)+m
  759.         @panorama2[i].ox = -(Map_width)+m
  760.       end     
  761.     end
  762.     @old_plx = a
  763.   end
  764.   #==============================================================================
  765.   # 精灵图像竖直变更
  766.   #==============================================================================  
  767.   def update_b(x,y,a,b)
  768.     if a-1 >= 0
  769.       c = a-1
  770.     else
  771.       c = false
  772.     end  
  773.     wi = $game_map.width*32
  774.     if a+1 <= (wi%Map_width == 0 ? (wi / Map_width - 1) : wi / Map_width)
  775.       d = a+1
  776.     else
  777.       d = false
  778.     end
  779.     if b-1 >= 0
  780.       e = b-1
  781.     else
  782.       e = false
  783.     end  
  784.     he = $game_map.height*32
  785.     if b+1 <= (he%Map_height == 0 ? he / Map_height - 1 : he / Map_height)
  786.       f = b+1
  787.     else
  788.       f = false
  789.     end
  790.     if b < @old_ply
  791.       for i in 0..8
  792.         case @panorama_status[i]
  793.         when 6
  794.           if @panorama[i].bitmap != nil
  795.             @panorama[i].bitmap.dispose
  796.             @panorama[i].bitmap = nil
  797.           end
  798.           if @panorama2[i].bitmap != nil
  799.             @panorama2[i].bitmap.dispose
  800.             @panorama2[i].bitmap = nil
  801.           end
  802.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{e}", @panorama_hue) if c.is_a?(Fixnum) and e.is_a?(Fixnum)
  803.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{e}", @panorama_hue) if c.is_a?(Fixnum) and e.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  804.         when 7
  805.           if @panorama[i].bitmap != nil
  806.             @panorama[i].bitmap.dispose
  807.             @panorama[i].bitmap = nil
  808.           end
  809.           if @panorama2[i].bitmap != nil
  810.             @panorama2[i].bitmap.dispose
  811.             @panorama2[i].bitmap = nil
  812.           end
  813.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{a}-#{e}", @panorama_hue) if a.is_a?(Fixnum) and e.is_a?(Fixnum)
  814.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{a}-#{e}", @panorama_hue) if a.is_a?(Fixnum) and e.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  815.         when 8
  816.           if @panorama[i].bitmap != nil
  817.             @panorama[i].bitmap.dispose
  818.             @panorama[i].bitmap = nil
  819.           end
  820.           if @panorama2[i].bitmap != nil
  821.             @panorama2[i].bitmap.dispose
  822.             @panorama2[i].bitmap = nil
  823.           end
  824.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{e}", @panorama_hue) if d.is_a?(Fixnum) and e.is_a?(Fixnum)
  825.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{e}", @panorama_hue) if d.is_a?(Fixnum) and e.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  826.         end
  827.       end
  828.       @old_panorama_status = @panorama_status.dup
  829.       @panorama_status[0] = @old_panorama_status[3]
  830.       @panorama_status[1] = @old_panorama_status[4]
  831.       @panorama_status[2] = @old_panorama_status[5]
  832.       @panorama_status[3] = @old_panorama_status[6]
  833.       @panorama_status[4] = @old_panorama_status[7]
  834.       @panorama_status[5] = @old_panorama_status[8]
  835.       @panorama_status[6] = @old_panorama_status[0]
  836.       @panorama_status[7] = @old_panorama_status[1]
  837.       @panorama_status[8] = @old_panorama_status[2]
  838.     else
  839.       for i in 0..8
  840.         case @panorama_status[i]
  841.         when 0
  842.           if @panorama[i].bitmap != nil
  843.             @panorama[i].bitmap.dispose
  844.             @panorama[i].bitmap = nil
  845.           end
  846.           if @panorama2[i].bitmap != nil
  847.             @panorama2[i].bitmap.dispose
  848.             @panorama2[i].bitmap = nil
  849.           end
  850.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{f}", @panorama_hue) if c.is_a?(Fixnum) and f.is_a?(Fixnum)
  851.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{f}", @panorama_hue) if c.is_a?(Fixnum) and f.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  852.         when 1
  853.           if @panorama[i].bitmap != nil
  854.             @panorama[i].bitmap.dispose
  855.             @panorama[i].bitmap = nil
  856.           end
  857.           if @panorama2[i].bitmap != nil
  858.             @panorama2[i].bitmap.dispose
  859.             @panorama2[i].bitmap = nil
  860.           end
  861.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{a}-#{f}", @panorama_hue) if a.is_a?(Fixnum) and f.is_a?(Fixnum)
  862.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{a}-#{f}", @panorama_hue) if a.is_a?(Fixnum) and f.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  863.         when 2
  864.           if @panorama[i].bitmap != nil
  865.             @panorama[i].bitmap.dispose
  866.             @panorama[i].bitmap = nil
  867.           end
  868.           if @panorama2[i].bitmap != nil
  869.             @panorama2[i].bitmap.dispose
  870.             @panorama2[i].bitmap = nil
  871.           end
  872.           @panorama[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{f}", @panorama_hue) if d.is_a?(Fixnum) and f.is_a?(Fixnum)     
  873.           @panorama2[i].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{f}", @panorama_hue) if d.is_a?(Fixnum) and f.is_a?(Fixnum) #and FileTest.directory?("Graphics/Panoramas/map/#{@panorama_name}_2")
  874.         end
  875.       end
  876.       @old_panorama_status = @panorama_status.dup
  877.       @panorama_status[0] = @old_panorama_status[6]
  878.       @panorama_status[1] = @old_panorama_status[7]
  879.       @panorama_status[2] = @old_panorama_status[8]
  880.       @panorama_status[3] = @old_panorama_status[0]
  881.       @panorama_status[4] = @old_panorama_status[1]
  882.       @panorama_status[5] = @old_panorama_status[2]
  883.       @panorama_status[6] = @old_panorama_status[3]
  884.       @panorama_status[7] = @old_panorama_status[4]
  885.       @panorama_status[8] = @old_panorama_status[5]
  886.     end
  887.     update_xy
  888.     n = @panorama[0].oy
  889.     if @panorama[0].oy < 0
  890.       for i in 0..8
  891.         @panorama[i].oy = Map_height+n
  892.         @panorama2[i].oy = Map_height+n
  893.       end     
  894.     else
  895.       for i in 0..8
  896.         @panorama[i].oy = -(Map_height)+n
  897.         @panorama2[i].oy = -(Map_height)+n
  898.       end     
  899.     end
  900.     @old_ply = b
  901.   end
  902.   #==============================================================================
  903.   # 设置远景图像
  904.   #==============================================================================
  905.   def update_panorama
  906.     for i in 0..8
  907.       if @panorama[i].bitmap != nil
  908.         @panorama[i].bitmap.dispose
  909.         @panorama[i].bitmap = nil
  910.       end
  911.     end
  912.     if @panorama_name != ""
  913.       x = $game_map.display_x / 4
  914.       a = x / Map_width + 1
  915.       y = $game_map.display_y / 4
  916.       b = y / Map_height + 1
  917.       @old_plx = a
  918.       @old_ply = b
  919.       if a-1 >= 0
  920.         c = a-1
  921.       else
  922.         c = false
  923.       end  
  924.       wi = $game_map.width*32
  925.       if a+1 <= (wi%Map_width == 0 ? wi / Map_width - 1 : wi / Map_width)and wi > 640
  926.         d = a+1
  927.       else
  928.         d = false
  929.       end
  930.       if b-1 >= 0
  931.         e = b-1
  932.       else
  933.         e = false
  934.       end  
  935.       he = $game_map.height*32
  936.       if b+1 <= (he%Map_height == 0 ? he / Map_height - 1 : he / Map_height) and he > 480
  937.         f = b+1
  938.       else
  939.         f = false
  940.       end
  941.  
  942.       @panorama2[0].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{e}", @panorama_hue) if c.is_a?(Fixnum) and e.is_a?(Fixnum)
  943.       @panorama2[1].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{a}-#{e}", @panorama_hue) if a.is_a?(Fixnum) and e.is_a?(Fixnum)
  944.       @panorama2[2].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{e}", @panorama_hue) if d.is_a?(Fixnum) and e.is_a?(Fixnum)
  945.       @panorama2[3].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{b}", @panorama_hue) if c.is_a?(Fixnum) and b.is_a?(Fixnum)
  946.       @panorama2[4].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{a}-#{b}", @panorama_hue) if a.is_a?(Fixnum) and b.is_a?(Fixnum)
  947.       @panorama2[5].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{b}", @panorama_hue) if d.is_a?(Fixnum) and b.is_a?(Fixnum)
  948.       @panorama2[6].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{c}-#{f}", @panorama_hue) if c.is_a?(Fixnum) and f.is_a?(Fixnum)
  949.       @panorama2[7].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{a}-#{f}", @panorama_hue) if a.is_a?(Fixnum) and f.is_a?(Fixnum)
  950.       @panorama2[8].bitmap = RPG::Cache.panorama(@path+@panorama_name+"_2/#{d}-#{f}", @panorama_hue) if d.is_a?(Fixnum) and f.is_a?(Fixnum)         
  951.       @panorama[0].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{e}", @panorama_hue) if c.is_a?(Fixnum) and e.is_a?(Fixnum)
  952.       @panorama[1].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{a}-#{e}", @panorama_hue) if a.is_a?(Fixnum) and e.is_a?(Fixnum)
  953.       @panorama[2].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{e}", @panorama_hue) if d.is_a?(Fixnum) and e.is_a?(Fixnum)
  954.       @panorama[3].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{b}", @panorama_hue) if c.is_a?(Fixnum) and b.is_a?(Fixnum)
  955.       @panorama[4].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{a}-#{b}", @panorama_hue) if a.is_a?(Fixnum) and b.is_a?(Fixnum)
  956.       @panorama[5].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{b}", @panorama_hue) if d.is_a?(Fixnum) and b.is_a?(Fixnum)
  957.       @panorama[6].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{c}-#{f}", @panorama_hue) if c.is_a?(Fixnum) and f.is_a?(Fixnum)
  958.       @panorama[7].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{a}-#{f}", @panorama_hue) if a.is_a?(Fixnum) and f.is_a?(Fixnum)
  959.       @panorama[8].bitmap = RPG::Cache.panorama(@path+@panorama_name+"/#{d}-#{f}", @panorama_hue) if d.is_a?(Fixnum) and f.is_a?(Fixnum)     
  960.     end
  961.     Graphics.frame_reset
  962.   end
  963.   #==============================================================================
  964.   # 设置精灵位置
  965.   #==============================================================================
  966.   def update_xy
  967.     for i in 0..8
  968.       case @panorama_status[i]
  969.       when 0
  970.         @panorama[i].x = (640-Map_width)/2-Map_width
  971.         @panorama[i].y = (480-Map_height)/2-Map_height
  972.         @panorama2[i].x = (640-Map_width)/2-Map_width
  973.         @panorama2[i].y = (480-Map_height)/2-Map_height
  974.       when 1
  975.         @panorama[i].x = (640-Map_width)/2
  976.         @panorama[i].y = (480-Map_height)/2-Map_height
  977.         @panorama2[i].x = (640-Map_width)/2
  978.         @panorama2[i].y = (480-Map_height)/2-Map_height
  979.       when 2
  980.         @panorama[i].x = (640-Map_width)/2+Map_width
  981.         @panorama[i].y = (480-Map_height)/2-Map_height
  982.         @panorama2[i].x = (640-Map_width)/2+Map_width
  983.         @panorama2[i].y = (480-Map_height)/2-Map_height
  984.       when 3
  985.         @panorama[i].x = (640-Map_width)/2-Map_width
  986.         @panorama[i].y = (480-Map_height)/2
  987.         @panorama2[i].x = (640-Map_width)/2-Map_width
  988.         @panorama2[i].y = (480-Map_height)/2
  989.       when 4
  990.         @panorama[i].x = (640-Map_width)/2
  991.         @panorama[i].y = (480-Map_height)/2
  992.         @panorama2[i].x = (640-Map_width)/2
  993.         @panorama2[i].y = (480-Map_height)/2
  994.       when 5
  995.         @panorama[i].x = (640-Map_width)/2+Map_width
  996.         @panorama[i].y = (480-Map_height)/2
  997.         @panorama2[i].x = (640-Map_width)/2+Map_width
  998.         @panorama2[i].y = (480-Map_height)/2
  999.       when 6
  1000.         @panorama[i].x = (640-Map_width)/2-Map_width
  1001.         @panorama[i].y = (480-Map_height)/2+Map_height
  1002.         @panorama2[i].x = (640-Map_width)/2-Map_width
  1003.         @panorama2[i].y = (480-Map_height)/2+Map_height
  1004.       when 7
  1005.         @panorama[i].x = (640-Map_width)/2
  1006.         @panorama[i].y = (480-Map_height)/2+Map_height
  1007.         @panorama2[i].x = (640-Map_width)/2
  1008.         @panorama2[i].y = (480-Map_height)/2+Map_height
  1009.       when 8
  1010.         @panorama[i].x = (640-Map_width)/2+Map_width
  1011.         @panorama[i].y = (480-Map_height)/2+Map_height
  1012.         @panorama2[i].x = (640-Map_width)/2+Map_width
  1013.         @panorama2[i].y = (480-Map_height)/2+Map_height
  1014.       end
  1015.     end
  1016.   end#结束update_xy
  1017. end
  1018. #==============================================================================
  1019. # 本脚本来自[url]www.66rpg.com[/url],使用前请参考制作录像
  1020. #==============================================================================

Lv3.寻梦者

梦石
0
星屑
1140
在线时间
381 小时
注册时间
2010-10-9
帖子
386

开拓者

4
发表于 2015-7-3 07:15:51 | 只看该作者
说实话我完全没有看懂楼主表达的意思
大致照着自己的理解画了个瓢,葫芦是“纯脚本分辨率”自带的Spriteset_Map
  1. #==============================================================================
  2. # ■ Spriteset_Map
  3. #------------------------------------------------------------------------------
  4. #  处理地图画面活动块和元件的类。本类在
  5. # Scene_Map 类的内部使用。
  6. #==============================================================================

  7. class Spriteset_Map
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     # 生成显示端口
  13.     # 主窗口
  14.     #@viewport1 = Viewport.new(0, 0, 640, 480)
  15.     @viewport1 = Viewport.new(0, 0, $width, $height)
  16.     #右上
  17.     $viewport4 = Viewport.new(640, 0, $width-640, 480)
  18.     #左下
  19.     $viewport5 = Viewport.new(0, 480, 640, $height-480)
  20.     #右下
  21.     $viewport6 = Viewport.new(640, 480, $width-640, $height-480)
  22.     #@viewport2 = Viewport.new(0, 0, 640, 480)
  23.     #@viewport3 = Viewport.new(0, 0, 640, 480)
  24.     @viewport2 = Viewport.new(0, 0, $width, $height)
  25.     @viewport3 = Viewport.new(0, 0, $width, $height)
  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.     # 生成元件地图 右上
  32.     @tilemap2 = Tilemap.new($viewport4)
  33.     @tilemap2.tileset = RPG::Cache.tileset($game_map.tileset_name)
  34.     # 生成元件地图 左下
  35.     @tilemap3 = Tilemap.new($viewport5)
  36.     @tilemap3.tileset = RPG::Cache.tileset($game_map.tileset_name)
  37.     # 生成元件地图 右下
  38.     @tilemap4 = Tilemap.new($viewport6)
  39.     @tilemap4.tileset = RPG::Cache.tileset($game_map.tileset_name)
  40.    
  41.     for i in 0..6
  42.       autotile_name = $game_map.autotile_names[i]
  43.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  44.       #右上
  45.       @tilemap2.autotiles[i] = RPG::Cache.autotile(autotile_name)
  46.       #左下
  47.       @tilemap3.autotiles[i] = RPG::Cache.autotile(autotile_name)
  48.       #右下
  49.       @tilemap4.autotiles[i] = RPG::Cache.autotile(autotile_name)
  50.     end
  51.     @tilemap.map_data = $game_map.data
  52.     @tilemap.priorities = $game_map.priorities
  53.     # 生成其余的地图数据
  54.     #右上
  55.     @tilemap2.map_data = $game_map.data
  56.     @tilemap2.priorities = $game_map.priorities
  57.     #左下
  58.     @tilemap3.map_data = $game_map.data
  59.     @tilemap3.priorities = $game_map.priorities
  60.     #右下
  61.     @tilemap4.map_data = $game_map.data
  62.     @tilemap4.priorities = $game_map.priorities

  63.     # 生成远景平面
  64.     @panorama = Plane.new(@viewport1)
  65.     @panorama.z = -1000
  66.     # 生成远景平面 右上
  67.     @panorama2 = Plane.new($viewport4)
  68.     @panorama2.z = -1000
  69.     # 生成远景平面 左下
  70.     @panorama3 = Plane.new($viewport5)
  71.     @panorama3.z = -1000
  72.     # 生成远景平面 右下
  73.     @panorama4 = Plane.new($viewport6)
  74.     @panorama4.z = -1000
  75.    
  76.     # 生成远景平面2
  77.     $panorama0 = Plane.new(@viewport1)
  78.     $panorama0.z = 3000
  79.     # 生成远景平面2 右上
  80.     $panorama02 = Plane.new($viewport4)
  81.     $panorama02.z = 3000
  82.     # 生成远景平面2 左下
  83.     $panorama03 = Plane.new($viewport5)
  84.     $panorama03.z = 3000
  85.     # 生成远景平面2 右下
  86.     $panorama04 = Plane.new($viewport6)
  87.     $panorama04.z = 3000
  88.    
  89.     # 生成雾平面
  90.     @fog = Plane.new(@viewport1)
  91.     @fog.z = 3000
  92.     # 生成雾平面 右上
  93.     @fog2 = Plane.new($viewport4)
  94.     @fog2.z = 3000
  95.     # 生成雾平面 左下
  96.     @fog3 = Plane.new($viewport5)
  97.     @fog3.z = 3000
  98.     # 生成雾平面 右下
  99.     @fog4 = Plane.new($viewport6)
  100.     @fog4.z = 3000
  101.    
  102.     # 生成角色活动块
  103.     @character_sprites = []
  104.     for i in $game_map.events.keys.sort
  105.       sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  106.       @character_sprites.push(sprite)
  107.       # 右上
  108.       sprite = Sprite_Character.new($viewport4, $game_map.events[i])
  109.       @character_sprites.push(sprite)
  110.       # 左下
  111.       sprite = Sprite_Character.new($viewport5, $game_map.events[i])
  112.       @character_sprites.push(sprite)
  113.       # 右下
  114.       sprite = Sprite_Character.new($viewport6, $game_map.events[i])
  115.       @character_sprites.push(sprite)
  116.     end
  117.     @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  118.     @character_sprites.push(Sprite_Character.new($viewport4, $game_player))
  119.     @character_sprites.push(Sprite_Character.new($viewport5, $game_player))
  120.     @character_sprites.push(Sprite_Character.new($viewport6, $game_player))
  121.     # 生成天气
  122.     @weather = RPG::Weather.new(@viewport1)
  123.     # 生成图片
  124.     @picture_sprites = []
  125.     for i in 1..50
  126.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  127.         $game_screen.pictures[i]))
  128.     end
  129.     # 生成计时器块
  130.     @timer_sprite = Sprite_Timer.new
  131.     # 刷新画面
  132.     update
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 释放
  136.   #--------------------------------------------------------------------------
  137.   def dispose
  138.     # 释放元件地图
  139.     @tilemap.tileset.dispose
  140.     # 释放元件地图 右上
  141.     @tilemap2.tileset.dispose
  142.     # 释放元件地图 左下
  143.     @tilemap3.tileset.dispose
  144.     # 释放元件地图 右下
  145.     @tilemap4.tileset.dispose
  146.     for i in 0..6
  147.       @tilemap.autotiles[i].dispose
  148.       # 右上
  149.       @tilemap2.autotiles[i].dispose
  150.       # 左下
  151.       @tilemap3.autotiles[i].dispose
  152.       # 右下
  153.       @tilemap4.autotiles[i].dispose
  154.     end
  155.     @tilemap.dispose
  156.     @tilemap2.dispose
  157.     @tilemap3.dispose
  158.     @tilemap4.dispose
  159.     # 释放远景平面
  160.     @panorama.dispose
  161.     @panorama2.dispose
  162.     @panorama3.dispose
  163.     @panorama4.dispose
  164.     # 释放远景平面2
  165.    $panorama0.dispose
  166.    $panorama02.dispose
  167.    $panorama03.dispose
  168.    $panorama04.dispose
  169.   
  170.     # 释放雾平面
  171.     @fog.dispose
  172.     @fog2.dispose
  173.     @fog3.dispose
  174.     @fog4.dispose
  175.     # 释放角色活动块
  176.     for sprite in @character_sprites
  177.       sprite.dispose
  178.     end
  179.     # 释放天候
  180.     @weather.dispose
  181.     # 释放图片
  182.     for sprite in @picture_sprites
  183.       sprite.dispose
  184.     end
  185.     # 释放计时器块
  186.     @timer_sprite.dispose
  187.     # 释放显示端口
  188.     @viewport1.dispose
  189.     @viewport2.dispose
  190.     @viewport3.dispose
  191.     $viewport4.dispose
  192.     $viewport5.dispose
  193.     $viewport6.dispose
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 刷新画面
  197.   #--------------------------------------------------------------------------
  198.   def update
  199.     # 远景与现在的情况有差异发情况下
  200.     if @panorama_name != $game_map.panorama_name or
  201.        @panorama_hue != $game_map.panorama_hue
  202.       @panorama_name = $game_map.panorama_name
  203.       @panorama_hue = $game_map.panorama_hue
  204.       if @panorama.bitmap != nil
  205.         @panorama.bitmap.dispose
  206.         @panorama.bitmap = nil
  207.         @panorama2.bitmap.dispose
  208.         @panorama2.bitmap = nil
  209.         @panorama3.bitmap.dispose
  210.         @panorama3.bitmap = nil
  211.         @panorama4.bitmap.dispose
  212.         @panorama4.bitmap = nil
  213.       end
  214.         #
  215.       if $panorama0.bitmap != nil
  216.         $panorama0.bitmap.dispose
  217.         $panorama0.bitmap = nil
  218.         $panorama02.bitmap.dispose
  219.         $panorama02.bitmap = nil
  220.         $panorama03.bitmap.dispose
  221.         $panorama03.bitmap = nil
  222.         $panorama04.bitmap.dispose
  223.         $panorama04.bitmap = nil        
  224.       end
  225.       if @panorama_name != ""
  226.         @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  227.         @panorama2.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  228.         @panorama3.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  229.         @panorama4.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  230.         
  231.         $panorama0.bitmap = RPG::Cache.panorama(@panorama_name+"_2", @panorama_hue)
  232.         $panorama02.bitmap = RPG::Cache.panorama(@panorama_name+"_2", @panorama_hue)
  233.         $panorama03.bitmap = RPG::Cache.panorama(@panorama_name+"_2", @panorama_hue)
  234.         $panorama04.bitmap = RPG::Cache.panorama(@panorama_name+"_2", @panorama_hue)        
  235.       end
  236.       Graphics.frame_reset
  237.     end
  238.     # 雾与现在的情况有差异的情况下
  239.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  240.       @fog_name = $game_map.fog_name
  241.       @fog_hue = $game_map.fog_hue
  242.       if @fog.bitmap != nil
  243.         @fog.bitmap.dispose
  244.         @fog.bitmap = nil
  245.         
  246.         @fog2.bitmap.dispose
  247.         @fog2.bitmap = nil
  248.         @fog3.bitmap.dispose
  249.         @fog3.bitmap = nil
  250.         @fog4.bitmap.dispose
  251.         @fog4.bitmap = nil
  252.       end
  253.       if @fog_name != ""
  254.         @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  255.         
  256.         @fog2.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  257.         @fog3.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  258.         @fog4.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  259.       end
  260.       Graphics.frame_reset
  261.     end
  262.     # 刷新元件地图
  263.     @tilemap.ox = $game_map.display_x / 4
  264.     @tilemap.oy = $game_map.display_y / 4
  265.     @tilemap.update
  266.    
  267.     @tilemap2.ox = @tilemap.ox
  268.     @tilemap2.oy = @tilemap.oy
  269.     @tilemap2.update
  270.     @tilemap3.ox = @tilemap.ox
  271.     @tilemap3.oy = @tilemap.oy + 480
  272.     @tilemap3.update
  273.     @tilemap4.ox =  @tilemap.ox
  274.     @tilemap4.oy = @tilemap.oy + 480
  275.     @tilemap4.update
  276.     # 刷新远景平面
  277.     @panorama.ox = $game_map.display_x / 8
  278.     @panorama.oy = $game_map.display_y / 8
  279.    
  280.     @panorama2.ox = @panorama.ox
  281.                 @panorama2.oy = @panorama.oy
  282.                 @panorama3.ox = @panorama.ox
  283.                 @panorama3.oy = @panorama.oy + 480
  284.                 @panorama4.ox = @panorama.ox
  285.                 @panorama4.oy = @panorama.oy + 480
  286.    
  287.     # 刷新远景平面2
  288.     $panorama0.ox = $game_map.display_x / 8
  289.     $panorama0.oy = $game_map.display_y / 8
  290.    
  291.     $panorama02.ox = $panorama0.ox
  292.                 $panorama02.oy = $panorama0.oy
  293.                 $panorama03.ox = $panorama0.ox
  294.                 $panorama03.oy = $panorama0.oy + 480
  295.                 $panorama04.ox = $panorama0.ox
  296.                 $panorama04.oy = $panorama0.oy + 480
  297.     # 刷新雾平面
  298.     @fog.zoom_x = $game_map.fog_zoom / 100.0
  299.     @fog.zoom_y = $game_map.fog_zoom / 100.0
  300.     @fog.opacity = $game_map.fog_opacity
  301.     @fog.blend_type = $game_map.fog_blend_type
  302.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  303.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  304.     @fog.tone = $game_map.fog_tone
  305.    
  306.     @fog2.zoom_x = $game_map.fog_zoom / 100.0
  307.     @fog2.zoom_y = $game_map.fog_zoom / 100.0
  308.     @fog2.opacity = $game_map.fog_opacity
  309.     @fog2.blend_type = $game_map.fog_blend_type
  310.     @fog2.ox = @fog.ox
  311.     @fog2.oy = @fog.oy
  312.     @fog2.tone = $game_map.fog_tone
  313.    
  314.     @fog3.zoom_x = $game_map.fog_zoom / 100.0
  315.     @fog3.zoom_y = $game_map.fog_zoom / 100.0
  316.     @fog3.opacity = $game_map.fog_opacity
  317.     @fog3.blend_type = $game_map.fog_blend_type
  318.     @fog3.ox = @fog.ox
  319.     @fog3.oy = @fog.oy + 480
  320.     @fog3.tone = $game_map.fog_tone
  321.    
  322.     @fog4.zoom_x = $game_map.fog_zoom / 100.0
  323.     @fog4.zoom_y = $game_map.fog_zoom / 100.0
  324.     @fog4.opacity = $game_map.fog_opacity
  325.     @fog4.blend_type = $game_map.fog_blend_type
  326.     @fog4.ox = @fog.ox
  327.     @fog4.oy = @fog.oy + 480
  328.     @fog4.tone = $game_map.fog_tone
  329.     # 刷新角色活动块
  330.     for sprite in @character_sprites
  331.       #sprite.update
  332.       if sprite.character.is_a?(Game_Event)
  333.         if can_update(sprite.character)
  334.           sprite.update
  335.         end
  336.       else
  337.         sprite.update
  338.       end
  339.     end
  340.     # 刷新天候图形
  341.     @weather.type = $game_screen.weather_type
  342.     @weather.max = $game_screen.weather_max
  343.     @weather.ox = $game_map.display_x / 4
  344.     @weather.oy = $game_map.display_y / 4
  345.     @weather.update
  346.     # 刷新图片
  347.     for sprite in @picture_sprites
  348.       sprite.update
  349.     end
  350. #--------------------------------------------------------------------------------
  351. #    雙遠景-偽優先級
  352. #    與隊伍/npc 遮擋修正
  353. #    width: 人物大約寛度, 越大修正範圍越多, 但可能卡
  354. #                         越小越順暢, 但視覺上會有點滯後  
  355. #    height: 大約高度                        
  356. #    *width不應比人物真實寛度大,否則可能造成與遮擋圖發生的問題
  357. #    By tintin
  358. #--------------------------------------------------------------------------------
  359.   width = 20
  360.   height = 70
  361.   k = @character_sprites.size - 1  
  362.   i = @character_sprites.size - 2
  363.   #case 隊尾/npc踏地圖元件7 方塊
  364.   #由隊尾檢查, 如隊尾不當遮擋隊頭, 修正隊頭
  365.   while i >= 0
  366.     #如事件/npc 圖片是"無"或角色透明 ,略過
  367.     if @character_sprites[i].re_char_name !="" && @character_sprites[i].re_char_transparent == false
  368.       j = i - 1
  369.       while j >= 0
  370.         #如事件/npc 圖片是"無"或角色透明,略過
  371.         if @character_sprites[j].re_char_name != "" &&  @character_sprites[j].re_char_transparent == false
  372.           if abs(@character_sprites[i].x - @character_sprites[j].x) < width &&
  373.              abs(@character_sprites[i].y - @character_sprites[j].y) < height &&
  374.              @character_sprites[i].y < @character_sprites[j].y &&
  375.              @character_sprites[i].z >= @character_sprites[j].z        
  376.                 @character_sprites[j].z =  @character_sprites[i].z + 10      
  377.           end
  378.         end
  379.         j-=1
  380.       end
  381.       #主角處理--@character_sprites[k]
  382.       if abs(@character_sprites[i].x - @character_sprites[k].x) < width &&
  383.          abs(@character_sprites[i].y - @character_sprites[k].y) < height &&
  384.          @character_sprites[i].y < @character_sprites[k].y &&
  385.          @character_sprites[i].z >= @character_sprites[k].z        
  386.             @character_sprites[k].z =  @character_sprites[i].z  + 10      
  387.       end
  388.     end
  389.     i-= 1
  390.   end

  391.   #case 隊頭踏地圖元件7 方塊
  392.   #由隊頭檢查, 如隊頭不當遮擋隊尾/npc, 修正隊尾
  393.   j = 0
  394.   #主角處理--@character_sprites[k]
  395.   while j <= @character_sprites.size - 2
  396.     if  @character_sprites[j].re_char_name != "" && @character_sprites[j].re_char_transparent == false
  397.       if abs(@character_sprites[k].x - @character_sprites[j].x) < width &&
  398.          abs(@character_sprites[k].y - @character_sprites[j].y) < height &&
  399.          @character_sprites[k].y < @character_sprites[j].y &&
  400.          @character_sprites[k].z >= @character_sprites[j].z
  401.            @character_sprites[j].z =  @character_sprites[k].z + 10      
  402.       end
  403.     end
  404.     j+=1
  405.   end
  406.   i = 0
  407.   while i <= @character_sprites.size - 2
  408.     if @character_sprites[i].re_char_name != ""  && @character_sprites[i].re_char_transparent == false
  409.       j = i + 1
  410.       while j <= @character_sprites.size - 2
  411.         if abs(@character_sprites[i].x - @character_sprites[j].x) <width &&
  412.            abs(@character_sprites[i].y - @character_sprites[j].y) <height &&
  413.            @character_sprites[i].y < @character_sprites[j].y &&
  414.            @character_sprites[i].z >= @character_sprites[j].z         
  415.              @character_sprites[j].z =  @character_sprites[i].z + 10      
  416.         end
  417.         j+=1
  418.       end
  419.     end
  420.     i+= 1
  421.   end
  422. #----------------------------------------------------------------------------------


  423.     # 刷新计时器块
  424.     @timer_sprite.update
  425.     # 设置画面的色调与震动位置
  426.     @viewport1.tone = $game_screen.tone
  427.     @viewport1.ox = $game_screen.shake
  428.    
  429.     $viewport4.tone = $game_screen.tone
  430.     $viewport4.ox = $game_screen.shake + 640
  431.     $viewport5.tone = $game_screen.tone
  432.     $viewport5.ox = $game_screen.shake
  433.     $viewport6.tone = $game_screen.tone
  434.     $viewport6.ox = $game_screen.shake + 640
  435.     # 设置画面的闪烁色
  436.     @viewport3.color = $game_screen.flash_color
  437.     # 刷新显示端口
  438.     @viewport1.update
  439.     @viewport3.update
  440.     $viewport4.update
  441.     $viewport5.update
  442.     $viewport6.update
  443.   end
  444.   
  445.   #--------------------------------------------------------------------------
  446.         # ● 判断是否刷新事件
  447.         #--------------------------------------------------------------------------
  448.         def can_update(event)
  449.                 if event.trigger == 3 or event.trigger == 4
  450.                         return true
  451.                 end
  452.                 map_x = $game_map.display_x
  453.                 map_y = $game_map.display_y
  454.                 real_x = event.real_x
  455.                 real_y = event.real_y
  456.                 if real_x > map_x - 160 and real_x < map_x + 30 * 128
  457.                         if real_y > map_y - 160 and real_y < map_y + 25 * 128
  458.                                 return true
  459.                         end
  460.                 end
  461.                 return false
  462.         end
  463. #-------------------------------------  
  464. def abs(x)
  465.    if x < 0          # 如果 x 小于 0 的话,
  466.      return -x       #   结束函数,返回值 -x。
  467.    else              # 除此之外,
  468.      return x        #   结束函数,返回值 x。
  469.    end               # 分歧结束。
  470. end
  471. end


  472. #==============================================================================
  473. # ■ Sprite_Character
  474. #------------------------------------------------------------------------------
  475. #  角色显示用脚本。监视 Game_Character 类的实例、
  476. # 自动变化脚本状态。
  477. #==============================================================================

  478. class Sprite_Character < RPG::Sprite

  479. #--------------------------------------------------------------------------
  480. # ● 取得角色 文件名
  481. #--------------------------------------------------------------------------  
  482. def re_char_name
  483.    return @character.character_name
  484. end
  485. #--------------------------------------------------------------------------
  486. # ● 取得透明状态
  487. #--------------------------------------------------------------------------
  488. def re_char_transparent  
  489.    return @character.transparent
  490. end
  491. end
  492. #==============================================================================
  493. # ■ Game_Map
  494. #------------------------------------------------------------------------------
  495. #  处理地图的类。包含卷动以及可以通行的判断功能。
  496. # 本类的实例请参考 $game_map 。
  497. #==============================================================================
  498. class Game_Map
  499.   attr_accessor :map
  500.   attr_accessor :map_id
  501. end
  502. #==============================================================================
  503. # 本脚本的用途请参考制作录像
  504. #==============================================================================
复制代码

点评

不用了,我应该有能力写出地图切片的脚本了。。  发表于 2015-7-10 14:20

评分

参与人数 1梦石 +2 收起 理由
RyanBern + 2 补发好人卡,顺便帮楼主撤销悬赏.

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
332 小时
注册时间
2013-7-6
帖子
356
3
发表于 2015-6-15 16:47:27 | 只看该作者
写了个4个视口的脚本,不过看起来总觉得怪怪的。
  1. #==============================================================================
  2. # ■ Spriteset_Map
  3. #------------------------------------------------------------------------------
  4. #  处理地图画面活动块和元件的类。本类在
  5. # Scene_Map 类的内部使用。
  6. #==============================================================================

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

点评

谢谢,但是这个不能用于地图切片,然后普通地图也会怪怪的  发表于 2015-6-15 18:51
偶是熬夜学编程的傻子
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33479
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

2
发表于 2015-6-12 10:52:38 | 只看该作者
使用分辨率扩展貌似要改很多东西,比如地图卷动,猪脚中心位置,,,等
只要改好这些,把地图大小和远景图片大小对应就行,不需要什么切片,精灵什么的。

点评

地图切片,用了九个精灵,每个精灵的尺寸是320 240 用在800 600分辨率中 角色移动的时候 就不够显示 就会出现黑边  发表于 2015-6-12 17:57
只要大于等于32的整数倍即可  发表于 2015-6-12 17:37
要么把分辨率长宽改为 32 的倍数,地图一个图块是 32 ,那样除下来就没有余数,也就没有黑边。  发表于 2015-6-12 14:26
当地图非常大的时候就需要切片!  发表于 2015-6-12 13:38
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-25 10:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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