Project1

标题: 怎样让一个图片又在状态兰显示又在战斗图显示? [打印本页]

作者: zxc3824    时间: 2011-8-6 19:06
标题: 怎样让一个图片又在状态兰显示又在战斗图显示?
本帖最后由 zxc3824 于 2011-8-6 20:18 编辑

我在资源帖子里面找到了这个问题,但是

按照方法:
先在window_base里定义
def draw_battle_actor(actor, x, y)
    bitmap=Bitmap.new("Graphics/battlers/#{actor.battler_name}")
    cw = bitmap.width
    ch = bitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x - cw/20, y - ch, bitmap, src_rect)
  end

之后在Window_BattleStatus的def refresh后draw_battle_actor(actor,actor_x,132)

可是照着该方法,以我的一个工程为例:


主角名称叫唐静芸,我在battlers文件夹内也放了一张名为“唐静芸.jpg”的图片。可是在战斗画面中并不显示。

我说的很明白,就是要让头像出现在战斗画面中!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
可是按照上面的方法,并没有出现dsu_plus_rewardpost_czw
作者: Wind2010    时间: 2011-8-6 19:11
请确定下描绘的x和y坐标
作者: 英顺的马甲    时间: 2011-8-6 19:13
你是要将图片加在哪里?
还有,请将工程发上以鉴定问题,
最后那个名字被遮住了。
作者: cinderelmini    时间: 2011-8-6 19:18
嗯...首先,
先把
def draw_battle_actor(actor, x, y)
    bitmap=Bitmap.new("Graphics/battlers/#{actor.battler_name}")
    cw = bitmap.width
    ch = bitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x - cw/20, y - ch, bitmap, src_rect)
  end
这个定义里的
self.contents.blt(x - cw/20, y - ch, bitmap, src_rect)
改一下...坐标都不对了,这个坐标是针对行走图的似乎,
改成x和y就好了,也就是
self.contents.blt(x, y, bitmap, src_rect)
(注:如果这个坐标是特意算出来的,可以无视以上的惠话...)
然后,
之后在Window_BattleStatus的def refresh后draw_battle_actor(actor,actor_x,132)

俺表示这样绝对不能在默认的那个战斗栏里显示出来的,
因为y坐标132明显已经不在栏的窗口范围里了,
试试改成0看看...
作者: Wind2010    时间: 2011-8-6 20:46
嗯,
  1. ("Graphics/battlers/#{actor.battler_name}")
复制代码
的话,显示的应该是战斗图
作者: cinderelmini    时间: 2011-8-6 21:52
呃..就是说,要用角色名字命名图片么...
那把:
bitmap=Bitmap.new("Graphics/battlers/#{actor.battler_name}")
(这句其实是用角色战斗图的名字命名)
改成:
bitmap=Bitmap.new("Graphics/battlers/#{actor.name}")
...
作者: shoed    时间: 2011-8-7 11:27
你显示不出头像主要可能有两个问题:
1、就是战头状态窗口的区域问题,如图

只能在这个区域显示,如果你的坐标设置超出,则显示不出
你可以重新设定这个战头状态窗口的大小
2、就是图片路径问题,如图

两种文件路径看你的情况使用,
我认为你还是不要用系统中和路径,你可以使用文件路径
比始“/picture/xxx.png”这种方式,将你的图直接放到picture文件夹下


shoed于2011-8-7 12:40补充以下内容:
actor.battler_name你取的就是数据库中的设定的战斗图的文件名
actor.battler_name就是你的角色战斗图    唐静芸.jpg
你可以再建个heads的文件夹
然后 唐静芸_head.jpg是这个角色的头像
在脚本中使用("Graphics/heads/#{actor.battler_name}_head")
就可以了,
我说的应该很详细了吧
作者: zxc3824    时间: 2011-8-7 15:05
shoed 发表于 2011-8-7 11:27
你显示不出头像主要可能有两个问题:
1、就是战头状态窗口的区域问题,如图

