Project1

标题: 关于横版战斗显示脸图 [打印本页]

作者: 玄月    时间: 2008-9-5 08:10
标题: 关于横版战斗显示脸图
[LINE]1,#dddddd[/LINE]
┌──────┬─────────────────────────────┐
│作者 : 玄月│关联教程 : 幻森版横版战斗显示脸图&图片菜单教程           │
├──────┼─────────────────────────────┤
│范例工程:有│声明 : 若要用到本效果请注明出处……以上……              │
└──────┴─────────────────────────────┘
范例下载连接 :http://rpg.blue/upload_program/f ... 6r版_101083035.rar
[LINE]1,#dddddd[/LINE]
以下为教程……图片仅供参考,实际情况请根据范例内实物。
[LINE]1,#dddddd[/LINE]
首先在Window_Base最后加上
  1.   #--------------------------------------------------------------------------
  2.   # ● 战斗时图形的描绘
  3.   #     actor : 角色
  4.   #     x     : 描画目标 X 坐标
  5.   #     y     : 描画目标 Y 坐标
  6.   #--------------------------------------------------------------------------
  7.   def draw_battle_actor(actor, x, y)
  8.     testname = actor.name+"_f"
  9.     bitmap=Bitmap.new("Graphics/Pictures/战斗脸图/#{testname}.png")   
  10.     cw = bitmap.width
  11.     ch = bitmap.height
  12.     src_rect = Rect.new(0, -20, cw, ch)
  13.     self.contents.blt(x - cw/20 , y-ch - 52, bitmap, src_rect)
  14.   end
  15. end
复制代码

这段脚本,然后把Window_BattleStatus的最后那个刷新画面那里改成这样
  1. #--------------------------------------------------------------------------
  2.   # ● 刷新画面
  3.   #--------------------------------------------------------------------------
  4.   def update
  5.     super
  6.     # 主界面的不透明度下降
  7.     if $game_temp.battle_main_phase
  8.       self.contents_opacity = 255
  9.     end
  10.   end
  11. end
复制代码

把Window_BattleStatus的supper值改成这样
super(-15, 180, 700, 320)
然后把下面改成这样
  1. #--------------------------------------------------------------------------
  2.   # ● 刷新
  3.   #--------------------------------------------------------------------------
  4.   def refresh
  5.     self.contents.clear
  6.     @item_max = $game_party.actors.size
  7.     for i in 0...$game_party.actors.size
  8.       actor = $game_party.actors[i]
  9.       actor_x = i * 163 +4
  10.       self.contents.font.size = 16
  11.       draw_actor_name(actor, actor_x, 245)
  12.       draw_battle_actor(actor,actor_x,292)
  13.       self.contents.font.size = 20
  14.       draw_actor_hp(actor, actor_x, 185, 120)
  15.       draw_actor_sp(actor, actor_x, 210, 120)
  16.       if @level_up_flags[i]
  17.         self.contents.font.color = normal_color
  18.         self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  19.       else
  20.         self.contents.font.size = 16
  21.         draw_actor_state(actor, actor_x + 80, 245)
  22.       end
  23.     end
  24.   end
复制代码

此时基本上对齐了,因为战斗状态窗口把敌人的战斗图遮住了,只好修改scene_battle的脚本,使窗口的透明度为0,可是这样不是很美观,只好自己做张图片作为状态栏。
把Scene_Battle 1的相关代码改成这样
  1. @status_window = Window_BattleStatus.new
  2.     @status_window.z=9999
  3.     @status_window.opacity = 0
  4.     @test = Sprite.new
  5.     @test.z = 200
  6.     @test.bitmap = RPG::Cache.picture("系统图片/战斗状态.png")
复制代码

最后在下面释放窗口那里加上
@test.bitmap.dispose
这句。
最终效果图如下

关于那个战斗状态要自己画的,灵感来自某人的图片菜单教学。
“@”这个符号后面通常是自己定义一个变量名,常出现在图片显示中
然后脸图的坐标定义可以在Window_BattleStatus的
actor = $game_party.actors
actor_x = i * 163 +4
这里修改,这就是正确的教程了。以前那个逻辑上有点问题

