查看: 7624|回复: 23

[已经解决] 关于雾图形的问题,求帮助!!!

[复制链接]
梦石
3
星屑
7336
在线时间
608 小时
注册时间
2019-9-15
回帖
112

R考场第七期金奖

发表于 2019-12-30 23:28:14 | 显示全部楼层 |阅读模式
悬赏50星屑已解决
本帖最后由 Cupidk爱呗茶 于 2019-12-30 23:40 编辑

LZ使用了分辨率修改的脚本  但是又想要使用雾图形之类的东西  发现只能显示到640X480 为了把效果显示到标题已经忙活一整天了,然后还是出了这个问题
求帮助!!!

如图
QQ截图20191230230955.png

最佳答案

查看完整内容

诶...很抱歉浪费你的时间了 我就不该事先没把握就回答这个问题ORZ 最后还是自己试了下那个脚本确实有问题不完善 这个是从真·RMXP分辨率拓展 https://rpg.blue/thread-362553-1-1.html 摘抄小改过来的Plane类 应该除了效率就没别的问题了 插入这个的话标题还用Plane.new就行 地图的雾和远景一类的应该也没问题了 [pre lang="ruby"]#============================================================================ # ■ Plane #= ...
********
梦石
0
星屑
17038
在线时间
6058 小时
注册时间
2011-7-18
回帖
152

开拓者

发表于 2019-12-30 23:28:15 | 显示全部楼层
本帖最后由 gqxastg 于 2019-12-31 17:49 编辑


诶...很抱歉浪费你的时间了 我就不该事先没把握就回答这个问题ORZ
最后还是自己试了下那个脚本确实有问题不完善
这个是从真·RMXP分辨率拓展
https://rpg.blue/thread-362553-1-1.html
摘抄小改过来的Plane类 应该除了效率就没别的问题了
插入这个的话标题还用Plane.new就行
地图的雾和远景一类的应该也没问题了
[pre lang="ruby"]#============================================================================
# ■ Plane
#============================================================================

