设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: hypnos0421
打印 上一主题 下一主题

战斗显示图片

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-1-7
帖子
64
11
 楼主| 发表于 2009-3-25 01:54:41 | 只看该作者
忘了说了 在脚本中用when case的方法 利用 技能引发公共事件 然后显示图片
就是说释放某个技能是显示下图片 然后就消失
虽然站上找到改变战斗背景的脚本 但是冲突 所以想这样的技能反正也没几个
就用显示图片来解决
没想到他显示的层面在动画的下层 状态拦和怪物的上层
状态拦的话可以通过3楼所讲的 我在windos_base中修改z值9999来解决
但是窗口有了没有角色战斗图和怪物 所以才来请教
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
12
发表于 2009-3-25 08:04:20 | 只看该作者
为了互相不干扰,战斗中的精灵是放在 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 编辑:刚才忘了加释放的操作了,补上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-1-7
帖子
64
13
 楼主| 发表于 2009-3-25 08:04:28 | 只看该作者
我会试试看的...谢谢LS的回答
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-1-7
帖子
64
14
 楼主| 发表于 2009-3-25 08:20:14 | 只看该作者
按LS说的改了Spriteset_Battle中的Z值
但是在测试战斗时候alias dispose_old dispose报错
NAME Error
dispose for class Spriteset_Battle
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
15
发表于 2009-6-12 08:00:00 | 只看该作者
你是在 Spriteset_Battle 脚本原处修改的么?如果是的话,dispose 还没有定义, 所以出错了。上面的代码应该插到 main 之前,Spriteset_Battle 之后
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-1-7
帖子
64
16
 楼主| 发表于 2009-3-26 01:13:04 | 只看该作者
我把上面脚本插在了Spriteset_Battle 下面 main的上面 但是和rtab冲突
NoMethodError
undefined method '>' for nil:NilClass
脚本里是def screen_scroll的下一行
if @wait > 0报错
晕了 实在不行只好另想办法了...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
17
发表于 2009-3-26 12:38:51 | 只看该作者
嗯,冲突在于 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})
版主对此帖的认可:『鼓励耐心服务到家的帮助』,积分『+50』。
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-1-7
帖子
64
18
 楼主| 发表于 2009-3-27 01:09:26 | 只看该作者
真的太感谢你了 这个问题弄的我头都疼了 主要还是不熟悉脚本 我也不是从0开始学
碰到什么问题解决什么问题 从中偷学点来的 现在真没什么时间...
我是640*480的战斗背景 就把@viewport0 改成640*480了
这样就完美了 谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-12 06:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表