Project1

标题: 如何在战斗中显示多个状态 [打印本页]

作者: akerhzm    时间: 2009-12-20 12:44
标题: 如何在战斗中显示多个状态
我给一敌人分别上了【混乱】,【睡眠】。。。。。。怎么都显示出来
作者: 上帝的眼睛    时间: 2009-12-20 13:11
  1. #==============================================================================

  2. # ■ 状态图标化

  3. #------------------------------------------------------------------------------

  4. #  主要是改变支持了我自己的战斗系统

  5. #   By whbm

  6. #==============================================================================

  7. #==============================================================================

  8. # Date 12-31-2005

  9. # 重定义类:Window_Base, Window_Help

  10. #==============================================================================

  11. # 脚本功能:

  12. # 实现战斗中和菜单中用图标显示状态,代替原来的文字显示。

  13. # 默认最多同时显示5个状态

  14. #------------------------------------------------------------------------------

  15. # 设置方法:

  16. # 一个状态对应的图标文件名为“状态的动画ID.png”

  17. # 例如某状态的动画ID为50,那么它的图标就是“Icons\50.png”

  18. # 如果找不到对应的文件,会报错 ◎_◎

  19. #==============================================================================



  20. # 注意,在ICON_STATE_IDS中写上需要带图标的状态ID

  21. # ICON_STATE_IDS是一个数组,数组的方法请参考帮助文件

  22. # 例如:

  23. # 只要1,5,8号状态带图标,就这样:ICON_STATE_IDS = [1,5,8]

  24. # 要20到50号状态带图标:ICON_STATE_IDS = 20..50



  25. ICON_STATE_IDS = 1..100



  26. #==============================================================================

  27. # ■ Window_Base

  28. #------------------------------------------------------------------------------

  29. #  游戏中全部窗口的超级类。

  30. #==============================================================================



  31. class Window_Base < Window

  32. #--------------------------------------------------------------------------

  33. # ● 描绘状态

  34. #     actor : 角色

  35. #     x     : 描画目标 X 坐标

  36. #     y     : 描画目标 Y 坐标

  37. #     width : 描画目标的宽

  38. #--------------------------------------------------------------------------

  39. def draw_actor_state(actor, x, y, width = 120)

  40.   state_size = 0

  41.   for state in actor.states

  42.     # 图标数量超出宽度就中断循环

  43.     if state_size >= width / 24

  44.       break

  45.     end

  46.     # 此状态不带图标就跳过

  47.     if !ICON_STATE_IDS.include?(state)

  48.       next

  49.     end

  50.     bitmap = RPG::Cache.icon($data_states[state].name + "_sta.png")

  51.   

  52.     if actor.states_turn[state] >= $data_states[state].hold_turn/2

  53.       opacity = 255

  54.     else

  55.       opacity = 100

  56.     end

  57.     # 这里的图标大小默认是24x24,要改就改下面那个Rect.new(0, 0, 24, 24)

  58.     #..........................................................................

  59.     if $game_temp.in_battle

  60.       self.contents.blt(x - 8, y + 16 - 16 * state_size, bitmap, Rect.new(0, 0, 16, 16), opacity)

  61.     else

  62.       self.contents.blt(x + 16 * state_size, y + 8, bitmap, Rect.new(0, 0, 16, 16), opacity)

  63.     end

  64.     state_size += 1

  65.     #..........................................................................

  66.   end

  67. end

  68. end

  69. #==============================================================================

  70. # ■ Window_Help

  71. #------------------------------------------------------------------------------

  72. #  特技及物品的说明、角色的状态显示的窗口。

  73. #==============================================================================



  74. class Window_Help < Window_Base

  75. #--------------------------------------------------------------------------

  76. # ● 设置敌人

  77. #     enemy : 要显示名字和状态的敌人

  78. #--------------------------------------------------------------------------

  79. def set_enemy(enemy)

  80.   # 描绘状态图标

  81.   state_size = 0

  82.   for state in enemy.states

  83.     # 图标数量超出宽度就中断循环

  84.     if state_size >= width / 16

  85.       break

  86.     end

  87.     # 此状态不带图标就跳过

  88.     if !ICON_STATE_IDS.include?(state)

  89.       next

  90.     end

  91.     bitmap = RPG::Cache.icon($data_states[state].name + "_sta.png")

  92.     if enemy.states_turn[state] >= $data_states[state].hold_turn/2

  93.       opacity = 255

  94.     else

  95.       opacity = 100

  96.     end

  97.     self.contents.blt(70 + 16 * state_size, 0, bitmap, Rect.new(0, 0, 24, 24), opacity)

  98.     state_size += 1

  99.   end

  100.   # 描绘敌人名字

  101.   set_text(enemy.name, 1)

  102. end

  103. end



  104. class Game_Battler

  105. attr_reader :states_turn       # 声明状态剩余回合

  106. end
复制代码

作者: akerhzm    时间: 2009-12-21 15:29
谢谢




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