class Plane
  #--------------------------------------------------------------------------
  # ● 初始化定义
  #--------------------------------------------------------------------------
  def initialize(viewport = nil)
    @x           = 0
    @y           = 0
    @z           = 0
    @ox          = 0
    @oy          = 0
    @ox2         = 0
    @oy2         = 0
    @rect        = viewport ? viewport.rect : Rect.new(0, 0, 800, 600) # 改成游戏分辨率(0, 0, 宽, 高)
    @zoom_x      = 1.0
    @zoom_y      = 1.0
    @bitmap      = nil
    @contents    = Sprite.new(viewport)
    @n_w         = 1
    @n_h         = 1
    @visible     = true
    @tone        = Tone.new(0, 0, 0, 0)
    @color       = Color.new(255,255,255,0)
    @blend_type  = 0
    @opacity     = 255
    @disposed    = false
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def update
    @contents.x = @x
    @contents.y = @y
    @contents.ox = @ox2
    @contents.oy = @oy2
    @contents.opacity = @opacity
    @contents.visible = @visible
    @contents.color = @color
    @contents.tone = @tone
    @contents.blend_type = @blend_type
    @contents.z = @z
  end
  #--------------------------------------------------------------------------
  # ● 装载图形(bitmap)
  #--------------------------------------------------------------------------
  def bitmap=(bitmap)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @bitmap = bitmap
      count_wh
      update
    end
  end
  #--------------------------------------------------------------------------
  # ● 图形
  #--------------------------------------------------------------------------
  def bitmap
    return @bitmap
  end
  #--------------------------------------------------------------------------
  # ● X 坐标(x)
  #--------------------------------------------------------------------------
  def x=(x)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @x = x
      update
    end
  end
  def x
    return @x
  end
  #--------------------------------------------------------------------------
  # ● Y 坐标(y)
  #--------------------------------------------------------------------------
  def y=(y)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @y = y
      update
    end
  end
  def y
    return @y
  end
  #--------------------------------------------------------------------------
  # ● Z 坐标(z)
  #--------------------------------------------------------------------------
  def z=(z)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @z = z
      update
    end
  end
  def z
    return @z
  end
  #--------------------------------------------------------------------------
  # ● X 漂移量(ox)
  #--------------------------------------------------------------------------
  def ox=(ox)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @bitmap
        @ox = ox
        @ox2 = ox % (@bitmap.width * @zoom_x).to_i
        update
      end
    end
  end
  def ox
    return @ox
  end
  #--------------------------------------------------------------------------
  # ● Y 漂移量(oy)
  #--------------------------------------------------------------------------
  def oy=(oy)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @bitmap
        @oy = oy
        @oy2 = oy % (@bitmap.height * @zoom_y).to_i
        update
      end
    end
  end
  def oy
    return @oy
  end
  #--------------------------------------------------------------------------
  # ● X 方向缩放(zoom_x)
  #--------------------------------------------------------------------------
  def zoom_x=(zx)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @zoom_x != zx
        @zoom_x = zx
        count_wh
      end
      update
    end
  end
  def zoom_x
    return @zoom_x
  end
  #--------------------------------------------------------------------------
  # ● Y 方向缩放(zoom_y)
  #--------------------------------------------------------------------------
  def zoom_y=(zy)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @zoom_y != zy
        @zoom_y = zy
        count_wh
      end
      update
    end
  end
  def zoom_y
    return @zoom_y
  end
  #--------------------------------------------------------------------------
  # ● 不透明度(opacity)
  #--------------------------------------------------------------------------
  def opacity=(op)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @opacity = op
      update
    end
  end
  def opacity
    return @opacity
  end
  #--------------------------------------------------------------------------
  # ● 颜色叠加(color)
  #--------------------------------------------------------------------------
  def color=(c)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @color = c
      update
    end
  end
  def color
    return @color
  end
  #--------------------------------------------------------------------------
  # ● 色调(tone)
  #--------------------------------------------------------------------------
  def tone=(tone)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @tone = tone
      update
    end
  end
  def tone
    return @tone
  end
  #--------------------------------------------------------------------------
  # ● 是否可见(visible)
  #--------------------------------------------------------------------------
  def visible=(v)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @visible = v
      update
    end
  end
  def visible
    return @visible
  end
  #--------------------------------------------------------------------------
  # ● 叠加模式(blend_type)
  #--------------------------------------------------------------------------
  def blend_type=(bt)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @blend_type = bt
      update
    end
  end
  def blend_type
    return @blend_type
  end
  #--------------------------------------------------------------------------
  # ● 释放内存(dispose)
  #--------------------------------------------------------------------------
  def dispose
    return if @disposed
    @disposed = true
    @contents.bitmap.dispose if @contents.bitmap && !@contents.bitmap.disposed?
    @contents.bitmap = nil
    @contents.dispose if @contents && !@contents.disposed?
    @contents = nil
    @bitmap.dispose if @bitmap && !@bitmap.disposed?
    @bitmap = nil
  end
  #--------------------------------------------------------------------------
  # ● 检测释放(disposed?)
  #--------------------------------------------------------------------------
  def disposed?
    @disposed
  end
  #--------------------------------------------------------------------------
  # ● 计算Plane的长宽与精灵排布(count_wh)
  #--------------------------------------------------------------------------
  def count_wh
    if @bitmap
      @n_w = @rect.width / (@bitmap.width * @zoom_x).to_i + 2
      @n_h = @rect.height / (@bitmap.height * @zoom_y).to_i + 2
      h = @n_h * (@bitmap.height * @zoom_y).to_i
      w = @n_w * (@bitmap.width * @zoom_x).to_i
      @contents.bitmap.dispose if @contents.bitmap && !@contents.bitmap.disposed?
      @contents.bitmap = Bitmap.new(w, h)
      for x in 0..@n_w
        for y in 0..@n_h
          rect = Rect.new(0,0,@bitmap.width,@bitmap.height)
          dest_rect = Rect.new(x * @bitmap.width * @zoom_x,
          y * @bitmap.height * @zoom_y,@bitmap.width * @zoom_x,
          @bitmap.height * @zoom_y)
          @contents.bitmap.stretch_blt(dest_rect, @bitmap, rect)
        end
      end
    end
  end