忘了说了……
这个脚本要把Spriteset_Battle改成以下这样或者用地图战斗背景,否则很不美观,然后要自己更改战斗背景图的大小
  1. #==============================================================================
  2. # ■ Spriteset_Battle
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的活动块的类。本类在 Scene_Battle 类
  5. # 的内部使用。
  6. #==============================================================================

  7. class Spriteset_Battle
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_reader   :viewport1                # 敌人方的显示端口
  12.   attr_reader   :viewport2                # 角色方的显示端口
  13.   #--------------------------------------------------------------------------
  14.   # ● 初始化变量
  15.   #--------------------------------------------------------------------------
  16.   def initialize
  17.     # 生成显示端口
  18.     @viewport1 = Viewport.new(0, 0, 640, 480)
  19.     @viewport2 = Viewport.new(0, 0, 640, 480)
  20.     @viewport3 = Viewport.new(0, 0, 640, 480)
  21.     @viewport4 = Viewport.new(0, 0, 640, 480)
  22.     @viewport2.z = 101
  23.     @viewport3.z = 200
  24.     @viewport4.z = 5000
  25.     # 生成战斗背景活动块
  26.     @battleback_sprite = Sprite.new(@viewport1)
  27.     # 生成敌人活动块
  28.     @enemy_sprites = []
  29.     for enemy in $game_troop.enemies.reverse
  30.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  31.     end
  32.     # 生成敌人活动块
  33.     @actor_sprites = []
  34.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  35.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  36.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  37.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  38.     # 生成天候
  39.     @weather = RPG::Weather.new(@viewport1)
  40.     # 生成图片活动块
  41.     @picture_sprites = []
  42.     for i in 51..100
  43.       @picture_sprites.push(Sprite_Picture.new(@viewport3,
  44.         $game_screen.pictures[i]))
  45.     end
  46.     # 生成计时器块
  47.     @timer_sprite = Sprite_Timer.new
  48.     # 刷新画面
  49.     update
  50.   end
  51.   #..........................................................................
  52.   #--------------------------------------------------------------------------
  53.   # ● 胜利图
  54.   #--------------------------------------------------------------------------
  55.   def win
  56.     for sprite in @actor_sprites
  57.       sprite.win
  58.     end
  59.   end
  60.   #..........................................................................
  61.   #--------------------------------------------------------------------------
  62.   # ● 释放
  63.   #--------------------------------------------------------------------------
  64.   def dispose
  65.     # 如果战斗背景位图存在的情况下就释放
  66.     if @battleback_sprite.bitmap != nil
  67.       @battleback_sprite.bitmap.dispose
  68.     end
  69.     # 释放战斗背景活动块
  70.     @battleback_sprite.dispose
  71.     # 释放敌人活动块、角色活动块
  72.     for sprite in @enemy_sprites + @actor_sprites
  73.       sprite.dispose
  74.     end
  75.     # 释放天候
  76.     @weather.dispose
  77.     # 释放图片活动块
  78.     for sprite in @picture_sprites
  79.       sprite.dispose
  80.     end
  81.     # 释放计时器活动块
  82.     @timer_sprite.dispose
  83.     # 释放显示端口
  84.     @viewport1.dispose
  85.     @viewport2.dispose
  86.     @viewport3.dispose
  87.     @viewport4.dispose
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 显示效果中判定
  91.   #--------------------------------------------------------------------------
  92.   def effect?
  93.     # 如果是在显示效果中的话就返回 true
  94.     for sprite in @enemy_sprites + @actor_sprites
  95.       return true if sprite.effect?
  96.     end
  97.     return false
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 刷新画面
  101.   #--------------------------------------------------------------------------
  102.   def update
  103.     # 刷新角色的活动块 (对应角色的替换)
  104.     @actor_sprites[0].battler = $game_party.actors[0]
  105.     @actor_sprites[1].battler = $game_party.actors[1]
  106.     @actor_sprites[2].battler = $game_party.actors[2]
  107.     @actor_sprites[3].battler = $game_party.actors[3]
  108.     # 战斗背景的文件名与现在情况有差异的情况下
  109.     if @battleback_name != $game_temp.battleback_name
  110.       @battleback_name = $game_temp.battleback_name
  111.       if @battleback_sprite.bitmap != nil
  112.         @battleback_sprite.bitmap.dispose
  113.       end
  114.       @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
  115.       @battleback_sprite.src_rect.set(0, 0, 640, 480)
  116.     end
  117.     # 刷新战斗者的活动块
  118.     for sprite in @enemy_sprites + @actor_sprites
  119.       sprite.update
  120.     end
  121.     # 刷新天气图形
  122.     @weather.type = $game_screen.weather_type
  123.     @weather.max = $game_screen.weather_max
  124.     @weather.update
  125.     # 刷新图片活动块
  126.     for sprite in @picture_sprites
  127.       sprite.update
  128.     end
  129.     # 刷新计时器活动块
  130.     @timer_sprite.update
  131.     # 设置画面的色调与震动位置
  132.     @viewport1.tone = $game_screen.tone
  133.     @viewport1.ox = $game_screen.shake
  134.     # 设置画面的闪烁色
  135.     @viewport4.color = $game_screen.flash_color
  136.     # 刷新显示端口
  137.     @viewport1.update
  138.     @viewport2.update
  139.     @viewport4.update
  140.   end
  141. end
复制代码



作者: dosbox    时间: 2008-9-5 16:07
谢谢先

我想问一下,就是那个“战斗脸图”中的图片是如何命名的,有规则吗?