不算很详细,如今我用的是45度战斗系统,把战斗图放到战场了,而现在那里感觉空空的,所以想加个头像,像仙剑那样的可是现在却不行。那么我想问下,上面那段脚本有问题吗?因为按照你的方法试了一次,还是不行。不知大哥有没有战斗显示头像的脚本
作者: Wind2010    时间: 2011-8-7 15:20
我想问下,LZ脚本中的actor_x数值是?
作者: shoed    时间: 2011-8-7 15:28

战斗显示头像,我自已做过,现成的脚 本我没有,不地这我可以帮你改改,你将工程发我


shoed于2011-8-7 16:03补充以下内容:
不难,你将工程发我吧,我QQ 251733538
作者: cinderelmini    时间: 2011-8-7 17:53
话说LZ...
直接无视了6楼吗...

你已经有写出了这个显示头像的脚本了,
如果显示不出来的话,
排除了坐标的问题,
就可能是同名类重叠了吧~
试试全局搜索"Window_BattleStatus"(别告诉我不知道什么是全局搜索)
然后选最底下的那个结果,
再在refresh方法里加上调用显示头像的句子...

话说要显示的图片的名字的定义已经在6楼里说了...
作者: zxc3824    时间: 2011-8-7 20:10
cinderelmini 发表于 2011-8-7 17:53
话说LZ...
直接无视了6楼吗...

不是无视,因为试过了没用啊。


zxc3824于2011-8-8 21:22补充以下内容:
  1. #==============================================================================
  2. # ■ Window_BattleStatus
  3. #------------------------------------------------------------------------------
  4. #  显示战斗画面同伴状态的窗口。
  5. #==============================================================================

  6. class Window_BattleStatus < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super(0, 320, 640, 160)
  12.     self.contents = Bitmap.new(width - 32, height - 32)
  13.     @level_up_flags = [false, false, false, false]
  14.     refresh
  15.   end
  16.   #--------------------------------------------------------------------------
  17.   # ● 释放
  18.   #--------------------------------------------------------------------------
  19.   def dispose
  20.     super
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 设置升级标志
  24.   #     actor_index : 角色索引
  25.   #--------------------------------------------------------------------------
  26.   def level_up(actor_index)
  27.     @level_up_flags[actor_index] = true
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 刷新
  31.   #--------------------------------------------------------------------------
  32.   def refresh
  33.     draw_battle_actor(actor,actor_x,132)  # 添加了
  34.     self.contents.clear
  35.     @item_max = $game_party.actors.size
  36.     for i in 0...$game_party.actors.size
  37.       actor = $game_party.actors[i]
  38.       actor_x = i * 160 + 4
  39.       draw_actor_name(actor, actor_x, 0)
  40.       draw_actor_hp(actor, actor_x, 32, 120)
  41.       draw_actor_sp(actor, actor_x, 64, 120)
  42.       if @level_up_flags[i]
  43.         self.contents.font.color = normal_color
  44.         self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  45.       else
  46.         draw_actor_state(actor, actor_x, 96)
  47.       end
  48.     end
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● 刷新画面
  52.   #--------------------------------------------------------------------------
  53.   def update
  54.     super
  55.     # 主界面的不透明度下降
  56.     if $game_temp.battle_main_phase
  57.       self.contents_opacity -= 4 if self.contents_opacity > 191
  58.     else
  59.       self.contents_opacity += 4 if self.contents_opacity < 255
  60.     end
  61.   end
  62. end
复制代码
是 这样 吗?怎么不行的?
作者: cinderelmini    时间: 2011-8-8 22:49
啊呀..这样竟然没报错...神奇了...
  1. #--------------------------------------------------------------------------
  2.   # ● 刷新
  3.   #--------------------------------------------------------------------------
  4.   def refresh
  5.     draw_battle_actor(actor,actor_x,132)  # 添加了
  6.     self.contents.clear
  7.     @item_max = $game_party.actors.size
  8.     for i in 0...$game_party.actors.size
  9.       actor = $game_party.actors[i]
  10.       actor_x = i * 160 + 4
  11.       draw_actor_name(actor, actor_x, 0)
  12.       draw_actor_hp(actor, actor_x, 32, 120)
  13.       draw_actor_sp(actor, actor_x, 64, 120)
  14.       if @level_up_flags[i]
  15.         self.contents.font.color = normal_color
  16.         self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  17.       else
  18.         draw_actor_state(actor, actor_x, 96)
  19.       end
  20.     end
  21.   end