end[/pre]

点评

编辑好了 这个测试过应该没有大小的问题x 浪费时间了不好意思ORZ  发表于 2019-12-31 13:10
太强了  发表于 2019-12-31 13:04

评分

参与人数 1赞 +1 收起 理由
Cupidk爱呗茶 + 1 安慰

查看全部评分

这里岚风·雷,任饭、PM理性粉、UT/DR原作粉、(Trans)Furry自萌,半吊子技术一枚_(:з」∠)_    游戏制作交流工(liao)作(tian)室欢迎来玩!
【无偿/有偿】RGSS3(VA)脚本定制 + 合作招募/同好交友    修正Firefox/火狐浏览器的代码框复制问题(油猴脚本)
Click→←Click
回复

使用道具 举报

梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2019-12-31 00:18:03 | 显示全部楼层
将素材文件夹里的雾的素材图片也换成分辨率修改后的大小。
用头画头像,用脚写脚本
回复

使用道具 举报

梦石
3
星屑
7336
在线时间
608 小时
注册时间
2019-9-15
回帖
112

R考场第七期金奖

 楼主| 发表于 2019-12-31 00:45:58 | 显示全部楼层
KB.Driver 发表于 2019-12-31 00:18
将素材文件夹里的雾的素材图片也换成分辨率修改后的大小。

没用啊。。。右边还是少一块
********
回复

使用道具 举报

梦石
3
星屑
7336
在线时间
608 小时
注册时间
2019-9-15
回帖
112

R考场第七期金奖

 楼主| 发表于 2019-12-31 00:47:41 | 显示全部楼层
KB.Driver 发表于 2019-12-31 00:18
将素材文件夹里的雾的素材图片也换成分辨率修改后的大小。

好像无论多大的图都会被变成640X480 吐了
********
回复

使用道具 举报

梦石
3
星屑
7336
在线时间
608 小时
注册时间
2019-9-15
回帖
112

R考场第七期金奖

 楼主| 发表于 2019-12-31 01:07:04 | 显示全部楼层
本帖最后由 Cupidk爱呗茶 于 2019-12-31 01:11 编辑

********
回复

使用道具 举报

梦石
3
星屑
7336
在线时间
608 小时
注册时间
2019-9-15
回帖
112

R考场第七期金奖

 楼主| 发表于 2019-12-31 01:12:16 | 显示全部楼层
