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

Project1

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

[已经解决] 自己的窗口脚本请教(标题不知道怎样更专业一点)

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3981
在线时间
603 小时
注册时间
2017-4-21
帖子
228
跳转到指定楼层
1
发表于 2019-3-6 14:28:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 阮声悠悠 于 2019-3-7 23:33 编辑

找到了一个更合适的解决方案,所以对我来说这张帖子的问题已经不重要了。


这是一个罗列道具的脚本。罗列的数组在88行
我希望窗口的第一行罗列物品ID为  1,    2,    3  的图标和名称
但是我只能描绘出数组的第一个,第二个和第三个不知道怎样才能描绘出来……
这是第一个想请教的……

然后,bitmap = RPG::Cache.icon($data_items[@data[index][0]].icon_name)
这句脚本是显示物品的图标,但我不知道怎样让这个图标变成灰色,或者说半透明(也就是未获得这个道具时候的状态)
这是第二个想请教的……


RUBY 代码复制
  1. #$scene = Scene_xgqBhuoZhuoTuJian.new打开脚本
  2.  
  3.  
  4. class Scene_xgqBhuoZhuoTuJian
  5.   #--------------------------------------------------------------------------
  6.   # ● 主处理
  7.   #--------------------------------------------------------------------------
  8.   def main
  9.     screen = Spriteset_Map.new
  10.     # 生成窗口
  11.     @tujian_window = Window_BhuoZhuoTuJian.new
  12.     @tujian_window.z=1000
  13.     # 生成目标窗口 (设置为不可见・不活动)
  14.     @target_window = Window_Target.new
  15.     @target_window.visible = false
  16.     @target_window.active = false
  17.     @target_window.z=1896
  18.     # 执行过渡
  19.     Graphics.transition
  20.     # 主循环
  21.     loop do
  22.       # 刷新游戏画面
  23.       Graphics.update
  24.       # 刷新输入信息
  25.       Input.update
  26.       # 刷新画面
  27.       update
  28.       # 如果画面切换的话就中断循环
  29.       if $scene != self
  30.         break
  31.       end
  32.     end
  33.     # 准备过渡
  34.     Graphics.freeze
  35.     # 释放窗口
  36.     screen.dispose
  37.     @tujian_window.dispose
  38.     @target_window.dispose
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 刷新画面
  42.   #--------------------------------------------------------------------------
  43.   def update
  44.     # 刷新窗口
  45.     @tujian_window.update
  46.     @target_window.update
  47.     # 图鉴窗口被激活的情况下: 调用 update_tujian
  48.     if @tujian_window.active
  49.       update_tujian
  50.       return
  51.     end
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 刷新画面 (特技窗口被激活的情况下)
  55.   #--------------------------------------------------------------------------
  56.   def update_tujian
  57.     # 按下 B 键的情况下
  58.     if Input.trigger?(Input::B)
  59.       # 演奏取消 SE
  60.       $game_system.se_play($data_system.cancel_se)
  61.       # 切换到地图
  62.       $scene = Scene_Map.new
  63.       return
  64.     end
  65.   end
  66. end
  67.  
  68.  
  69.  
  70. class Window_BhuoZhuoTuJian < Window_Selectable
  71.   #--------------------------------------------------------------------------
  72.   # ● 初始化对像
  73.   #--------------------------------------------------------------------------
  74.   def initialize
  75.     super(0, 0, 640, 480)
  76.     @column_max = 1
  77.     refresh
  78.     self.index = 0
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 刷新
  82.   #--------------------------------------------------------------------------
  83.   def refresh
  84.     if self.contents != nil
  85.       self.contents.dispose
  86.       self.contents = nil
  87.     end
  88.     @data = [
  89.     [   1,    2,    3,    0,    0],#第一行出现的物品ID,如有有0就不出现
  90.     [   4,    5,    6,    0,    0],
  91.     [   7,    8,    9,    0,    0],
  92.     [   58,   59,   0,    0,    0],
  93.     [   115,  0,    0,    0,    0],
  94.     [   236,  237,  106,  107,  0]
  95.  
  96.     ]
  97.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  98.     @item_max = @data.size
  99.     if @item_max > 0
  100.       self.contents = Bitmap.new(width - 32, row_max * 32)
  101.       for i in 0...@item_max
  102.         draw_item(i)
  103.       end
  104.     end
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 描绘项目
  108.   #     index : 项目编号
  109.   #--------------------------------------------------------------------------
  110.   def draw_item(index)
  111.     skill = @data[index]
  112.     self.contents.font.color = normal_color
  113.     x = 4
  114.     y = index * 32
  115.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  116.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  117.     bitmap = RPG::Cache.icon($data_items[@data[index][0]].icon_name)
  118.     opacity = self.contents.font.color == normal_color ? 255 : 128
  119.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  120.     self.contents.draw_text(x + 28, y, 204, 32, $data_items[@data[index][0]].name, 0)
  121.   end
  122. end

