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

Project1

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

[已经解决] 关于状态图标化

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3846
在线时间
1966 小时
注册时间
2013-1-3
帖子
9536
跳转到指定楼层
1
发表于 2013-4-22 05:57:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
用的是以下脚本
问题是当它的y坐标在上面能把图标都显示出来
但是再把y坐标向下改,图标只显示出一半,已经超出了它能显示的范围
这个怎么改?
问题浏览图:

脚本:
RUBY 代码复制
  1. #==============================================================================
  2. # Date 12-31-2005
  3. # 重定义类:Window_Base, Window_Help
  4. #==============================================================================
  5. # 脚本功能:
  6. # 实现战斗中和菜单中用图标显示状态,代替原来的文字显示。
  7. # 默认最多同时显示5个状态
  8. #------------------------------------------------------------------------------
  9. # 设置方法:
  10. # 一个状态对应的图标文件名为“状态的动画ID.png”
  11. # 例如某状态的动画ID为50,那么它的图标就是“Icons\50.png”
  12. # 如果找不到对应的文件,会报错
  13. #==============================================================================
  14.  
  15. # 注意,在ICON_STATE_IDS中写上需要带图标的状态ID
  16. # ICON_STATE_IDS是一个数组,数组的方法请参考帮助文件
  17. # 例如:
  18. # 只要1,5,8号状态带图标,就这样:ICON_STATE_IDS = [1,5,8]
  19. # 要20到50号状态带图标:ICON_STATE_IDS = 20..50
  20.  
  21. ICON_STATE_IDS = [2,3]
  22.  
  23. #==============================================================================
  24. # ■ Window_Base
  25. #------------------------------------------------------------------------------
  26. #  游戏中全部窗口的超级类。
  27. #==============================================================================
  28.  
  29. class Window_Base < Window
  30. #--------------------------------------------------------------------------
  31. # ● 描绘状态
  32. #     actor : 角色
  33. #     x     : 描画目标 X 坐标
  34. #     y     : 描画目标 Y 坐标
  35. #     width : 描画目标的宽
  36. #--------------------------------------------------------------------------
  37. def draw_actor_state(actor, x, y, width = 120)
  38.   state_size = 0
  39.   for state in actor.states
  40.     # 图标数量超出宽度就中断循环
  41.     if state_size >= width / 1
  42.       break
  43.     end
  44.     # 此状态不带图标就跳过
  45.     if !ICON_STATE_IDS.include?(state)
  46.       next
  47.     end
  48.     bitmap = RPG::Cache.icon($data_states[state].name + "_sta.png")
  49.     if actor.states_turn[state] >= $data_states[state].hold_turn/2
  50.       opacity = 255
  51.     else
  52.       opacity = 100
  53.     end
  54.     # 这里的图标大小默认是24x24,要改就改下面那个Rect.new(0, 0, 24, 24)
  55.     self.contents.blt(296 + 13 * state_size ,36 + 89 ,bitmap, Rect.new(0, 0, 12, 12), opacity)
  56.     state_size += 1
  57.   end
  58. end
  59. end
  60.  
  61.  
  62. #==============================================================================
  63. # ■ Window_Help
  64. #------------------------------------------------------------------------------
  65. #  特技及物品的说明、角色的状态显示的窗口。
  66. #==============================================================================
  67.  
  68. class Window_Help < Window_Base
  69. #--------------------------------------------------------------------------
  70. # ● 设置敌人
  71. #     enemy : 要显示名字和状态的敌人
  72. #--------------------------------------------------------------------------
  73. def set_enemy(enemy)
  74.   # 描绘状态图标
  75.   state_size = 0
  76.   for state in enemy.states
  77.     # 图标数量超出宽度就中断循环
  78.     if state_size >= width / 16
  79.       break
  80.     end
  81.     # 此状态不带图标就跳过
  82.     if !ICON_STATE_IDS.include?(state)
  83.       next
  84.     end
  85.     bitmap = RPG::Cache.icon($data_states[state].name + "_sta.png")
  86.     if enemy.states_turn[state] >= $data_states[state].hold_turn/2
  87.       opacity = 255
  88.     else
  89.       opacity = 100
  90.     end
  91.     self.contents.blt(70 + 16 * state_size, 0, bitmap, Rect.new(0, 0, 24, 24), opacity)
  92.     state_size += 1
  93.   end
  94.   # 描绘敌人名字
  95.   set_text(enemy.name, 1)
  96. end
  97. end
  98.  
  99. class Game_Battler
  100. attr_reader :states_turn       # 声明状态剩余回合
  101. end

召唤高手...@弗雷德 @美丽晨露
还是您两位...

点评

你改了哪里?  发表于 2013-4-22 08:57
《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴

Lv1.梦旅人

梦石
0
星屑
48
在线时间
560 小时
注册时间
2012-12-29
帖子
1075
2
发表于 2013-4-22 18:19:48 | 只看该作者
把整个窗体发上来吧!
@弗雷德
第55行,看到没。。。
MOBA以及回合制的一个创新,点这里查看游戏新思路
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