附一下自己写的脚本 部分来自RB教程 差一步就完成了 雾自动改大小实在是搞不懂 真的求大佬帮助!!!!
  1. #==============================================================================
  2. # ■ Scene_Title
  3. #------------------------------------------------------------------------------
  4. #  处理标题画面的类。
  5. #==============================================================================

  6. class Scene_Title
  7.   #--------------------------------------------------------------------------
  8.   # ● 住处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 战斗测试的情况下
  12.     if $BTEST
  13.       battle_test
  14.       return
  15.     end
  16.     # 载入数据库
  17.     $data_mapname       = load_data("Data/MapInfos.rxdata")
  18.     $data_actors        = load_data("Data/Actors.rxdata")
  19.     $data_classes       = load_data("Data/Classes.rxdata")
  20.     $data_skills        = load_data("Data/Skills.rxdata")
  21.     $data_items         = load_data("Data/Items.rxdata")
  22.     $data_weapons       = load_data("Data/Weapons.rxdata")
  23.     $data_armors        = load_data("Data/Armors.rxdata")
  24.     $data_enemies       = load_data("Data/Enemies.rxdata")
  25.     $data_troops        = load_data("Data/Troops.rxdata")
  26.     $data_states        = load_data("Data/States.rxdata")
  27.     $data_animations    = load_data("Data/Animations.rxdata")
  28.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
  29.     $data_common_events = load_data("Data/CommonEvents.rxdata")
  30.     $data_system        = load_data("Data/System.rxdata")
  31.     # 生成系统对像
  32.     $game_system = Game_System.new
  33.     # 生成标题图形
  34.     @sprite = Sprite.new
  35.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
  36.    

  37.    
  38.     @sprite1 = Sprite.new
  39.     @sprite1.bitmap = RPG::Cache.title("menu-0-off - 副本.png")
  40.     @sprite1.x = 320
  41.     @sprite1.y = 245
  42.    
  43.     @sprite2 = Sprite.new
  44.     @sprite2.bitmap = RPG::Cache.title("menu-1-off - 副本.png")
  45.     @sprite2.x = 250
  46.     @sprite2.y = 330
  47.    
  48.     @sprite3 = Sprite.new
  49.     @sprite3.bitmap = RPG::Cache.title("menu-2-off - 副本.png")
  50.     @sprite3.x = 490
  51.     @sprite3.y = 321
  52.    
  53.    
  54.    
  55.     #生成图片命令
  56.     @sprite_commands = []
  57.     (0..2).each do |i|
  58.    
  59.       
  60.       sprite = Sprite.new
  61.       sprite.bitmap = RPG::Cache.title("menu-#{i}-off.png")
  62.       case i
  63.        when 0
  64.         sprite.x = 315
  65.         sprite.y = 252
  66.        when 1
  67.         sprite.x = 242 * i
  68.         sprite.y = 300
  69.        when 2
  70.         sprite.x = 242 * i
  71.         sprite.y = 300
  72.       end
  73.   @sprite_commands << sprite
  74.      end

  75.      
  76.      
  77.      
  78.      

  79.       
  80.       
  81.       
  82.       #生成光标
  83.    
  84.     @index = 0
  85.     self.index = 0

  86. #    @sprite1 = Sprite.new
  87. #    @sprite1.bitmap = RPG::Cache.title("向上.png")
  88. #    @sprite1.x= 235
  89. #    @sprite1.y= 230



  90.    
  91.    
  92.    

  93.    





  94. # 判定继续的有效性
  95.     # 存档文件一个也不存在的时候也调查
  96.     # 有効为 @continue_enabled 为 true、無効为 false
  97.     @continue_enabled = false
  98.     for i in 0..11
  99.       if FileTest.exist?("Save/MotaSave#{i+1}.rxdata")
  100.          @continue_enabled = true
  101.       end
  102.     end
  103.     # 继续为有效的情况下、光标停止在继续上
  104.     # 无效的情况下、继续的文字显示为灰色
  105.     if @continue_enabled
  106.     self.index = 1
  107.     else

  108.     end
  109.     # 演奏标题 BGM
  110.     $game_system.bgm_play($data_system.title_bgm)
  111.     # 停止演奏 ME、BGS
  112.     Audio.me_stop
  113.     Audio.bgs_stop
  114.     #----------------------------------------------------
  115.     # fog 1. 新建 Plane 对象
  116.     #----------------------------------------------------
  117.     @fog = Plane.new
  118.     @fog.bitmap = RPG::Cache.fog('006-Sandstorm03', 0)


  119.     @fog.opacity = 88
  120.     #----------------------------------------------------
  121.    
  122.    
  123.     # 执行过渡
  124.     Graphics.transition
  125.     # 主循环
  126.     loop do
  127.       # 刷新游戏画面
  128.       Graphics.update
  129.       # 刷新输入信息
  130.       Input.update
  131.       # 刷新画面
  132.       update
  133.       # 如果画面被切换就中断循环
  134.       if $scene != self
  135.         break
  136.       end
  137.     end
  138.     # 装备过渡
  139.     Graphics.freeze

  140.     # 释放标题图形
  141.     @sprite.bitmap.dispose
  142.     @sprite.dispose
  143.     @sprite1.bitmap.dispose
  144.     @sprite1.dispose
  145.     @sprite2.bitmap.dispose
  146.     @sprite2.dispose
  147.     @sprite3.bitmap.dispose
  148.     @sprite3.dispose
  149.     #----------------------------------------------------
  150.     # fog 2. 释放 Plane 对象
  151.     #----------------------------------------------------
  152.     @fog.bitmap.dispose
  153.     @fog.dispose
  154.     #----------------------------------------------------
  155.    
  156.    
  157.    
  158.    
  159.    
  160.     #释放选项命令
  161.    @sprite_commands.each do |sprite|
  162.      sprite.bitmap.dispose
  163.      sprite.dispose
  164.      end

  165. end  
  166.    
  167.    
  168.    
  169.    
  170.    def index=(index)
  171.      if index > 2
  172.         index = 0
  173.       end
  174.       if index < 0
  175.         index = 2
  176.       end
  177.       

  178.    
  179.       sprite = @sprite_commands[@index]
  180.      sprite.bitmap.dispose
  181.      sprite.bitmap = RPG::Cache.title("menu-#{@index}-off.png")
  182.      
  183.      sprite_new = @sprite_commands[index]
  184.      sprite_new.bitmap.dispose
  185.      sprite_new.bitmap = RPG::Cache.title("menu-#{index}-on.png")
  186.      sprite_new.x = 200
  187.      sprite_new.y = 200
  188.      

  189.    
  190.      
  191.      @index = index
  192.      
  193.    
  194.     end
  195.      
  196.   #--------------------------------------------------------------------------
  197.   # ● 刷新画面
  198.   #--------------------------------------------------------------------------
  199.   def update
  200.   
  201.   update_command
  202.    
  203.   # 按下 C 键的情况下
  204.     if Input.trigger?(Input::C)
  205.       # 命令窗口的光标位置的分支
  206.       case @index
  207.       when 0  # 新游戏
  208.        command_new_game
  209.       when 1  # 继续
  210.       
  211.        command_continue
  212.       when 2  #成就系统   
  213.         p "测试版暂无成就系统"
  214.         p "更多新功能敬请期待——By Cupid"
  215.          
  216.         
  217.         
  218.                                  
  219. #       command_shutdown   #退出
  220.       end
  221.     end
  222.     #----------------------------------------------------
  223.     # fog 3. 每次 update 改变位置
  224.     #----------------------------------------------------
  225.     @fog.ox += 1
  226.     @fog.oy += 1
  227.     #----------------------------------------------------

  228.   end
  229.   def update_command
  230.     if Input.trigger?(Input::LEFT) || Input.trigger?(Input::DOWN)
  231.        $game_system.se_play($data_system.cursor_se)
  232.       self.index = @index + 1
  233.       return
  234.     end
  235.     if Input.trigger?(Input::RIGHT) || Input.trigger?(Input::UP)
  236.      $game_system.se_play($data_system.cursor_se)
  237.       self.index = @index - 1
  238.       return
  239.      end
  240. end   
  241.    
  242.       
  243.       
  244.       
  245.   #--------------------------------------------------------------------------
  246.   # ● 命令 : 新游戏
  247.   #--------------------------------------------------------------------------
  248.   def command_new_game
  249.     # 演奏确定 SE
  250.     $game_system.se_play($data_system.decision_se)
  251.     # 停止 BGM
  252.     Audio.bgm_stop
  253.     # 重置测量游戏时间用的画面计数器
  254.     Graphics.frame_count = 0
  255.     # 生成各种游戏对像
  256.     $game_temp          = Game_Temp.new
  257.     $game_system        = Game_System.new
  258.     $game_switches      = Game_Switches.new
  259.     $game_variables     = Game_Variables.new
  260.     $game_self_switches = Game_SelfSwitches.new
  261.     $game_screen        = Game_Screen.new
  262.     $game_actors        = Game_Actors.new
  263.     $game_party         = Game_Party.new
  264.     $game_troop         = Game_Troop.new
  265.     $game_map           = Game_Map.new
  266.     $game_player        = Game_Player.new
  267.     # 设置初期同伴位置
  268.     $game_party.setup_starting_members
  269.     # 设置初期位置的地图
  270.     $game_map.setup($data_system.start_map_id)
  271.     # 主角向初期位置移动
  272.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  273.     # 刷新主角
  274.     $game_player.refresh
  275.     # 执行地图设置的 BGM 与 BGS 的自动切换
  276.     $game_map.autoplay
  277.     # 刷新地图 (执行并行事件)
  278.     $game_map.update
  279.     # 切换地图画面
  280.     $movedevents={}
  281.     $scene = Scene_Map.new
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ● 命令 : 继续
  285.   #--------------------------------------------------------------------------
  286.   def command_continue
  287.     # 继续无效的情况下
  288.     unless @continue_enabled
  289.       # 演奏无效 SE
  290.       $game_system.se_play($data_system.buzzer_se)
  291.       return
  292.     end
  293.     # 演奏确定 SE
  294.     $game_system.se_play($data_system.decision_se)
  295.     # 切换到读档画面
  296.     $scene = Scene_Load.new
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ● 命令 : 退出
  300.   #--------------------------------------------------------------------------
  301.   def command_shutdown
  302.     # 演奏确定 SE
  303.     $game_system.se_play($data_system.decision_se)
  304.     # BGM、BGS、ME 的淡入淡出
  305.     Audio.bgm_fade(800)
  306.     Audio.bgs_fade(800)
  307.     Audio.me_fade(800)
  308.     # 退出
  309.     $scene = nil
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 战斗测试
  313.   #--------------------------------------------------------------------------
  314.   def battle_test
  315.     # 载入数据库 (战斗测试用)
  316.     $data_actors        = load_data("Data/BT_Actors.rxdata")
  317.     $data_classes       = load_data("Data/BT_Classes.rxdata")
  318.     $data_skills        = load_data("Data/BT_Skills.rxdata")
  319.     $data_items         = load_data("Data/BT_Items.rxdata")
  320.     $data_weapons       = load_data("Data/BT_Weapons.rxdata")
  321.     $data_armors        = load_data("Data/BT_Armors.rxdata")
  322.     $data_enemies       = load_data("Data/BT_Enemies.rxdata")
  323.     $data_troops        = load_data("Data/BT_Troops.rxdata")
  324.     $data_states        = load_data("Data/BT_States.rxdata")
  325.     $data_animations    = load_data("Data/BT_Animations.rxdata")
  326.     $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
  327.     $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
  328.     $data_system        = load_data("Data/BT_System.rxdata")
  329.     # 重置测量游戏时间用的画面计数器
  330.     Graphics.frame_count = 0
  331.     # 生成各种游戏对像
  332.     $game_temp          = Game_Temp.new
  333.     $game_system        = Game_System.new
  334.     $game_switches      = Game_Switches.new
  335.     $game_variables     = Game_Variables.new
  336.     $game_self_switches = Game_SelfSwitches.new
  337.     $game_screen        = Game_Screen.new
  338.     $game_actors        = Game_Actors.new
  339.     $game_party         = Game_Party.new
  340.     $game_troop         = Game_Troop.new
  341.     $game_map           = Game_Map.new
  342.     $game_player        = Game_Player.new
  343.     # 设置战斗测试用同伴
  344.     $game_party.setup_battle_test_members
  345.     # 设置队伍 ID、可以逃走标志、战斗背景
  346.     $game_temp.battle_troop_id = $data_system.test_troop_id
  347.     $game_temp.battle_can_escape = true
  348.     $game_map.battleback_name = $data_system.battleback_name
  349.     # 演奏战斗开始 BGM
  350.     $game_system.se_play($data_system.battle_start_se)
  351.     # 演奏战斗 BGM
  352.     $game_system.bgm_play($game_system.battle_bgm)
  353.     # 切换到战斗画面
  354.     $scene = Scene_Battle.new
  355.   end
  356. end