Lv4.逐梦者

梦石
0
星屑
14048
在线时间
2070 小时
注册时间
2016-9-20
帖子
844
2
发表于 2019-3-6 14:42:30 | 只看该作者
本帖最后由 ppspssss 于 2019-3-6 14:44 编辑

不是[index][0] 那个 0改了1或以上就是第几个了么, 至于透明應該是改opacity
还有我QQ為什么被你突然拉黑了又不說原因,  这个問題困扰我很多天
内容仅供参考,
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3981
在线时间
603 小时
注册时间
2017-4-21
帖子
228
3
 楼主| 发表于 2019-3-6 15:13:23 | 只看该作者
ppspssss 发表于 2019-3-6 14:42
不是[0] 那个 0改了1或以上就是第几个了么, 至于透明應該是改opacity
还有我QQ為什么被你突然拉黑了又不說 ...

QQ的话只有一个好友感觉怪怪的,就删除了,看起来整洁一点。
话说,删除QQ还要征求对方同意?再加上你和我没有任何交情

至于0改成1就能解决问题……
我有个不成熟的小建议,你再读一下这张帖子,重新寻找帖子中的疑问。

点评

总之隨便給个理由再刪,比如我煩,我睿智之类的  发表于 2019-3-6 16:55
是我的错  发表于 2019-3-6 16:47
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

4
发表于 2019-3-6 15:50:11 | 只看该作者
XP的脚本结构本来就不太好,再不认真研究就自己瞎搞的话谁也帮不了你。
把你的窗口重新写了一遍。

RUBY 代码复制
  1. class Window_BhuoZhuoTuJian < Window_Selectable
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对像
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     super(0, 0, 640, 480)
  7.     @column_max = 3  ##
  8.     self.index = 0
  9.     init_data
  10.     refresh
  11.   end
  12.  
  13.   def init_data
  14.     @data = [
  15.        1,    2,    3,#第一行出现的物品ID,如有有0就不出现
  16.        4,    5,    6,
  17.        7,    8,    9,
  18.        58,   59,   0,
  19.        115,  0,    0,
  20.        236,  237,  106,  107,  0
  21.     ]
  22.     @item_max = @data.size
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 刷新
  26.   #--------------------------------------------------------------------------
  27.   def refresh
  28.     if self.contents
  29.       self.contents.clear
  30.     else
  31.       self.contents = Bitmap.new(width - 32, @item_max * 32)
  32.     end
  33.     @item_max.times{|i| draw_item(i)}
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 描绘项目
  37.   #     index : 项目编号
  38.   #--------------------------------------------------------------------------
  39.   def draw_item(index)
  40.     x = index % @column_max * (self.cursor_rect.width + 32)
  41.     y = index / @column_max * 32
  42.     if (id = @data[index]) > 0
  43.       bitmap = RPG::Cache.icon($data_items[id].icon_name)
  44.       self.contents.blt(x, y + 4, bitmap, bitmap.rect)
  45.       self.contents.draw_text(x + 28, y, 204, 32, $data_items[id].name)
  46.     end
  47.   end
  48. end




提醒你几点,想一下下面几个问题
@column_max是什么,@data数组套数组能改变列数吗?
self.contents是什么,有必要每次refresh生成新对象吗?
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3981
在线时间
603 小时
注册时间
2017-4-21
帖子
228
5
 楼主| 发表于 2019-3-6 16:13:35 | 只看该作者
KB.Driver 发表于 2019-3-6 15:50
XP的脚本结构本来就不太好,再不认真研究就自己瞎搞的话谁也帮不了你。
把你的窗口重新写了一遍。

啊哈哈哈,抱歉,学习了,我现在对脚本还在依葫芦画瓢的阶段,我正在尝试模仿着写一些简单的脚本。

这样修改的话是一行有3列。
我想要第一行光标包含了:回复剂、超回复剂、完全恢复剂,(配图最后一行的效果)
然后第二行第三行又不一样,例如配图,第四行和第五行的出现的物品个数不同,最多一行只会出现4个

