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

Project1

 找回密码
 注册会员
搜索

菜单窗口显示的问题

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

正文摘要:

本帖最后由 cmmd1 于 2015-12-8 16:34 编辑

回复

cmmd1 发表于 2015-12-8 18:53:32
cinderelmini 发表于 2015-12-8 18:03
这些放到【Window_item】里面最后一个end之前。
[fold][/fold]

全部都在这里。

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Window_Item
  3. #------------------------------------------------------------------------------
  4. #  物品画面、战斗画面、显示浏览物品的窗口。
  5. #==============================================================================
  6.  
  7. class Window_Item < Window_Selectable
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     super(240, 64, 540, 288)
  13.     @column_max = 8
  14.     refresh
  15.     self.index = 0
  16.     # 战斗中的情况下将窗口移至中央并将其半透明化
  17.     if $game_temp.in_battle
  18.       self.y = 64
  19.       self.height = 256
  20.       self.back_opacity = 160
  21.     end
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 获取物品
  25.   #--------------------------------------------------------------------------
  26.   def item
  27.     return @data[self.index]
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 刷新
  31.   #--------------------------------------------------------------------------
  32.   def refresh
  33.     if self.contents != nil
  34.       self.contents.dispose
  35.       self.contents = nil
  36.     end
  37.     @data = []
  38.     # 添加物品
  39.     for i in 1...$data_items.size
  40.       if $game_party.item_number(i) > 0
  41.         @data.push($data_items[i])
  42.       end
  43.     end
  44.     # 在战斗中以外添加武器、防具
  45.     unless $game_temp.in_battle
  46.       for i in 1...$data_weapons.size
  47.         if $game_party.weapon_number(i) > 0
  48.           @data.push($data_weapons[i])
  49.         end
  50.       end
  51.       for i in 1...$data_armors.size
  52.         if $game_party.armor_number(i) > 0
  53.           @data.push($data_armors[i])
  54.         end
  55.       end
  56.     end
  57.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  58.     @item_max = @data.size
  59.     if @item_max > 0
  60.       self.contents = Bitmap.new(width - 32, row_max * (32 * 2)) # 列数要乘以两行
  61.       for i in 0...@item_max
  62.         draw_item(i)
  63.       end
  64.     end
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 项目间距
  68.   #--------------------------------------------------------------------------
  69.   def space
  70.     return 1#16
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 描绘项目
  74.   #     index : 项目编号
  75.   #--------------------------------------------------------------------------
  76.   def draw_item(index)
  77.     item = @data[index]
  78.     case item
  79.     when RPG::Item
  80.       number = $game_party.item_number(item.id)
  81.     when RPG::Weapon
  82.       number = $game_party.weapon_number(item.id)
  83.     when RPG::Armor
  84.       number = $game_party.armor_number(item.id)
  85.     end
  86.     if item.is_a?(RPG::Item) and
  87.        $game_party.item_can_use?(item.id)
  88.       self.contents.font.color = normal_color
  89.     else
  90.       self.contents.font.color = disabled_color
  91.     end
  92.     x = 16 + index % @column_max * (62 + space) # x宽度加上间距
  93.     y = index / @column_max * (32 * 2) # y高度要乘以两行
  94.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  95.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  96.     bitmap = RPG::Cache.icon(item.icon_name)
  97.     opacity = self.contents.font.color == normal_color ? 255 : 150
  98.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  99. #    self.contents.draw_text(x + 28, y, 32, 32, item.name, 0)
  100. #    self.contents.draw_text(x + 28, y, 16, 32, ":", 1)
  101.     self.contents.draw_text(x - 8, y + 28, 36, 20, "x" + number.to_s, 2)
  102.   end
  103.  
  104.   #--------------------------------------------------------------------------
  105.   # ● 更新光标矩形
  106.   #--------------------------------------------------------------------------
  107.   def update_cursor_rect
  108.     # 光标位置不满 0 的情况下
  109.     if @index < 0
  110.       self.cursor_rect.empty
  111.       return
  112.     end
  113.     # 获取当前的行
  114.     row = @index / @column_max
  115.     # 当前行被显示开头行前面的情况下
  116.     if row < self.top_row
  117.       # 从当前行向开头行滚动
  118.       self.top_row = row
  119.     end
  120.     # 当前行被显示末尾行之后的情况下
  121.     if row > self.top_row + (self.page_row_max - 1)
  122.       # 从当前行向末尾滚动
  123.       self.top_row = row - (self.page_row_max - 1)
  124.     end
  125.     # 计算光标的宽度
  126.     cursor_width = self.width / @column_max - 5#32
  127.     # 计算光标坐标
  128.     x = @index % @column_max * (cursor_width + space) # x宽度加上间距
  129.     y = @index / @column_max * 64 - self.oy # y高度要乘以两行(31 * 2)
  130.     # 更新光标矩形
  131.     self.cursor_rect.set(x, y, cursor_width, 60)
  132.   end
  133.  
  134.   #--------------------------------------------------------------------------
  135.   # ● 刷新帮助文本
  136.   #--------------------------------------------------------------------------
  137.   def update_help
  138.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  139.   end
  140. end
  141.  
  142.  
  143.   #--------------------------------------------------------------------------
  144.   # ● 获取开头行
  145.   #--------------------------------------------------------------------------
  146.   def top_row
  147.     # 将窗口内容的传送源 Y 坐标、1 行的高 32 等分
  148.     return self.oy / (32 * 2)
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ● 设置开头行
  152.   #     row : 显示开头的行
  153.   #--------------------------------------------------------------------------
  154.   def top_row=(row)
  155.     # row 未满 0 的场合更正为 0
  156.     if row < 0
  157.       row = 0
  158.     end
  159.     # row 超过 row_max - 1 的情况下更正为 row_max - 1
  160.     if row > row_max - 1
  161.       row = row_max - 1
  162.     end
  163.     # row 1 行高的 32 倍、窗口内容的传送源 Y 坐标
  164.     self.oy = row * (32 * 2)
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ● 获取 1 页可以显示的行数
  168.   #--------------------------------------------------------------------------
  169.   def page_row_max
  170.     # 窗口的高度,设置画面的高度减去 32 ,除以 1 行的高度 32
  171.     return (self.height - 32) / (32 * 2)
  172.   end

