查看: 2513|回复: 9

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

[复制链接]
梦石
0
星屑
3905
在线时间
1972 小时
注册时间
2013-1-3
回帖
9146
发表于 2013-4-22 05:57:13 | 显示全部楼层 |阅读模式

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

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

×
用的是以下脚本
问题是当它的y坐标在上面能把图标都显示出来
但是再把y坐标向下改,图标只显示出一半,已经超出了它能显示的范围
这个怎么改?
问题浏览图:
未标题-1.png
脚本:
[pre lang="ruby" line="1"]#==============================================================================
# Date 12-31-2005
# 重定义类:Window_Base, Window_Help
#==============================================================================
# 脚本功能:
# 实现战斗中和菜单中用图标显示状态,代替原来的文字显示。
# 默认最多同时显示5个状态
#------------------------------------------------------------------------------
# 设置方法:
# 一个状态对应的图标文件名为“状态的动画ID.png”
# 例如某状态的动画ID为50,那么它的图标就是“Icons\50.png”
# 如果找不到对应的文件,会报错
#==============================================================================

# 注意,在ICON_STATE_IDS中写上需要带图标的状态ID
# ICON_STATE_IDS是一个数组,数组的方法请参考帮助文件
# 例如:
# 只要1,5,8号状态带图标,就这样:ICON_STATE_IDS = [1,5,8]
# 要20到50号状态带图标:ICON_STATE_IDS = 20..50

ICON_STATE_IDS = [2,3]

#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
#  游戏中全部窗口的超级类。
#==============================================================================

class Window_Base < Window
#--------------------------------------------------------------------------
# ● 描绘状态
#     actor : 角色
#     x     : 描画目标 X 坐标
#     y     : 描画目标 Y 坐标
#     width : 描画目标的宽
#--------------------------------------------------------------------------
def draw_actor_state(actor, x, y, width = 120)
  state_size = 0
  for state in actor.states
    # 图标数量超出宽度就中断循环
    if state_size >= width / 1
      break
    end
    # 此状态不带图标就跳过
    if !ICON_STATE_IDS.include?(state)
      next
    end
    bitmap = RPG::Cache.icon($data_states[state].name + "_sta.png")
    if actor.states_turn[state] >= $data_states[state].hold_turn/2
      opacity = 255
    else
      opacity = 100
    end
    # 这里的图标大小默认是24x24,要改就改下面那个Rect.new(0, 0, 24, 24)
    self.contents.blt(296 + 13 * state_size ,36 + 89 ,bitmap, Rect.new(0, 0, 12, 12), opacity)
    state_size += 1
  end
end
end


#==============================================================================
# ■ Window_Help
#------------------------------------------------------------------------------
#  特技及物品的说明、角色的状态显示的窗口。
#==============================================================================

class Window_Help < Window_Base
#--------------------------------------------------------------------------
# ● 设置敌人
#     enemy : 要显示名字和状态的敌人
#--------------------------------------------------------------------------
def set_enemy(enemy)
  # 描绘状态图标
  state_size = 0
  for state in enemy.states
    # 图标数量超出宽度就中断循环
    if state_size >= width / 16
      break
    end
    # 此状态不带图标就跳过
    if !ICON_STATE_IDS.include?(state)
      next
    end
    bitmap = RPG::Cache.icon($data_states[state].name + "_sta.png")
    if enemy.states_turn[state] >= $data_states[state].hold_turn/2
      opacity = 255
    else
      opacity = 100
    end
    self.contents.blt(70 + 16 * state_size, 0, bitmap, Rect.new(0, 0, 24, 24), opacity)
    state_size += 1
  end
  # 描绘敌人名字
  set_text(enemy.name, 1)
end
end

class Game_Battler
attr_reader :states_turn       # 声明状态剩余回合
end[/pre]
召唤高手...@弗雷德 @美丽晨露
还是您两位...

点评

你改了哪里?  发表于 2013-4-22 08:57
《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴
梦石
0
星屑
48
在线时间
560 小时
注册时间
2012-12-29
回帖
1003
发表于 2013-4-22 18:19:48 | 显示全部楼层
把整个窗体发上来吧!
@弗雷德
第55行,看到没。。。
MOBA以及回合制的一个创新,点这里查看游戏新思路
回复

使用道具 举报

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

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

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

回复

使用道具 举报

梦石
0
星屑
34467
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 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 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
34467
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 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 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
3905
在线时间
1972 小时
注册时间
2013-1-3
回帖
9146
 楼主| 发表于 2013-4-23 03:38:15 | 显示全部楼层
芯☆淡茹水 发表于 2013-4-22 22:01
觉得 Window_Base 里面的定义应该是这样:

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

使用道具 举报

万兽

梦石
0
星屑
602
在线时间
2271 小时
注册时间
2006-11-4
回帖
4701

贵宾

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

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

点评

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

使用道具 举报

万兽

梦石
0
星屑
602
在线时间
2271 小时
注册时间
2006-11-4
回帖
4701

贵宾

发表于 2013-4-23 16:19:30 | 显示全部楼层
082.png

晓狼是要这个效果么?
问题出在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)
复制代码
回复

使用道具 举报

梦石
0
星屑
275
在线时间
1373 小时
注册时间
2005-10-16
回帖
5038

贵宾

发表于 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)
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

梦石
0
星屑
34467
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 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 各类型脚本/插件定制
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部