Project1

标题: 又来发帖,寻 加强command_window 图片坐标版效果 [打印本页]

作者: 勇敢的馒头    时间: 2012-10-22 11:54
标题: 又来发帖,寻 加强command_window 图片坐标版效果
本帖最后由 勇敢的馒头 于 2012-10-22 21:47 编辑

有找到站内的 加强command_window
http://www.66rpg.com/articles/3082
主要是添加个分歧,选择的效果和未选择时的效果

现在我想改变图片,比如 Window_MenuStatus  窗口,使选框经过的 角色的行走图Y坐标-1,该如何修改?
是修改Window_Selectable吗?但是Window_Selectable只是一个图形盖在上面的啊~~
作者: 沙漠点灰    时间: 2012-10-22 19:59
看来lz多多少少懂点脚本,就写写过程:

Window_MenuStatus中可以发现有行
draw_actor_graphic(actor, x - 40, y + 80)
draw_actor_graphic的定义lz可以看看它父类的定义
2个参数,x,y
你需要y坐标在选中,即
@index = 角色在队伍编号  时
y坐标 = y + 79
否则
y坐标 = y + 80


可以了解,行走图占了 1*1.5的地图格(默认),为兼容大图,设为64*96

为提高效率,这点对于游戏程序尤为重要,所以采用局部刷新.
所以建立新的实例变量@index_old,用来记录原来的位置..实例变量初始就是nil值,这就可以偷下懒..

在原来
  1.     if @index < 0
  2.       self.cursor_rect.empty
  3.     else
  4.       self.cursor_rect.set(0, @index * 116, self.width - 32, 96)
  5.     end
复制代码
下面加个
RUBY 代码复制
  1. refresh_choice if @index != @index_old


新建方法 refresh_choice
这里主要是坐标计算,还有就是清空,
RMXP默认没有清空像素,只有用填充像素,即fill_rect,在color参数写Color.new(0,0,0,0)就行
定义如下:
RUBY 代码复制
  1. def refresh_choice
  2.     color = Color.new(0,0,0,0)
  3.     if @index_old
  4.       self.contents.fill_rect(0, @index_old*116, 64, 96, color)
  5.       draw_actor_graphic($game_party.actors[@index_old], 24, @index_old*116+80)
  6.     end
  7.     self.contents.fill_rect(0, @index *116, 64, 96, color)
  8.     draw_actor_graphic($game_party.actors[@index],     24, @index*116+75)
  9.     @index_old = @index
  10.   end

1像素太小了,我写了5像素
@index*116+75



Window_MenuStatus现在变成了:
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Window_MenuStatus
  3. #------------------------------------------------------------------------------
  4. #  显示菜单画面和同伴状态的窗口。
  5. #==============================================================================
  6.  
  7. class Window_MenuStatus < Window_Selectable
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化目标
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     super(0, 0, 480, 480)
  13.     self.contents = Bitmap.new(width - 32, height - 32)
  14.     refresh
  15.     self.active = false
  16.     self.index = -1
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 刷新
  20.   #--------------------------------------------------------------------------
  21.   def refresh
  22.     self.contents.clear
  23.     @item_max = $game_party.actors.size
  24.     for i in 0...$game_party.actors.size
  25.       x = 64
  26.       y = i * 116
  27.       actor = $game_party.actors[i]
  28.       draw_actor_graphic(actor, x - 40, y + 80)
  29.       draw_actor_name(actor, x, y)
  30.       draw_actor_class(actor, x + 144, y)
  31.       draw_actor_level(actor, x, y + 32)
  32.       draw_actor_state(actor, x + 90, y + 32)
  33.       draw_actor_exp(actor, x, y + 64)
  34.       draw_actor_hp(actor, x + 236, y + 32)
  35.       draw_actor_sp(actor, x + 236, y + 64)
  36.     end
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 刷新光标矩形
  40.   #--------------------------------------------------------------------------
  41.   def update_cursor_rect
  42.     if @index < 0
  43.       self.cursor_rect.empty
  44.     else
  45.       self.cursor_rect.set(0, @index * 116, self.width - 32, 96)
  46.     end
  47.     refresh_choice if @index != @index_old and @index >= 0
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 局部刷新
  51.   #--------------------------------------------------------------------------
  52.   def refresh_choice
  53.     color = Color.new(0,0,0,0)
  54.     if @index_old
  55.       self.contents.fill_rect(0, @index_old*116, 64, 96, color)
  56.       draw_actor_graphic($game_party.actors[@index_old], 24, @index_old*116+80)
  57.     end
  58.     self.contents.fill_rect(0, @index *116, 64, 96, color)
  59.     draw_actor_graphic($game_party.actors[@index],     24, @index*116+75)
  60.     @index_old = @index
  61.   end
  62. end


这样就好了
作者: 勇敢的馒头    时间: 2012-10-22 21:46
沙漠点灰 发表于 2012-10-22 19:59
看来lz多多少少懂点脚本,就写写过程:

Window_MenuStatus中可以发现有行

原来如此,看明白了,感谢回答还给出如此详细的说明~




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