Project1

标题: 道具分類選單改成圖片 [打印本页]

作者: 亂堂和樹    时间: 2012-10-29 22:43
标题: 道具分類選單改成圖片
不知道有沒有人...有改過KGC的道具分類
(◆ アイテム分類 - KGC_CategorizeItem ◆ VX ◆)
http://ytomy.sakura.ne.jp/tkool/ ... ech=categorize_item

這個腳本會在道具菜單上顯示 "通常アイテム", "戦闘用アイテム", "武器",  "盾"....等等的選項
誰能夠告訴我把他這選項改為自創的圖片菜單~而且限定他只能左右移動嗎~?

還有冒昧的問個不相干的...有點類似像第一次問的雙狀態選單那樣..
另外在顯示出光標停留所選的道具名稱嗎?
因為輸入draw_item_name(item, rect.x, rect.y, enabled)
一樣會出現所有道具..但是卻是疊在同一個位置顯示...dsu_plus_rewardpost_czw
作者: 亂堂和樹    时间: 2012-10-30 19:38
還是有辦法做到道具分類後~在弄個圖片選單嗎?
作者: 亂堂和樹    时间: 2012-11-1 11:28
請問要怎麼做才能在另外顯示
光標停留在那個道具上
就單獨顯示一個物品名稱

作者: devilg    时间: 2012-11-10 22:56
我是没找到怎么下载……
大体的方针:1.全文搜索”通常アイテム“(我估计你能找到CATEGORY_IDENTIFIER)
2.再搜索CATEGORY_IDENTIFIER。 直到找到那个窗口为止(我估计是CATEGORY_WINDOW这个)
3.仔细分析那个class,看起来像window_selective的子类。这些子类按照原版的模式是refresh和draw_item做的。把draw_item中相关的draw_text换成自己的图,或者icon都行。(如果icon不是超长夜用那种就要把item_rect的宽度改小了吧)
第二个问题没有怎么看懂,不过都在同一位置显示好像是rect没更新新位置的问题奥。
作者: 亂堂和樹    时间: 2012-11-11 14:07
本帖最后由 Luciffer 于 2012-11-12 22:57 编辑

似乎不能改啊...這段是..
RUBY 代码复制
  1. class Window_ItemCategory < Window_Command
  2.   #--------------------------------------------------------------------------
  3.   # ● オブジェクト初期化
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     if $game_temp.in_battle
  7.       cols     = KGC::CategorizeItem::CATEGORY_WINDOW_COLUMNS_BATTLE
  8.       width    = KGC::CategorizeItem::CATEGORY_WINDOW_COL_WIDTH_BATTLE
  9.       space    = KGC::CategorizeItem::CATEGORY_WINDOW_COL_SPACE_BATTLE
  10.       commands = KGC::CategorizeItem::CATEGORY_NAME_BATTLE
  11.       position = KGC::CategorizeItem::CATEGORY_WINDOW_POSITION_BATTLE
  12.     else
  13.       cols     = KGC::CategorizeItem::CATEGORY_WINDOW_COLUMNS
  14.       width    = KGC::CategorizeItem::CATEGORY_WINDOW_COL_WIDTH
  15.       space    = KGC::CategorizeItem::CATEGORY_WINDOW_COL_SPACE
  16.       commands = KGC::CategorizeItem::CATEGORY_NAME
  17.       position = KGC::CategorizeItem::CATEGORY_WINDOW_POSITION
  18.     end
  19.     width = width * cols + 32
  20.     width += (cols - 1) * space
  21.     super(width, commands, cols, 0, space)
  22.     self.x = position[0]
  23.     self.y = position[1]
  24.     self.z = 1000
  25.     self.index = 0
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● ヘルプテキスト更新
  29.   #--------------------------------------------------------------------------
  30.   def update_help
  31.     if $game_temp.in_battle
  32.       text = KGC::CategorizeItem::CATEGORY_DESCRIPTION_BATTLE[self.index]
  33.     else
  34.       text = KGC::CategorizeItem::CATEGORY_DESCRIPTION[self.index]
  35.     end
  36.     @help_window.set_text(text)
  37.     @help_window.opacity = 255
  38.     @help_window.x = 0
  39.   end
  40. end
  41.  
  42. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★


所以找不到地方改啊..

就是有點類似..多一個窗口..
分為左右窗口...
左視窗是原本的背包窗口..舉例有20種道具

右邊窗是我想要的效果...
就是左邊窗的光標停留在哪一個

