66RPG
本站首页
制作教程
文章作品
制作素材
原创游戏区
周边下载
本站论坛
 ※ 站内搜索
栏 目:
方 式:
关键词:
  
 ※ 教程分类
 RMXP 图文教学
 初级教学
 中级教学
 高级教学
 个人创意与研究
 RMXP 录像教学
 新人入门录像
 零散录像教学
 商业素材使用录像 ★
 周边教学
 美工 与 音乐
 RMXP 脚本发布
 游戏系统修改
 地图效果类
 战斗系统相关
 全新系统类
 API与高难度类
 RMVX 制作教学
 RMVX 初级教学
 RMVX 中级教程
 RMVX 高级教程
 RMVX 综合制作展
 ※ 无图目录 (按点击量横排序)


-- 66RPG全内容文字目录 --


 ※ 近期特色教学
VX半即时战斗系统1.02a版(拉尔夫战记的产物) ( 66RPG, RPG MAKER XP教程 )
 本站首页→制作教程→RMVX 中级教程

VX半即时战斗系统1.02a版(拉尔夫战记的产物)


教程作者:zhong
首发网址:点此进入本教学的原始帖
适宜用户:RTAB战斗
技术通用度:★★★★
技术应用复杂度:50 (满分150分)
学习的理解难度:60 (满分150分)

 作者的话:

这是本人寒假时候制作的游戏《拉尔夫战记》的产物,上学时由于硬盘挂了,所有东西都没了,接近半年多没动RM,最近想起要做个像样的游戏,于是就把战斗系统整理出来,看到许多人都想要这个系统,就放出来个比较原始的版本了,VX本身战斗系统太过于简陋,希望这个系统能给一些有用心做游戏的人有一点帮助吧...本来想整合彩虹神剑进去,后来到各有个的需要就不整合了,脚本可能存在诸多bug,因为缺乏足够的测试,如有发现,希望大家及时告知我一声,如果我有时间会尽量Debug,不过明天绝对没时间~~~本脚本可与我上回发的升级提示脚本一起使用,这里没整合进去,一起使用才是最完整的,把升级提示脚本放在本脚本之下就可以了.这是个插件版的系统,所以与任何战斗系统都应该有很大冲突.游戏中如果使用本脚本时至少要保留脚本开头的信息,如要转载请通知我一声,谢谢!本系统Scene_CP核心部分参考自神思的《战斗真位移》战斗系统,在这里感谢一下神思,因为系统的核心基本在那部分.最后还有一些不得不说的话,本脚本以人格保证绝无任何抄袭行为!(上次发了个小教程被一个莫名奇妙的人说抄袭,一直不爽到现在....).

 教学正文:


使用方法:
☆使用方法基本与我之前发的朴素横版战斗相同
☆动画设置:
1、武器、特技、物品的施展动画直接在其备注填入动画id即可。如果为空即不显示施展动画。
2、敌人普通攻击动画,在其备注里填写格式如下:
 a1=XX #施展动画id
 a2=XX #对方动画id