复制代码
两种可能吧~一是用了容错脚本(容错脚本能强大到如此地步吗)
二时在全动画战斗里还有重写了一个
Window_BattleStatus  类
如果是第二种情况,
那这里不报错就能理解了...
话说要把
    draw_battle_actor(actor,actor_x,132)  # 添加了
写在:
draw_actor_sp(actor, actor_x, 64, 120)
下面...啊鲁..也就是说...
必须在for的循环里..
不然没有actor的定义,
没有actor_x的定义,
凭空写了个
    draw_battle_actor(actor,actor_x,132)  # 添加了
正常情况下100%出错..
不过既然没报错,如果没有用容错脚本的话,
即使这样写了也是不会显示的.

没报错的具体原因不清楚,
要么自己找,
要么传工程...

如果真的是在全动画战斗里还有重写了一个
Window_BattleStatus  类的话...
我是不是可以认为LZ你果真无视了之前的帖了...

作者: zxc3824    时间: 2011-8-9 20:44
本帖最后由 zxc3824 于 2011-8-9 20:46 编辑
cinderelmini 发表于 2011-8-8 22:49
啊呀..这样竟然没报错...神奇了...两种可能吧~一是用了容错脚本(容错脚本能强大到如此地步吗)
二时在全动画 ...


好,按照你的方法:
先把
def draw_battle_actor(actor, x, y)
    bitmap=Bitmap.new("Graphics/battlers/#{actor.battler_name}")
    cw = bitmap.width
    ch = bitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x - cw/20, y - ch, bitmap, src_rect)
  end
这个定义里的
self.contents.blt(x - cw/20, y - ch, bitmap, src_rect)
改一下...坐标都不对了,这个坐标是针对行走图的似乎,
改成x和y就好了,也就是
self.contents.blt(x, y, bitmap, src_rect)

在Window_BattleStatus的def refresh后draw_battle_actor(actor,actor_x,132)
Y改成0看看...

把:
bitmap=Bitmap.new("Graphics/battlers/#{actor.battler_name}")
(这句其实是用角色战斗图的名字命名)
改成:
bitmap=Bitmap.new("Graphics/battlers/#{actor.name}")

按照你的方法做了一次,不行啊,连个范例都不行
作者: cinderelmini    时间: 2011-8-9 22:12
好吧~
既然如此,就当我是纸上谈兵好了~这没必要争~

总之,这种问题要解决也不是一两句的事,
如果想知道那段Window_BattleStatus
里的def refresh错在哪里,
把添加上去的战斗系统暂时去掉就能知道了.

最后说一句:工程放上来,3分钟内包解决.
作者: Wind2010    时间: 2011-8-9 22:25
LZ在这个refresh里弄个
  1. p 1
复制代码
看看这段有没有被重置先吧
作者: zxc3824    时间: 2011-8-10 14:06
cinderelmini 发表于 2011-8-9 22:12
好吧~
既然如此,就当我是纸上谈兵好了~这没必要争~

工程已经上传
真移位 物品动画.zip (1.78 MB, 下载次数: 21)

改过以后希望能够说明一下,你修改了哪里,谢谢
作者: Wind2010    时间: 2011-8-10 14:39
zxc3824 发表于 2011-8-10 14:06
工程已经上传

真移位 物品动画.rar (1.85 MB, 下载次数: 14)
搜索louse可以找到增加部分
另外我随便在battlers放了两张图片来测试
作者: zxc3824    时间: 2011-8-10 15:48
Wind2010 发表于 2011-8-10 14:39
搜索louse可以找到增加部分
另外我随便在battlers放了两张图片来测试

添加倒是添加了,如果这张图片没有进行半透明处理的话,根本就不能看见HP和SP的数值
作者: cinderelmini    时间: 2011-8-10 18:29
呃...已经好了..
放了两张图做测试,
在那个后面打了三角符号的Window_BattleStatus脚本里搜索"NATSU",
找到添加的地方...
另外,说一句吧,描画的时候有顺序区分,
先描画的项目会被后描画的项目盖住...

========工程=====
真移位 物品动画.rar (1.87 MB, 下载次数: 21)




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