3
发表于 2013-4-22 21:24:54 | 只看该作者
不好意思,我还真的不懂
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33616
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

4
发表于 2013-4-22 21:43:39 | 只看该作者
本帖最后由 芯☆淡茹水 于 2013-4-22 21:45 编辑

你改坐标可能改错地方了,
第 55 行:self.contents.blt(296 + 13 * state_size ,36 + 89 ,bitmap, Rect.new(0, 0, 12, 12), opacity)
那个 Rect.new(0, 0, 12, 12) 不是改坐标的,把它改回来:Rect.new(0, 0, 24, 24)
坐标是这两个: x =  296 + 13 * state_size
                      y =  36 + 89

(怎么没用传送过来的x,y?)
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33616
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

5
发表于 2013-4-22 22:01:28 | 只看该作者
觉得 Window_Base 里面的定义应该是这样:
  1. class Window_Base < Window
  2.   def draw_actor_state(actor, x, y, width = 120)
  3.   state_size = 0  
  4.   for state in actor.states   
  5.     # 图标数量超出宽度就中断循环   
  6.     if state_size >= width / 24 - 1 # 宽 120 ,用 24X24 图标的话,可同时显示 5 个。   
  7.       break   
  8.     end   
  9.     # 此状态不带图标就跳过   
  10.     if !ICON_STATE_IDS.include?(state)      
  11.       next   
  12.     end   
  13.     bitmap = RPG::Cache.icon($data_states[state].name + "_sta.png")   
  14.     if actor.states_turn[state] >= $data_states[state].hold_turn/2      
  15.       opacity = 255   
  16.     else      
  17.       opacity = 100   
  18.     end   
  19.      # 这里的图标大小默认是24x24,要改就改下面那个Rect.new(0, 0, 24, 24)   
  20.      self.contents.blt(x + 24 * state_size , y, bitmap, Rect.new(0, 0, 24, 24), opacity)   
  21.      state_size += 1  
  22.     end
  23.   end
  24. end
复制代码
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3846
在线时间
1966 小时
注册时间
2013-1-3
帖子
9536
6
 楼主| 发表于 2013-4-23 03:38:15 | 只看该作者
芯☆淡茹水 发表于 2013-4-22 22:01
觉得 Window_Base 里面的定义应该是这样:

那请问怎样改图标的坐标?
《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

万兽

梦石
0
星屑
597
在线时间
2271 小时
注册时间
2006-11-4
帖子
4868

贵宾

7
发表于 2013-4-23 10:14:36 | 只看该作者
不知道为啥你的脚本俺复制不了,
你全局搜索一下你使用过draw_actor_state这个方法的地方,然后把draw_actor_state这个方法里的坐标改一下。

这两天心情很差,所以昨天没心情看,不好意思。

点评

还是显示一半的图标  发表于 2013-4-23 12:53
心情不好?怎么了?安慰熊叔...  发表于 2013-4-23 12:22
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

万兽

梦石
0
星屑
597
在线时间
2271 小时
注册时间
2006-11-4
帖子
4868

贵宾

8
发表于 2013-4-23 16:19:30 | 只看该作者


晓狼是要这个效果么?
问题出在48行附近
  1. # 这里的图标大小默认是24x24,要改就改下面那个Rect.new(0, 0, 24, 24)
  2. self.contents.blt(x + 12 * state_size , y , bitmap, Rect.new(0, 0, 12, 12), opacity)
复制代码
这里X的间隔以及描绘的区域都是12,所以只能画出一半,你把12都改成24就成了。横轴X的间隔你自己看着弄吧。
  1. # 这里的图标大小默认是24x24,要改就改下面那个Rect.new(0, 0, 24, 24)
  2. self.contents.blt(x + 24 * state_size , y , bitmap, Rect.new(0, 0, 24, 24), opacity)
复制代码
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

9
发表于 2013-4-23 16:56:14 | 只看该作者
55行这里有问题
    self.contents.blt(296 + 13 * state_size ,36 + 89 ,bitmap, Rect.new(0, 0, 12, 12), opacity)
应该是坐标以角色的x和y来做一个整体的移动
      self.contents.blt(x + 24 * state_size ,y ,bitmap, Rect.new(0, 0, 24, 24), opacity)
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33616
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

10
发表于 2013-4-23 18:50:36 | 只看该作者
本帖最后由 芯☆淡茹水 于 2013-4-23 18:51 编辑
亿万星辰 发表于 2013-4-23 16:56
55行这里有问题
    self.contents.blt(296 + 13 * state_size ,36 + 89 ,bitmap, Rect.new(0, 0, 12, 12), ...


话说都看见啦,

还有个地方有问题:


if state_size >= width / 1     
   break   
end

照上面的话可同时显示 120 个图标~~~
所以觉得应该是这样:

if state_size >= width / 24 - 1
    break   
end

建议LZ把完整脚本发上来,方便查看和更改

点评

其实关于这个参数,还不如直接改成可显示的图标数量更直观……  发表于 2013-4-23 19:38

评分

参与人数 1星屑 +66 收起 理由
hys111111 + 66 感谢回答

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-25 14:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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