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

Project1

 找回密码
 注册会员
搜索
查看: 1559|回复: 2

[推荐问答] 又来发帖,寻 加强command_window 图片坐标版效果

[复制链接]

Lv2.观梦者

梦石
0
星屑
284
在线时间
371 小时
注册时间
2010-8-23
帖子
418
发表于 2012-10-22 11:54:01 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 勇敢的馒头 于 2012-10-22 21:47 编辑

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

现在我想改变图片,比如 Window_MenuStatus  窗口,使选框经过的 角色的行走图Y坐标-1,该如何修改?
是修改Window_Selectable吗?但是Window_Selectable只是一个图形盖在上面的啊~~

评分

参与人数 1梦石 +2 收起 理由
hys111111 + 2 好吧,既然你帮人家整合系统,但是我翻不到.

查看全部评分

Lv1.梦旅人

梦石
0
星屑
54
在线时间
323 小时
注册时间
2010-8-21
帖子
666
发表于 2012-10-22 19:59:11 | 显示全部楼层
看来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


这样就好了

评分

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

查看全部评分

>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
284
在线时间
371 小时
注册时间
2010-8-23
帖子
418
 楼主| 发表于 2012-10-22 21:46:55 | 显示全部楼层
沙漠点灰 发表于 2012-10-22 19:59
看来lz多多少少懂点脚本,就写写过程:

Window_MenuStatus中可以发现有行

原来如此,看明白了,感谢回答还给出如此详细的说明~
真正做游戏的游戏人是不会整天发帖灌水的!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-28 17:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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