Project1

标题: 战斗显示图片 [打印本页]

作者: hypnos0421    时间: 2009-3-23 15:10
标题: 战斗显示图片
就是关于战斗时候显示图片 会覆盖在人物状态和怪物的上层
请教如何才能显示在最底层? 就是状态拦和怪物的后面 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: hypnos0421    时间: 2009-3-24 00:48
没人回答吗... 请大家帮帮忙类...
作者: redant    时间: 2009-3-24 01:17
单纯显示图片?
修改敌人和其他框的z值

拿物品框来说
if $game_temp.in_battle
      self.y = 64
      self.height = 256
      self.back_opacity = 255
      self.z = 9999 #小改动
    end
代码就一句 self.z = 9999 看你怎么用了
作者: hypnos0421    时间: 2009-3-24 01:52
以下引用redant于2009-3-23 17:17:48的发言:

单纯显示图片?
修改敌人和其他框的z值

拿物品框来说
if $game_temp.in_battle
     self.y = 64
     self.height = 256
     self.back_opacity = 255
     self.z = 9999 #小改动
   end
代码就一句 self.z = 9999 看你怎么用了

那具体因该怎么操作呢 我对脚本还不是太熟悉 全域搜索也会有很多的答案...请帮忙
作者: hypnos0421    时间: 2009-3-24 01:55
还有就是怪物的位置 [LINE]1,#dddddd[/LINE]版主对此帖的评论:『请擅用编辑功能避免连贴。』,积分『-0』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: redant    时间: 2009-3-24 02:02
怪物位置在数据库 队伍里设定

只要英语差不多 明白 脚本开头名字 window_item就是 物品
具体问题具体解决 你就试验一下呗   ---->此人不负责任PIA走
作者: hypnos0421    时间: 2009-3-24 05:49
以下引用redant于2009-3-23 18:02:42的发言:

怪物位置在数据库 队伍里设定

只要英语差不多 明白 脚本开头名字 window_item就是 物品
具体问题具体解决 你就试验一下呗   ---->此人不负责任PIA走

我指的是 怪物的位置 在显示图片的上面 如果单纯的显示图片 会把怪物档住
对话框可以按你说的调整 但是怪物我实在没办法///
作者: hypnos0421    时间: 2009-3-24 07:38
不行了 改不了... [LINE]1,#dddddd[/LINE]版主对此帖的评论:『3小时内请勿自顶- -』,积分『-0』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: 天圣的马甲    时间: 2009-3-24 08:18
- -嗯……可以参考阵法的脚本修改。
http://rpg.blue/web/htm/news449.htm
作者: hypnos0421    时间: 2009-3-25 01:25
以下引用天圣的马甲于2009-3-24 0:18:20的发言:

- -嗯……可以参考阵法的脚本修改。
http://rpg.blue/web/htm/news449.htm

谢谢你的帮忙 能不能顺便解释一下你给的脚本中哪段是影响图片显示层面的呢?
作者: hypnos0421    时间: 2009-3-25 01:54
忘了说了 在脚本中用when case的方法 利用 技能引发公共事件 然后显示图片
就是说释放某个技能是显示下图片 然后就消失
虽然站上找到改变战斗背景的脚本 但是冲突 所以想这样的技能反正也没几个
就用显示图片来解决
没想到他显示的层面在动画的下层 状态拦和怪物的上层
状态拦的话可以通过3楼所讲的 我在windos_base中修改z值9999来解决
但是窗口有了没有角色战斗图和怪物 所以才来请教
作者: 紫苏    时间: 2009-3-25 08:04
为了互相不干扰,战斗中的精灵是放在 Viewport 中独立显示的,所以应该修改 Viewport 的 z 值:
class Spriteset_Battle

  alias dispose_old dispose

  def initialize
    # 生成显示端口
    @viewport0 = Viewport.new(0, 0, 640, 320)
    @viewport1 = Viewport.new(0, 0, 640, 320)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport4 = Viewport.new(0, 0, 640, 480)
    # 敌人在图片上
    @viewport1.z = 1

    @viewport2.z = 101
    # 图片在敌人下
    @viewport3.z = 0

    @viewport4.z = 5000
    # 生成战斗背景活动块(单独放入另一个 Viewport)
    @battleback_sprite = Sprite.new(@viewport0)
    # 生成敌人活动块
    @enemy_sprites = []
    for enemy in $game_troop.enemies.reverse
      @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
    end
    # 生成敌人活动块
    @actor_sprites = []
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    # 生成天候
    @weather = RPG::Weather.new(@viewport1)
    # 生成图片活动块
    @picture_sprites = []
    for indx in 51..100
      @picture_sprites.push(Sprite_Picture.new(@viewport3,
        $game_screen.pictures[indx]))
    end
    # 生成计时器块
    @timer_sprite = Sprite_Timer.new
    # 刷新画面
    update
  end
  def dispose
    dispose_old
    @viewport0.dispose

  end