如果为空即使用默认普通动画(画面震动).
☆战斗图设置:
3、角色战斗图的的命名方式是角色id后面加上_z,如1_z.存放在Battlers文件夹。
4、默认待机图为两帧,只要在Battlers文件夹里放一个“战斗图名+待“的文件,就会自动循环播放这两个战斗图,如1_b待,没有则没待机动作。
☆战斗背景设置:
5、在Graphics目录下新建Battlebacks文件夹。
6、战斗时先搜索文件夹内是否有与角色所在区域同名的战斗图,如果没有则搜索文件夹里是否存在与地图同名的图片。
7、简而言之,你须储存与你地图同名的战斗背景在Battlebacks,如果想在同一幅地图实现不同地域战斗背景不同,就在Battlebacks文件夹里储存与这个地域同名的战斗背景.至少保证战斗的地图
都有一幅该地图同名的战斗背景,不然战斗时会提示找不到地图.(可参考《拉尔夫战记》或朴素横版的范例)
☆CP条设置:
8、CP条:在system文件夹里储存一个命名为"cp条"的图片,默认长度为327,如果需要可在Scene_CP类里调整相关参数.
9、角色cp图命名方式是"角色id+_cp",如:1_cp,角色活跃cp图命名方式是"角色id+_a_cp",如1_a_cp,敌人cp图命名方式是"敌人名 + _敌人cp",如史莱姆_敌人cp,敌人活跃cp图是"敌人名+_a_cp".
亦可在system文件夹里储存名为"敌人cp"的图片,作为敌人的统一cp图,活跃图名为"a_敌人cp",默认如果找不到敌人相关cp图就直接用这张图片.
☆选择光标设置
10、在system文件夹里储存名为"光标"的图片作为选择光标.
范例工程:
http://bbs.66rpg.com/UP_PIC/200801/VX半即时范例1.02a_97952949.rar

已知bug:
1、人物在物品和特技选择己方对象时,头像重叠,这是由于忘了刷新的原因,解决方法是:
找到 def update_target_actor_selection 这个方法,在 @target_actor_window.draw_actorface这句上面加上一句@target_actor_window.refresh