复制代码

********
回复

使用道具 举报

梦石
3
星屑
7336
在线时间
608 小时
注册时间
2019-9-15
回帖
112

R考场第七期金奖

 楼主| 发表于 2019-12-31 10:21:35 | 显示全部楼层
本帖最后由 Cupidk爱呗茶 于 2019-12-31 10:23 编辑

@RyanBern        @guoxiaomi @SailCat  试图召唤三大触..
********
回复

使用道具 举报

梦石
3
星屑
7336
在线时间
608 小时
注册时间
2019-9-15
回帖
112

R考场第七期金奖

 楼主| 发表于 2019-12-31 10:31:49 | 显示全部楼层
Cupidk爱呗茶 发表于 2019-12-31 10:21
@RyanBern        @guoxiaomi @SailCat  试图召唤三大触..

等级不够 召唤失败 GG

点评

关于viewport的解决方案果然就是不用viewport  发表于 2019-12-31 17:28
********
回复

使用道具 举报

梦石
0
星屑
17038
在线时间
6058 小时
注册时间
2011-7-18
回帖
152

开拓者

发表于 2019-12-31 10:40:17 | 显示全部楼层
本帖最后由 gqxastg 于 2019-12-31 17:49 编辑

https://rpg.blue/thread-362553-1-1.html
参考真·RMXP分辨率拓展重写的Plane类