右邊窗口就只顯示那個道具跟說明(不會出現另外19種道具)���
作者: devilg    时间: 2012-11-13 04:29
@亂堂和樹
这样就好办多了……
这个窗口是按照@Window_COmmand改制的。首先我给你看一个我的范例,把角色命令窗口换成图片的方法:
  1. #==============================================================================
  2. # ■ Window_ActorCommand
  3. #------------------------------------------------------------------------------
  4. #  选择角色命令(如「攻击」或「技能」)的窗口。
  5. #==============================================================================

  6. class Window_ActorCommand < Window_Command
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super(84, [], 1, 5)
  12.     self.active = false
  13.     self.opacity = 0
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 设置
  17.   #     actor : 角色
  18.   #--------------------------------------------------------------------------
  19.   def setup(actor)
  20.     s1 = Vocab::escape#Vocab::attack
  21.     s2 = Vocab::skill
  22.     s3 = Vocab::guard
  23.     s4 = Vocab::item
  24.     if actor.class.skill_name_valid     # 是否指定职业技能文字
  25.       s2 = actor.class.skill_name       # 替换「技能」命令文字
  26.     end
  27.     @commands = [  s3,s2, s4,s1]
  28.     @item_max = @commands.size
  29.     refresh
  30.     self.index = 0
  31.   end
  32.   #385
  33.     def item_rect(index)
  34.     rect = Rect.new(0, 0, 0, 0)
  35.     rect.width = 24#(contents.width + @spacing) / @column_max - @spacing
  36.     rect.height = 24#WLH
  37.     rect.x = SHIT::ACTORCOMMANDPOS[index][0]#index % @column_max * (rect.width + @spacing)
  38.     rect.y = SHIT::ACTORCOMMANDPOS[index][1]#index / @column_max * WLH
  39.     return rect
  40.   end
  41.   
  42.     def draw_item(index, enabled = true)
  43.     rect = item_rect(index)
  44.     self.contents.clear_rect(rect)
  45.     draw_icon(257+index,rect.x,rect.y)
  46.   end
  47.   
  48.    def update_help
  49.     @help_window.set_text(@commands[self.index])
  50.   end
  51.   
  52. end
复制代码
需要更新的语句是item_rect和draw_item。 item_rect用于获取图片x,y位置(rect.x,rect.y)draw_item用于画图(draw_icon(257+index,rect.x,rect.y))
作者: devilg    时间: 2012-11-14 01:37
@亂堂和樹那我仔细解释一下。
第一个要点是子类(class)会继承父类的所有函数(def XXX),像 class Window_ItemCategory < Window_Command表示即便是在这个子类没有定义某个函数(比如draw_item)而父类有,那么用这个子类创造出来的东西(看到的窗口)也可以使用这个draw_item的函数。
draw_item在window_base里,item_rect在window_selectable里,其中base是selectable的父类,selectable是command的父类,因此,itemCategory可以使用这两个函数。
在改之前要先了解window的运作过程(def refresh)。像这个出现分类的窗口没有def refresh,那么就要查看父类的refresh,在window_command里。
  1.   def refresh
  2. #    self.contents.clear#用于清除当前窗口内的所有内容,重新画图
  3.     create_contents#新建画布,一般跟窗口大小一样大,如果是可选项并可以向下滚动的窗口则高度比窗口大小要高。
  4.     for i in 0...@item_max#对每个命令:
  5.       draw_item(i)#在画布上的位置画出这个命令。
  6.     end
  7.   end
复制代码
你也可以继续查看draw_item的运作过程,不过跟我的栗子中
  1.     def draw_item(index, enabled = true)
  2.     rect = item_rect(index)
  3.     self.contents.clear_rect(rect)
  4.     draw_icon(257+index,rect.x,rect.y)
  5.   end
复制代码
差不太多,都是先获取当前命令的x,y坐标,然后画图。window_base中应该是draw_text(用来表示文字)而不是我的draw_icon.
了解了windows的运作过程就可以依照修改:
在我发的范例里,可以看到比一般的actorCommand多了两个函数,一个是item_rect,另一个是draw_item。就像我说的,item_rect用来定义当前选项在窗口上的位置,定义了x,y,宽和高(我是看别人的超帅六芒星自己画了个问号……大小拙计和美术拙计。可以看到这个窗口里宽度大约是100,高度大约是24,第一个位置在x=0,y=0,第二个位置在x =100? y = 0,第三个x=0,y=25?, 第四个x= 100?,y=25?以此类推)draw_item则负责表示出文字,(通常アイテム", "戦闘用アイテム", "武器",  "盾这些东西)这时候把draw_text改掉就可以达成改成图片效果,比如我改成了draw_icon用图标代替,你也可以用icon,或者用大图sprite,别的什么的都可以。
最后这些函数一定要放在子类,避免在父类修改,而对其他子类有影响。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1