点评

这并不可笑嘛~~问题描述清晰然后正好这类问题窝比较擅长……所以挺喜欢回答的…………  发表于 2015-12-8 19:50
所以我问一些对别人来说很简单的问题,有人看到我的ID就笑话我。  发表于 2015-12-8 19:39
(๑íㅂì๑)……07年……………………(开会的时候………………  发表于 2015-12-8 19:33
恩,抱歉。别看我注册的早。也就这些天,才来学的。昨天弄了一整天。今天开会发言的时候。 我说了句“我们针对民用爆炸物品栏显示”差点搞笑了  发表于 2015-12-8 19:29
正常的格式就是一个【class】对应一个【end】,一个【def】对应一个【end】,然后所有的【def】都应该在【class】的【end】里面。  发表于 2015-12-8 19:00
cinderelmini 发表于 2015-12-8 18:03:30
本帖最后由 cinderelmini 于 2015-12-8 18:58 编辑
不用看了


更新:
做了统一处理,加了几个方法
【window_lines】:窗口的行数,改显示行数的话可以直接在这个方法里面改返回的值。
【window_height】:不用改这个方法的内容,计算出窗口的高度用的。
【line_height】:一行的高度,要63还是64直接改这个方法返回的数字。
这几个都用一串#标出来了。
顺便就是获取物品的这段:
  1. # 添加物品
  2.     for i in 1...$data_items.size
  3.       if $game_party.item_number(i) > 0
  4.         @data.push($data_items[i])
  5.       end
  6.     end
  7.     # 在战斗中以外添加武器、防具
  8.     unless $game_temp.in_battle
  9.       for i in 1...$data_weapons.size
  10.         if $game_party.weapon_number(i) > 0
  11.           @data.push($data_weapons[i])
  12.         end
  13.       end
  14.       for i in 1...$data_armors.size
  15.         if $game_party.armor_number(i) > 0
  16.           @data.push($data_armors[i])
  17.         end
  18.       end
  19.     end
复制代码
  1. @data.push($data_items[i])
  2. @data.push($data_weapons[i])
  3. @data.push($data_armors[i])
复制代码
这几个后面的
  1. [i]
复制代码
不能删,
我还找了半天出错的原因………………………………
■ Window_Item

点评

认可答案!  发表于 2015-12-8 19:09
恩,果然是大神啊,这里面好像很复杂啊。要是没有你帮我弄,我恐怕一辈子也弄不了。  发表于 2015-12-8 19:09
恩,我琢磨一下。  发表于 2015-12-8 19:00
窝也更新进了脚本。没变化  发表于 2015-12-8 18:52
算了……窝现在更新这楼的脚本做了统一处理……  发表于 2015-12-8 18:48
cinderelmini 发表于 2015-12-8 16:57:46
本帖最后由 cinderelmini 于 2015-12-8 17:00 编辑

附件替换工程(上传的这个工程而不是你自己的游戏工程)Data文件夹里的同名文件(可以先备份原来那个),
改过的脚本【Scene_Menu】【Scene_Item】【Scene_Status】,
里面已经用一串#标出改的地方了,坐标什么的就在对应的地方改。

加了只有主角显示善恶。

Scripts.rxdata

122.44 KB, 下载次数: 54

点评

谢谢,这么详细的解释,真是太好啦。很少有人这么耐心详细的教啊。认可答案  发表于 2015-12-8 17:21

评分

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

查看全部评分

cmmd1 发表于 2015-12-8 16:11:52
本帖最后由 cmmd1 于 2015-12-8 16:13 编辑

@cinderelmini 你没回复,我都点评不了啊。这里说明吧!
那个状态窗口就是显示角色状态啊,比如能力,HP,SP那个全屏窗口。
不是队伍这些东西,是下面的善恶值这个窗口的内容,转移到以上描述的状态窗口。
金钱窗口里面的内容,转移到物品栏窗口。
额,这个没有工程的,就是以上所述,没明白指出,还可以详细点描述。

点评

如果设置成队伍里面都有的话,这事件不知道怎么做。还是设置成只有主角有声望和善恶吧,其他人的状态里没有  发表于 2015-12-8 16:47
那个声望什么的,可以弄成队伍里的人分别都有?  发表于 2015-12-8 16:44
话说,这个物品栏都是你教我做出来的。效果是很不错,不过有个要命的问题,等下再说  发表于 2015-12-8 16:43
嗯,只要不是放在矩阵里面就方便多了。  发表于 2015-12-8 16:43
我只是那样表示,放在那里先,我会在下面画个小框装这些文字。先放进去,坐标写上,到时候我好调位置  发表于 2015-12-8 16:41
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-14 19:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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