有改动 修复BUG
[fold][pre lang="ruby"]#============================================================================
# ■ Plane
#============================================================================

class Plane
  #--------------------------------------------------------------------------
  # ● 初始化定义
  #--------------------------------------------------------------------------
  def initialize(viewport = nil)
    @x           = 0
    @y           = 0
    @z           = 0
    @ox          = 0
    @oy          = 0
    @ox2         = 0
    @oy2         = 0
    @rect        = viewport ? viewport.rect : Rect.new(0, 0, 800, 600) # 改成游戏分辨率(0, 0, 宽, 高)
    @zoom_x      = 1.0
    @zoom_y      = 1.0
    @bitmap      = nil
    @contents    = Sprite.new(viewport)
    @n_w         = 1
    @n_h         = 1
    @visible     = true
    @tone        = Tone.new(0, 0, 0, 0)
    @color       = Color.new(255,255,255,0)
    @blend_type  = 0
    @opacity     = 255
    @disposed    = false
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def update
    @contents.x = @x
    @contents.y = @y
    @contents.ox = @ox2
    @contents.oy = @oy2
    @contents.opacity = @opacity
    @contents.visible = @visible
    @contents.color = @color
    @contents.tone = @tone
    @contents.blend_type = @blend_type
    @contents.z = @z
  end
  #--------------------------------------------------------------------------
  # ● 装载图形(bitmap)
  #--------------------------------------------------------------------------
  def bitmap=(bitmap)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @bitmap = bitmap
      count_wh
      update
    end
  end
  #--------------------------------------------------------------------------
  # ● 图形
  #--------------------------------------------------------------------------
  def bitmap
    return @bitmap
  end
  #--------------------------------------------------------------------------
  # ● X 坐标(x)
  #--------------------------------------------------------------------------
  def x=(x)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @x = x
      update
    end
  end
  def x
    return @x
  end
  #--------------------------------------------------------------------------
  # ● Y 坐标(y)
  #--------------------------------------------------------------------------
  def y=(y)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @y = y
      update
    end
  end
  def y
    return @y
  end
  #--------------------------------------------------------------------------
  # ● Z 坐标(z)
  #--------------------------------------------------------------------------
  def z=(z)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @z = z
      update
    end
  end
  def z
    return @z
  end
  #--------------------------------------------------------------------------
  # ● X 漂移量(ox)
  #--------------------------------------------------------------------------
  def ox=(ox)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @bitmap
        @ox = ox
        @ox2 = ox % (@bitmap.width * @zoom_x).to_i
        update
      end
    end
  end
  def ox
    return @ox
  end
  #--------------------------------------------------------------------------
  # ● Y 漂移量(oy)
  #--------------------------------------------------------------------------
  def oy=(oy)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @bitmap
        @oy = oy
        @oy2 = oy % (@bitmap.height * @zoom_y).to_i
        update
      end
    end
  end
  def oy
    return @oy
  end
  #--------------------------------------------------------------------------
  # ● X 方向缩放(zoom_x)
  #--------------------------------------------------------------------------
  def zoom_x=(zx)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @zoom_x != zx
        @zoom_x = zx
        count_wh
      end
      update
    end
  end
  def zoom_x
    return @zoom_x
  end
  #--------------------------------------------------------------------------
  # ● Y 方向缩放(zoom_y)
  #--------------------------------------------------------------------------
  def zoom_y=(zy)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @zoom_y != zy
        @zoom_y = zy
        count_wh
      end
      update
    end
  end
  def zoom_y
    return @zoom_y
  end
  #--------------------------------------------------------------------------
  # ● 不透明度(opacity)
  #--------------------------------------------------------------------------
  def opacity=(op)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @opacity = op
      update
    end
  end
  def opacity
    return @opacity
  end
  #--------------------------------------------------------------------------
  # ● 颜色叠加(color)
  #--------------------------------------------------------------------------
  def color=(c)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @color = c
      update
    end
  end
  def color
    return @color
  end
  #--------------------------------------------------------------------------
  # ● 色调(tone)
  #--------------------------------------------------------------------------
  def tone=(tone)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @tone = tone
      update
    end
  end
  def tone
    return @tone
  end
  #--------------------------------------------------------------------------
  # ● 是否可见(visible)
  #--------------------------------------------------------------------------
  def visible=(v)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @visible = v
      update
    end
  end
  def visible
    return @visible
  end
  #--------------------------------------------------------------------------
  # ● 叠加模式(blend_type)
  #--------------------------------------------------------------------------
  def blend_type=(bt)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @blend_type = bt
      update
    end
  end
  def blend_type
    return @blend_type
  end
  #--------------------------------------------------------------------------
  # ● 释放内存(dispose)
  #--------------------------------------------------------------------------
  def dispose
    return if @disposed
    @disposed = true
    @contents.bitmap.dispose if @contents.bitmap && !@contents.bitmap.disposed?
    @contents.bitmap = nil
    @contents.dispose if @contents && !@contents.disposed?
    @contents = nil
    @bitmap.dispose if @bitmap && !@bitmap.disposed?
    @bitmap = nil
  end
  #--------------------------------------------------------------------------
  # ● 检测释放(disposed?)
  #--------------------------------------------------------------------------
  def disposed?
    @disposed
  end
  #--------------------------------------------------------------------------
  # ● 计算Plane的长宽与精灵排布(count_wh)
  #--------------------------------------------------------------------------
  def count_wh
    if @bitmap
      @n_w = @rect.width / (@bitmap.width * @zoom_x).to_i + 2
      @n_h = @rect.height / (@bitmap.height * @zoom_y).to_i + 2
      h = @n_h * (@bitmap.height * @zoom_y).to_i
      w = @n_w * (@bitmap.width * @zoom_x).to_i
      @contents.bitmap.dispose if @contents.bitmap && !@contents.bitmap.disposed?
      @contents.bitmap = Bitmap.new(w, h)
      for x in 0..@n_w
        for y in 0..@n_h
          rect = Rect.new(0,0,@bitmap.width,@bitmap.height)
          dest_rect = Rect.new(x * @bitmap.width * @zoom_x,
          y * @bitmap.height * @zoom_y,@bitmap.width * @zoom_x,
          @bitmap.height * @zoom_y)
          @contents.bitmap.stretch_blt(dest_rect, @bitmap, rect)
        end
      end
    end
  end
end[/pre][/fold]

评分

参与人数 1星屑 +100 赞 +1 收起 理由
guoxiaomi + 100 + 1 认可答案

查看全部评分

这里岚风·雷,任饭、PM理性粉、UT/DR原作粉、(Trans)Furry自萌,半吊子技术一枚_(:з」∠)_    游戏制作交流工(liao)作(tian)室欢迎来玩!
【无偿/有偿】RGSS3(VA)脚本定制 + 合作招募/同好交友    修正Firefox/火狐浏览器的代码框复制问题(油猴脚本)
Click→←Click
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部