2、连续伤害和自动回复hp无效...这个也不难解决,就是有点琐碎,因为要改一下伤害部分之类的.更新插件脚本如下:(直接插在原脚本之下就行了,顺便也更新了上一个bug.
3、受打击时,人物有跳出cp槽的可能,已解决
4、优化了窗口刷新和部分算法,速度有所提高。
5、复活时有些许bug,已修复。
6.头像刷新存在一点bug,已修复。
未完善:CP系统在配置低点的机子上运行速度缓慢,掉帧严重,这个暂时由于测试有障碍的原因,还有待优化完善

#=============================================================================
#★Zhong RMVX 半即时战斗系统1.01版更新插件脚本★
#---------------------------------------------------------------------------#★作者: Zhong_zw
#=============================================================================


   class Game_Battler
   attr_accessor :slip_damage
   attr_accessor :auto_damage
 
  
   def initialize
     @cp = 0
     @cp_total = false
     @cp_turn = 0
     @damage = nil
     @damage_pop = false
     @act_status = 0
     @slip_damage = 0
     @auto_damage = 0
     @battler_name = ""
     @battler_hue = 0
     @hp = 0
     @mp = 0
     @action = Game_BattleAction.new(self)
     @states = []                    # 状态 (ID 顺序)
     @state_turns = {}               # 状态持续回合数 (散列)
     @hidden = false  
     @immortal = false
     clear_extra_values
     clear_sprite_effects
     clear_action_results
   end
  
  
  
  #--------------------------------------------------------------------------
  # ● 应用连续伤害效果
  #--------------------------------------------------------------------------
  def slip_damage_effect
    if slip_damage? and @hp > 0
      @hp_damage = apply_variance(maxhp / 10, 10)
      @hp_damage = @hp - 1 if @hp_damage >= @hp
      @slip_damage = @hp_damage
      self.hp -= @hp_damage
    end
  end
end #class
 
#======================================================
#★角色处理类
#======================================================
class Game_Actor < Game_Battler
 


  #--------------------------------------------------------------------------
  # ● 执行自动回复 (回合结束时调用)
  #--------------------------------------------------------------------------
  def do_auto_recovery
    if auto_hp_recover and not dead?
      self.hp += maxhp / 20
      @auto_damage = maxhp / 20
    end
  end
end #class
#==========================================================================
#★战斗类
#==========================================================================
class Scene_Battle < Scene_Base
 
 
 
 def update_target_actor_selection
    #=============================
    @target_actor_window.refresh
    #=============================
    @target_actor_window.draw_actorface($game_party.members[@target_actor_window.index])
  
    @target_actor_window.update
    if Input.trigger?(Input::B)
      Sound.play_cancel
      end_target_actor_selection
    elsif Input.trigger?(Input::C)
      Sound.play_decision
      @active_battler.action.target_index = @target_actor_window.index
    
      end_target_actor_selection
      end_skill_selection
      end_item_selection
      next_actor
       @active_battler.cp = 0
    end
  end
  def active_battler_update
   
    #===================================
    @actor_battler = []
    @enemy_battler = []
    #===================================
    @cp_battle.update
    #===============================================================
    for battler in $game_party.members + $game_troop.members
      if battler.cp_turn == battler.maxcp
        battler.remove_states_auto unless battler.movable?
        battler.slip_damage_effect
        battler.do_auto_recovery if battler.is_a?(Game_Actor)
        battler.damage_pop = 3 if battler.slip_damage != 0 or battler.auto_damage != 0
        update_basic
        battler.cp_turn = 0
      end 
    #================================================================
      if battler.cp == battler.maxcp
         if battler.is_a?(Game_Actor)
           @actor_battler.push(battler)
         else
           battler.make_action
           @enemy_battler.push(battler)
           battler.make_action
          end   
      else
        next
      end 
    end
    if @actor_battler.size != 0
      @cp_battle.stop = true
      next_actor
      Audio.se_play("Audio/SE/Jump2",100,100)
    elsif @enemy_battler.size != 0 
  
    #================
    @cp_battle.stop = true
    start_main
    #================
   
   
    
   end
 
 end 
 
 
end#class

 


#=================================================
#★战斗图处理的类
#=================================================

class Sprite_Battler < Sprite_Base
 
    
  def setup_new_effect
    if @battler.white_flash
      @effect_type = WHITEN
      @effect_duration = 16
      @battler.white_flash = false
    end
  
    if @battler.blink
      @effect_type = BLINK
      @effect_duration = 20
      @battler.blink = false
    end
    if not @battler_visible and @battler.exist?
      @effect_type = APPEAR
      @effect_duration = 16
      @battler_visible = true
    end
    #=========================================================================
   
   
    if @battler.damage_pop and not (@battler.collapse or @battler.hidden)
      if @battler.damage != nil
        s_1 = @battler.damage > 0 ? 0 : 1
        @battler.damage = @battler.damage > 0 ? -@battler.damage : @battler.damage
      end 
      
      damage(@battler.damage,@battler.critical,s_1) if @battler.damage != 0 and @battler.damage != nil
      damage(@battler.hp_damage,@battler.critical,0) if @battler.hp_damage != 0
      damage(@battler.mp_damage,@battler.critical,1) if @battler.mp_damage != 0
      damage("失误",@battler.critical) if @battler.missed
      damage("MISS",@battler.critical) if @battler.evaded
      damage(@battler.slip_damage - @battler.auto_damage,@battler.critical) if @battler.slip_damage != 0 or @battler.auto_damage != 0
      @battler.damage = nil
      @battler.slip_damage = 0
      @battler.auto_damage = 0
      @battler.damage_pop = false
    end
    #=========================================================================
    if @battler_visible and @battler.hidden
      @effect_type = DISAPPEAR
      @effect_duration = 32
      @battler_visible = false
    end
    if @battler.collapse and self.opacity != 0
      @effect_type = COLLAPSE
      @effect_duration = 48
      @battler.collapse = false
      @battler_visible = false
    end
    if @battler.animation_id != 0
      animation = $data_animations[@battler.animation_id]
      mirror = @battler.animation_mirror
      start_animation(animation, mirror)
      @battler.animation_id = 0
    end
   
     
  end
 
end#class 



关键字:RMVX 战斗 RTAB

发布日期:2008-8-7 18:44:17 点击量:1


 上一篇:事件以某点为中心随机移动
 下一篇:没有下一条记录
关于我们
支援本站
友情连接
站点目录
站内搜索



WWW.66RPG.COM,2005-2013 ^o^

备案序号:京ICP备05035415号



 
Web www.66rpg.com bbs.66rpg.com