点评

灰度是不是#@a.tone = Tone.new(255, 255, 255, 128)#精灵色調#不是lone hue  发表于 2019-3-6 18:19
想知道bitmap = RPG::Cache.icon($data_items[@data[index][0]].icon_name)有没有办法改变灰度,就像文字的无效文字色一样。。。  发表于 2019-3-6 16:59
如果一定要用现有的脚本实现,就只有在Scene里放好几个窗口,每个窗口的列数不同。  发表于 2019-3-6 16:16
按照RM现有的脚本没有办法一个窗口不同行的列数不同,想要那样的效果只有你自己写了。  发表于 2019-3-6 16:15
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3981
在线时间
603 小时
注册时间
2017-4-21
帖子
228
6
 楼主| 发表于 2019-3-6 16:37:05 | 只看该作者
KB.Driver 发表于 2019-3-6 15:50
XP的脚本结构本来就不太好,再不认真研究就自己瞎搞的话谁也帮不了你。
把你的窗口重新写了一遍。

貌似可以一行出现不同个数,因为实际上还是一列……
  1. #$scene = Scene_xgqBhuoZhuoTuJian.new打开脚本


  2. class Scene_xgqBhuoZhuoTuJian
  3.   #--------------------------------------------------------------------------
  4.   # ● 主处理
  5.   #--------------------------------------------------------------------------
  6.   def main
  7.     screen = Spriteset_Map.new
  8.     # 生成窗口
  9.     @tujian_window = Window_BhuoZhuoTuJian.new
  10.     @tujian_window.z=1000
  11.     # 生成目标窗口 (设置为不可见・不活动)
  12.     @target_window = Window_Target.new
  13.     @target_window.visible = false
  14.     @target_window.active = false
  15.     @target_window.z=1896
  16.     # 执行过渡
  17.     Graphics.transition
  18.     # 主循环
  19.     loop do
  20.       # 刷新游戏画面
  21.       Graphics.update
  22.       # 刷新输入信息
  23.       Input.update
  24.       # 刷新画面
  25.       update
  26.       # 如果画面切换的话就中断循环
  27.       if $scene != self
  28.         break
  29.       end
  30.     end
  31.     # 准备过渡
  32.     Graphics.freeze
  33.     # 释放窗口
  34.     screen.dispose
  35.     @tujian_window.dispose
  36.     @target_window.dispose
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 刷新画面
  40.   #--------------------------------------------------------------------------
  41.   def update
  42.     # 刷新窗口
  43.     @tujian_window.update
  44.     @target_window.update
  45.     # 图鉴窗口被激活的情况下: 调用 update_tujian
  46.     if @tujian_window.active
  47.       update_tujian
  48.       return
  49.     end
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 刷新画面 (特技窗口被激活的情况下)
  53.   #--------------------------------------------------------------------------
  54.   def update_tujian
  55.     # 按下 B 键的情况下
  56.     if Input.trigger?(Input::B)
  57.       # 演奏取消 SE
  58.       $game_system.se_play($data_system.cancel_se)
  59.       # 切换到地图
  60.       $scene = Scene_Map.new
  61.       return
  62.     end
  63.   end
  64. end



  65. class Window_BhuoZhuoTuJian < Window_Selectable
  66.   #--------------------------------------------------------------------------
  67.   # ● 初始化对像
  68.   #--------------------------------------------------------------------------
  69.   def initialize
  70.     super(0, 0, 640, 480)
  71.     @column_max = 1
  72.     refresh
  73.     self.index = 0
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 刷新
  77.   #--------------------------------------------------------------------------
  78.   def refresh
  79.     @data = [
  80.     [   1,    2,    3,    0,    0],#第一行出现的物品ID,如有有0就不出现
  81.     [   4,    5,    6,    0,    0],
  82.     [   7,    8,    9,    0,    0],
  83.     [   58,   59,   0,    0,    0],
  84.     [   115,  0,    0,    0,    0],
  85.     [   236,  237,  106,  107,  0],
  86.     [   789,  790,  791,  792,  0]

  87.     ]
  88.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  89.     @item_max = @data.size
  90.     if @item_max > 0
  91.       self.contents = Bitmap.new(width - 32, row_max * 32)
  92.       for i in 0...@item_max
  93.         draw_item(i)
  94.         draw_itemer(i)
  95.         draw_itemsan(i)
  96.         draw_itemsi(i)
  97.       end
  98.     end
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 描绘项目
  102.   #     index : 项目编号
  103.   #--------------------------------------------------------------------------
  104.   def draw_item(index)
  105.     skill = @data[index]
  106.     x = 4
  107.     y = index * 32
  108.     bitmap = RPG::Cache.icon($data_items[@data[index][0]].icon_name)
  109.     self.contents.blt(x, y + 4, bitmap, bitmap.rect)
  110.     self.contents.draw_text(x + 28, y, 204, 32, $data_items[@data[index][0]].name, 0)
  111.   end
  112.   def draw_itemer(index)
  113. if @data[index][1] != 0
  114.     skill = @data[index]
  115.     x = 152
  116.     y = index * 32
  117.     bitmap = RPG::Cache.icon($data_items[@data[index][1]].icon_name)
  118.     self.contents.blt(x, y + 4, bitmap, bitmap.rect)
  119.     self.contents.draw_text(x + 28, y, 204, 32, $data_items[@data[index][1]].name, 0)
  120. end
  121.   end
  122.   def draw_itemsan(index)
  123. if @data[index][2] != 0
  124.     skill = @data[index]
  125.     x = 304
  126.     y = index * 32
  127.     bitmap = RPG::Cache.icon($data_items[@data[index][2]].icon_name)
  128.     self.contents.blt(x, y + 4, bitmap, bitmap.rect)
  129.     self.contents.draw_text(x + 28, y, 204, 32, $data_items[@data[index][2]].name, 0)
  130. end
  131.   end
  132.   def draw_itemsi(index)
  133. if @data[index][3] != 0
  134.     skill = @data[index]
  135.     x = 462
  136.     y = index * 32
  137.     bitmap = RPG::Cache.icon($data_items[@data[index][3]].icon_name)
  138.     self.contents.blt(x, y + 4, bitmap, bitmap.rect)
  139.     self.contents.draw_text(x + 28, y, 204, 32, $data_items[@data[index][3]].name, 0)
  140. end
  141.   end
  142. end