作者: 浩气青天    时间: 2008-9-5 16:26
这是提问区耶~
作者: 玄月    时间: 2008-9-5 20:24
细微小事不必在意………………
2l的问题………………
就是 “角色的名字”_f 这样就可以了
作者: dosbox    时间: 2008-9-6 00:28
好的,谢谢了
晚上回去测试
{/qiang}
作者: 越前リョーマ    时间: 2008-9-6 02:31
我要你的完整版……
作者: yangff    时间: 2008-9-6 02:36
Love 地图
作者: ONEWateR    时间: 2008-9-6 02:52
曾经用这种方法制作vx行走图纵版战斗 =v=
作者: 玄月    时间: 2008-9-6 03:51
以下引用越前リョーマ于2008-9-5 18:31:58的发言:

我要你的完整版……

什么意思?要发个工程么?
作者: dosbox    时间: 2008-9-6 04:22
唉,我也试了,还是报错了呀

怎么会这样啊


楼主能发个工程吗?我也调试不了...

作者: dosbox    时间: 2008-9-6 04:37


唉,我也试了,还是报错了呀

怎么会这样啊


楼主能发个工程吗?我也调试不了...



新建工程,做好第一步第二步没有图片显示啊

作者: 玄月    时间: 2008-9-6 04:45
你确定图片没放错地方?
测试时请配合容错脚本
作者: dosbox    时间: 2008-9-6 04:54
没有放是地方啊
我还特别地看了一下,不过我测试的时候是新建的工程
不是横版地,应该没有关系吧

如果可以的话,麻烦大侠发个工程上来撒
{/tp}
作者: 越前リョーマ    时间: 2008-9-6 05:26
以下引用玄月于2008-9-5 19:51:00的发言:


以下引用越前リョーマ于2008-9-5 18:31:58的发言:

我要你的完整版……


什么意思?要发个工程么?

就是你的那个最终效果图……
作者: 玄月    时间: 2008-9-6 05:58
还是不懂…………
算了,这个还要修正,有人说出错
作者: 步兵中尉    时间: 2008-9-6 06:03
    应该是让你发个工程上来吧!
作者: 浩气青天    时间: 2008-9-6 06:04

小柯,话说这个脚本不错,试试看能不能弄在BW里面?
作者: 玄月    时间: 2008-9-6 06:40
http://rpg.blue/upload_program/f ... 6r版_101083035.rar
范例做好了,因为原版是出自幻想森林的,现在叫6r版也未尝不可
作者: 玄月    时间: 2008-9-6 06:41
终于回到指引者这个阶级了
作者: dosbox    时间: 2008-9-6 06:44
haha

UP!!!{/qiang}
作者: dosbox    时间: 2008-9-6 06:46
那能不能说一下大体的步骤哦,叫叫我们这些个新人!

指引阶级不是那么好走地撒

呵呵

下了试用中~
作者: 幽月    时间: 2008-9-6 16:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: 步兵中尉    时间: 2008-9-6 20:05
    很难在即时战斗中这样改!
作者: 玄月    时间: 2008-9-7 02:28
-_-|||我的游戏就是即时战斗
作者: cs1985    时间: 2008-9-7 04:43

为什么会这样?
LZ建议你修改下你的范例,我用范例打开时是这样



作者: 玄月    时间: 2008-9-7 15:24
我的范例没问题。加上时间关系与我剧情的关系,没有去加那个图片,测试时请配合容错脚本,要看多人的效果可以自己找一张放进去。6r上很多
第一个问题是你他与你的外挂脚本出冲突,求解决方法请至提问区发帖
第二个问题是因为你缺少这张图片,建议测试时加上容错脚本
作者: swin1234    时间: 2008-9-7 22:03
楼主我加了你的脚本进去之后打完之后果4个框还在啊~离开战斗画面够自己不会消失的吗?
作者: 玄月    时间: 2008-9-7 22:33
你看漏了教程,加图之后下面不是还有一行么?
@test.bitmap.dispose
作者: 越前リョーマ    时间: 2008-9-7 22:35
话说这个是超级横板战斗的吧?
作者: 玄月    时间: 2008-9-7 23:07
超级……横版……战斗?
那啥,可以吃么?
是全动画横版战斗,还有些功能没有做好
作者: 越前リョーマ    时间: 2008-9-8 03:28
以下引用玄月于2008-9-7 15:07:30的发言:

超级……横版……战斗?
那啥,可以吃么?
是全动画横版战斗,还有些功能没有做好

= =
那就不用了……
作者: 玄月    时间: 2008-9-8 08:17
{/pz}~?
作者: 冰翔    时间: 2008-9-13 22:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: 玄月    时间: 2008-9-14 01:08
window_battlestatus
supper(什么什么)那里
自己把整个框移过去
作者: 冰翔    时间: 2008-9-14 03:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: 玄月    时间: 2008-9-14 06:35
我售后服务是不是太多了?
作者: 湛蓝de海    时间: 2008-9-14 20:08
这个东西不错.
可能会用到新游戏里.
就是怕冲突.{/hx}
作者: 黑鏻    时间: 2008-9-14 21:18
支持…………其实在下也怕冲突~~




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