查看: 1683|回复: 4

[已经过期] 45度战斗与状态叠加,图标化的问题

[复制链接]
梦石
0
星屑
50
在线时间
47 小时
注册时间
2013-7-14
回帖
30
发表于 2013-7-26 08:40:51 | 显示全部楼层 |阅读模式

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

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

×
我用了45度战斗后,状态的x,y坐标应该也会变化,该怎么修改呢?
这是45°的
[pre lang="ruby" line="1"]# ————————————————————————————————————
# 本脚本来自http://rpg.blue/web/,转载请保留此信息
# ————————————————————————————————————
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#  处理角色的类。本类在 Game_Actors 类 ($game_actors)
# 的内部使用、Game_Party 类请参考 ($game_party) 。
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 取得战斗画面的 X 坐标
#--------------------------------------------------------------------------
def screen_x
case self.index
when 0
return 370
when 1
return 450
when 2
return 530
when 3
return 580
else
return 600
end
end
#--------------------------------------------------------------------------
# ● 取得战斗画面的 Y 坐标
#--------------------------------------------------------------------------
def screen_y
case self.index
when 0
return 475
when 1
return 395
when 2
return 360
when 3
return 325
else
return 1000
end
end
#--------------------------------------------------------------------------
# ● 取得战斗画面的 Z 坐标
#--------------------------------------------------------------------------
def screen_z
case self.index
when 0
return 10
when 1
return 9
when 2
return 8
when 3
return 7
else
return 0
end
end
end

#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
#  游戏中全部窗口的超级类。
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# ● 描绘 HP
# actor : 角色
# x : 描画目标 X 坐标
# y : 描画目标 Y 坐标
# width : 描画目标的宽
#--------------------------------------------------------------------------
def draw_actor_hp1(actor, x, y, width = 72)
# 描绘字符串 "HP"
self.contents.font.color = system_color
self.contents.draw_text(x, y, 24, 24, $data_system.words.hp)
# 计算描绘 MaxHP 所需的空间
if width - 24 >= 32
hp_x = x + 32# + width - 24
end
# 描绘 HP
self.contents.font.color = actor.hp == 0 ? knockout_color :
actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
self.contents.draw_text(hp_x, y, 32, 24, actor.hp.to_s, 2)
end
end


#==============================================================================
# ■ Window_BattleStatus
#------------------------------------------------------------------------------
#  显示战斗画面同伴状态的窗口。
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
#$data_system_level_up_me = "Audio/ME/升级音乐"
def initialize
super(0, 0, 640, 480)
self.contents = Bitmap.new(width - 10, height - 32)
self.opacity = 0
@level_up_flags = [false, false, false, false]
refresh
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
def dispose
super
end
#--------------------------------------------------------------------------
# ● 设置升级标志
# actor_index : 角色索引
#--------------------------------------------------------------------------
def level_up(actor_index)
@level_up_flags[actor_index] = true
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
actor = $game_party.actors
case i
when 0
x = 310
y = 390
when 1
x = 390
y = 340
when 2
x = 480
y = 300
when 3
x = 550
y = 270
end
if @level_up_flags
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 80, 24, "LEVEL UP!")
Audio.me_stop
# Audio.me_play($data_system_level_up_me)
else
draw_actor_hp1(actor, x-15, y-15, 80)
end
end
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
super
# 主界面的不透明度下降
if $game_temp.battle_main_phase
self.contents_opacity -= 50 if self.contents_opacity > 1
else
self.contents_opacity += 50 if self.contents_opacity < 255
end
end
end


