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

Project1

 找回密码
 注册会员
搜索
查看: 56|回复: 1

[已经解决] 自制系统问题请教

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2332
在线时间
363 小时
注册时间
2017-4-21
帖子
143
发表于 7 天前 | 显示全部楼层 |阅读模式

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

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

x
第1..2..3次自己改脚本
做了一个修改器的功能,可是遇到了一个问题,代码在83和84行
如下图:   PS:按下C键,光标指着得道具会向下对齐,想请教一下解决方案
1123.png

  1. #$scene = Scene_xgqHuoDeDaoJu.new打开脚本

  2. class Scene_xgqHuoDeDaoJu
  3.   #--------------------------------------------------------------------------
  4.   # ● 主处理
  5.   #--------------------------------------------------------------------------
  6.   def main
  7.     screen = Spriteset_Map.new
  8.     # 生成帮助窗口、特技窗口
  9.     @help_window = Window_Help.new
  10.     @help_window.z=1000
  11.     @skill_window = Window_xgqHuoDeDaoJu.new(0)
  12.     @skill_window.z=1000
  13.     # 关联帮助窗口
  14.     @skill_window.help_window = @help_window
  15.     # 生成目标窗口 (设置为不可见・不活动)
  16.     @target_window = Window_Target.new
  17.     @target_window.visible = false
  18.     @target_window.active = false
  19.     @target_window.z=1896
  20.     # 执行过渡
  21.     Graphics.transition
  22.     # 主循环
  23.     loop do
  24.       # 刷新游戏画面
  25.       Graphics.update
  26.       # 刷新输入信息
  27.       Input.update
  28.       # 刷新画面
  29.       update
  30.       # 如果画面切换的话就中断循环
  31.       if $scene != self
  32.         break
  33.       end
  34.     end
  35.     # 准备过渡
  36.     Graphics.freeze
  37.     # 释放窗口
  38.     screen.dispose
  39.     @help_window.dispose
  40.     @skill_window.dispose
  41.     @target_window.dispose
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 刷新画面
  45.   #--------------------------------------------------------------------------
  46.   def update
  47.     # 刷新窗口
  48.     @help_window.update
  49.     @skill_window.update
  50.     @target_window.update
  51.     # 特技窗口被激活的情况下: 调用 update_skill
  52.     if @skill_window.active
  53.       update_skill
  54.       return
  55.     end
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 刷新画面 (特技窗口被激活的情况下)
  59.   #--------------------------------------------------------------------------
  60.   def update_skill
  61.     # 按下 B 键的情况下
  62.     if Input.trigger?(Input::B)
  63.       # 演奏取消 SE
  64.       $game_system.se_play($data_system.cancel_se)
  65.       # 切换到地图
  66.       $scene = Scene_Map.new
  67.       return
  68.     end
  69.     if Input.trigger?(Input::C)
  70.       $game_system.se_play($data_system.decision_se)
  71.       linshi = @skill_window.index
  72.     case @skill_window.item
  73.     when RPG::Item
  74.       b = 1
  75.     when RPG::Weapon
  76.       b = 2
  77.     when RPG::Armor
  78.       b = 3
  79.     end
  80.       a = @skill_window.item.id
  81.       $game_party.gain_item(a,1) if b == 1
  82. if @skill_window != nil ; @skill_window.dispose ; @skill_window = nil ; end
  83. @skill_window = Window_xgqHuoDeDaoJu.new(linshi)
  84.     end
  85.   end
  86. end



  87. class Window_xgqHuoDeDaoJu < Window_Selectable
  88.   #--------------------------------------------------------------------------
  89.   # ● 初始化对像
  90.   #--------------------------------------------------------------------------
  91.   def initialize(index)
  92.     super(0, 64, 640, 416)
  93.     @column_max = 2
  94.     refresh
  95.     self.index = index
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● 获取物品
  99.   #--------------------------------------------------------------------------
  100.   def item
  101.     return @data[self.index]
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 刷新
  105.   #--------------------------------------------------------------------------
  106.   def refresh
  107.     if self.contents != nil
  108.       self.contents.dispose
  109.       self.contents = nil
  110.     end
  111.     # 添加物品
  112.     @data = []
  113.     for i in 120...200
  114.       @data.push($data_items[i]) if $data_items[i].icon_name != "" and $data_items[i].variance == 1 or $data_items[i].variance == 2
  115.     end
  116.     #添加武器
  117.     for i in 720...900
  118.       @data.push($data_weapons[i]) if $data_weapons[i].icon_name != ""
  119.     end
  120.     #添加防具
  121.     for i in 2...99
  122.       @data.push($data_armors[i]) if $data_armors[i].icon_name != ""
  123.     end
  124.     for i in 200...250
  125.       @data.push($data_armors[i]) if $data_armors[i].icon_name != ""
  126.     end
  127.     for i in 302...303
  128.       @data.push($data_armors[i]) if $data_armors[i].icon_name != ""
  129.     end
  130.     for i in 700...730
  131.       @data.push($data_armors[i]) if $data_armors[i].icon_name != ""
  132.     end
  133.     $xgqHuoDeDaoJu = @data
  134.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  135.     @item_max = @data.size
  136.     if @item_max > 0
  137.       self.contents = Bitmap.new(width - 32, row_max * 32)
  138.       for i in 0...@item_max
  139.         draw_item(i)
  140.       end
  141.     end
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● 描绘项目
  145.   #     index : 项目编号
  146.   #--------------------------------------------------------------------------
  147.   def draw_item(index)
  148.     item = @data[index]
  149.     case item
  150.     when RPG::Item
  151.       number = $game_party.item_number(item.id)
  152.     when RPG::Weapon
  153.       number = $game_party.weapon_number(item.id)
  154.     when RPG::Armor
  155.       number = $game_party.armor_number(item.id)
  156.     end
  157.     self.contents.font.color = normal_color
  158.     x = 4 + index % 2 * (288 + 32)
  159.     y = index / 2 * 32
  160.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  161.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  162.     bitmap = RPG::Cache.icon(item.icon_name)
  163.     opacity = self.contents.font.color == normal_color ? 255 : 128
  164.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  165.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  166.     self.contents.draw_text(x + 256, y , 24, 32, number.to_s, 2)
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ● 刷新帮助文本
  170.   #--------------------------------------------------------------------------
  171.   def update_help
  172.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  173.   end
  174. end
复制代码

Lv4.逐梦者

梦石
0
星屑
11824
在线时间
1150 小时
注册时间
2006-11-10
帖子
5236
发表于 7 天前 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2019-1-12 10:33 编辑

原因是你每次按C都重新生成窗口啊,  页面翻滚是用光标移动刷新对应行的, 你直接生成当然没翻滚咯

解决方法,  用 refresh 刷新窗口显示的内容,  不需要重新生成, 一般窗口里定义refresh方法, 就是为了刷新内容用的

if Input.trigger?(Input::C)
  $game_system.se_play($data_system.decision_se)
  $game_party.gain_item(@skill_window.item.id,1) if @skill_window.item.is_a?(RPG::Item)
  @skill_window.refresh
end
  

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
阮声悠悠 + 1 了解了,原来一句@skill_window.refresh就.

查看全部评分

祥瑞御免 ,家宅平安
回复 支持 反对

使用道具 举报

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

本版积分规则

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

站长信箱:fux2@moe9th.com|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2019-1-19 20:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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