复制代码

点评

不对, 这样做一样会被update刷新掉, 要改光标的UPDATE才可以  发表于 2019-3-6 19:10
既然都手动区分道具数量了, 那就干脆顺便手动调整光标大小就好了 self.cursor_rect.set(x,y,width,height) 加上这句试试, 括号里参数自己填  发表于 2019-3-6 19:04
不过,就是感觉怪怪的。因为只有一个物品的情况下也会拉到最长。  发表于 2019-3-6 18:22
好吧,效果达到了就行了。  发表于 2019-3-6 18:20
对啊,就是想要这样的效果……  发表于 2019-3-6 18:15
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37784
在线时间
5395 小时
注册时间
2006-11-10
帖子
6546
7
发表于 2019-3-6 19:14:13 | 只看该作者
def update_cursor_rect
   if @data[self.index][3] != 0
       self.cursor_rect.set(x,y,width,height)
   elsif @data[self.index][2] != 0
       self.cursor_rect.set(x,y,width,height)
   elsif @data[self.index][1] != 0
       self.cursor_rect.set(x,y,width,height)
  else
      self.cursor_rect.set(x,y,width,height)
  end
end

这里也根据道具数量手动画吧XD
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

8
发表于 2019-3-6 19:21:39 | 只看该作者
灯笼菜刀王 发表于 2019-3-6 19:14
def update_cursor_rect
   if @data[self.index][3] != 0
       self.cursor_rect.set(x,y,width,height) ...

说实在的,弄这么麻烦还不如不显示光标,输入只用来做上下翻页用(

点评

翻頁好像在Window_Selectable里有 page_row_max你看看是不是  发表于 2019-3-6 21:59
类似物品的图鉴吧  发表于 2019-3-6 19:41
哈哈,好像挺有道理的。可以教一下上下翻页的......  发表于 2019-3-6 19:41
我也不知道,但是看到这个代码实在是非常的不优雅……  发表于 2019-3-6 19:29
其实我不知道楼主要干嘛用, XD  发表于 2019-3-6 19:27
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
478
在线时间
71 小时
注册时间
2019-3-6
帖子
14
9
发表于 2019-3-7 23:27:46 | 只看该作者
参考Window_Item,里面@column_max就是列数,更改这个值就可以了
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
478
在线时间
71 小时
注册时间
2019-3-6
帖子
14
10
发表于 2019-3-7 23:38:14 | 只看该作者
另外你想要的是不是大概就是这种效果?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-24 08:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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