#==============================================================================
# ■ Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# ● 初始化
#--------------------------------------------------------------------------
alias xrxs_bp2_refresh refresh
def refresh
xrxs_bp2_refresh
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
actor = $game_party.actors
case i
when 0
x = 310
y = 390
when 1
x = 390
y = 340
when 2
x = 480
y = 300
when 3
x = 550
y = 270
end
draw_actor_hp_meter(actor, x, y, 50)
end
end
end
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# ● HP描画
#--------------------------------------------------------------------------
def draw_actor_hp_meter(actor, x, y, width = 156, type = 0)
if type == 1 and actor.hp == 0
return
end
self.contents.font.color = system_color
self.contents.fill_rect(x-1, y+27, width+2,6, Color.new(150, 0, 0, 150))
w = width * actor.hp / actor.maxhp
self.contents.fill_rect(x, y+28, w,1, Color.new(255, 96, 96, 255))
self.contents.fill_rect(x, y+29, w,1, Color.new(255, 0, 0, 255))
self.contents.fill_rect(x, y+30, w,1, Color.new(128, 0, 0, 255))
self.contents.fill_rect(x, y+31, w,1, Color.new(0, 0, 0, 255))
end
end[/pre]
这是图标的
[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 = [40..79]

#==============================================================================
# ■ 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 / 24 - 1
      break
    end
    # 此状态不带图标就跳过
    if !ICON_STATE_IDS.include?(state)
      next
    end
    bitmap = RPG::Cache.icon($data_states[state].name + ".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(x + 24 * state_size ,y ,bitmap, Rect.new(0, 0, 24, 24), 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]

梦石
0
星屑
50
在线时间
47 小时
注册时间
2013-7-14
回帖
30
 楼主| 发表于 2013-7-26 08:43:02 | 显示全部楼层
再给个范例

Project1.zip

203.92 KB, 下载次数: 29

就这个

回复

使用道具 举报

梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
回帖
711
发表于 2013-7-26 11:55:34 | 显示全部楼层
表示没明白楼主 表达的意思、、、、
回复

使用道具 举报

梦石
0
星屑
50
在线时间
47 小时
注册时间
2013-7-14
回帖
30
 楼主| 发表于 2013-7-26 12:15:35 | 显示全部楼层
用了45度战斗后,状态图标不知道上哪里去了,应该是坐标的问题。
回复

使用道具 举报

梦石
0
星屑
54
在线时间
1208 小时
注册时间
2011-1-23
回帖
881

贵宾

发表于 2013-8-8 09:47:19 | 显示全部楼层
这个45度战斗是把原本的战斗状态栏去掉的,状态也就不能显示了
  1. # ————————————————————————————————————
  2. # 本脚本来自[url]http://rpg.blue/web/[/url],转载请保留此信息
  3. # ————————————————————————————————————
  4. #==============================================================================
  5. # ■ Game_Actor
  6. #------------------------------------------------------------------------------
  7. #  处理角色的类。本类在 Game_Actors 类 ($game_actors)
  8. # 的内部使用、Game_Party 类请参考 ($game_party) 。
  9. #==============================================================================
  10. class Game_Actor < Game_Battler
  11. #--------------------------------------------------------------------------
  12. # ● 取得战斗画面的 X 坐标
  13. #--------------------------------------------------------------------------
  14. def screen_x
  15. case self.index
  16. when 0
  17. return 370
  18. when 1
  19. return 450
  20. when 2
  21. return 530
  22. when 3
  23. return 580
  24. else
  25. return 600
  26. end
  27. end
  28. #--------------------------------------------------------------------------
  29. # ● 取得战斗画面的 Y 坐标
  30. #--------------------------------------------------------------------------
  31. def screen_y
  32. case self.index
  33. when 0
  34. return 475
  35. when 1
  36. return 395
  37. when 2
  38. return 360
  39. when 3
  40. return 325
  41. else
  42. return 1000
  43. end
  44. end
  45. #--------------------------------------------------------------------------
  46. # ● 取得战斗画面的 Z 坐标
  47. #--------------------------------------------------------------------------
  48. def screen_z
  49. case self.index
  50. when 0
  51. return 10
  52. when 1
  53. return 9
  54. when 2
  55. return 8
  56. when 3
  57. return 7
  58. else
  59. return 0
  60. end
  61. end
  62. end
复制代码
45度脚本仅保留这段的话战斗画面下面会出现默认的状态栏,就可以显示状态,要不要用楼主先看着办,先不给你结贴

评分

参与人数 1星屑 +70 收起 理由
弗雷德 + 70 我很赞同

查看全部评分

→→→牛排的小黑屋←←←
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部