end


00:11 编辑:刚才忘了加释放的操作了,补上
作者: hypnos0421    时间: 2009-3-25 08:04
我会试试看的...谢谢LS的回答
作者: hypnos0421    时间: 2009-3-25 08:20
按LS说的改了Spriteset_Battle中的Z值
但是在测试战斗时候alias dispose_old dispose报错
NAME Error
dispose for class Spriteset_Battle
作者: hypnos0421    时间: 2009-3-26 01:13
我把上面脚本插在了Spriteset_Battle 下面 main的上面 但是和rtab冲突
NoMethodError
undefined method '>' for nil:NilClass
脚本里是def screen_scroll的下一行
if @wait > 0报错
晕了 实在不行只好另想办法了...
作者: 紫苏    时间: 2009-3-26 12:38
嗯,冲突在于 RTAB 初始化的时候要给很多非默认脚本中的变量分配空间,而如果用上面的脚本覆盖了 initialize,变量在内存中还没有一席之地,所以是 nil~

站上一搜 RTAB,玲琅满目{/fd}……
不过改法应该什么区别,我没测试其它的,就改了下这个针对 RTAB战斗系统原生版 Ver1.16 的:
class Spriteset_Battle
  
  # 这一行是给 dispose 取个别名
  # 这样在覆盖 dispose 的时候就不用把原来的代码照抄一遍
  # 直接调用 dispose_old 就可以完成原来 dispose 的功能
  alias dispose_old dispose

  
  def initialize
    # 生成显示端口
    # 同之前的——给背景单独分配一个 Viewport
    @viewport0 = Viewport.new(0, 0, 640, 320)

    @viewport1 = Viewport.new(0, 0, 640, 480)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport4 = Viewport.new(0, 0, 640, 480)
    # 画敌人的 Viewport1 的 z 略高于图片
    @viewport1.z = 2

    @viewport2.z = 101
    # 画图片的 Viewport3 的 z 略高于背景
    # (背景的 Viewport 的 z 没赋值,就取了缺省值 0)
    @viewport3.z = 1

    @viewport4.z = 5000
    @wait = 0
    @real_x = 0
    @real_y = 0
    @real_zoom = 1.0
    @target_x = 0
    @target_y = 0
    @target_zoom = 1.0
    @gap_x = 0
    @gap_y = 0
    @gap_zoom = 0.0
    # 生成战斗背景活动块
    @battleback_sprite = Sprite.new(@viewport0)
    # 生成敌人活动块
    @enemy_sprites = []
    for enemy in $game_troop.enemies.reverse
      @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
    end
    # 生成敌人活动块
    @actor_sprites = []
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    # 生成天候
    @weather = RPG::Weather.new(@viewport1)
    # 生成图片活动块
    @picture_sprites = []
    for i in 51..100
      @picture_sprites.push(Sprite_Picture.new(@viewport3,
        $game_screen.pictures))
    end
    # 生成计时器块
    @timer_sprite = Sprite_Timer.new
    # 刷新画面
    update
  end
  def dispose
    @dispose_old
    viewport0.dispose

  end
end


其实要改的就是把背景和敌人的 Viewport 分开,调整各自的 z ,其它版本的 RTAB 就算有不同相信你也会改了~

(一句题外话,刚发现原来论坛 这个标记已经被屏蔽了{/hx}) [LINE]1,#dddddd[/LINE]版主对此帖的认可:『鼓励耐心服务到家的帮助』,积分『+50』。 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: hypnos0421    时间: 2009-3-27 01:09
真的太感谢你了 这个问题弄的我头都疼了 主要还是不熟悉脚本 我也不是从0开始学
碰到什么问题解决什么问题 从中偷学点来的 现在真没什么时间...
我是640*480的战斗背景 就把@viewport0 改成640*480了
这样就完美了 谢谢
作者: 紫苏    时间: 2009-6-12 08:00
你是在 Spriteset_Battle 脚本原处修改的么?如果是的话,dispose 还没有定义, 所以出错了。上面的代码应该插到 main 之前,Spriteset_Battle 之后




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