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

Project1

 找回密码
 注册会员
搜索
查看: 1348|回复: 2
打印 上一主题 下一主题

[已经解决] 新手改梦幻群侠传问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
230
在线时间
1 小时
注册时间
2009-11-12
帖子
4
跳转到指定楼层
1
发表于 2009-12-8 17:51:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本人新手!想模仿做个梦幻相识的游戏碍于没技术就拿老关的游戏开刀了!一直为实现45度战斗与人物怪兽全动画没有办法!就用老关的代码
#==============================================================================
# ■ Scene_Battle (分割定义 1)
#------------------------------------------------------------------------------
#  处理战斗画面的类。
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 初始化战斗用的各种暂时数据
    #$game_party.actors.push(2)
    $game_temp.in_battle = true
    $game_temp.battle_turn = 0
    $game_temp.battle_event_flags.clear
    $game_temp.battle_abort = false
    $game_temp.battle_main_phase = false
    $game_temp.battleback_name = $game_map.battleback_name
    $game_temp.forcing_battler = nil
    # 初始化战斗用事件解释器
    $game_system.battle_interpreter.setup(nil, 0)
    # 准备队伍
    @troop_id = $game_temp.battle_troop_id
    $game_troop.setup(@troop_id)
    kds_push_baby
    chu
    for i in 0..$game_party.actors.size-1

      if $game_party.actors.dead? == false
      $game_party.actors.battler_name = $game_party.actors.battler_name.split(/★/)[0]
      $game_party.actors.s_x = $game_party.actors.screen_x
      $game_party.actors.s_y = $game_party.actors.screen_y
      $game_party.actors.s_z = $game_party.actors.screen_z
      end
      $game_party.actors.baohu_x = $game_party.actors.s_x
      $game_party.actors.baohu_y = $game_party.actors.s_y
      $game_party.actors.baohu_z = $game_party.actors.s_z

    end

   
    # 生成角色命令窗口
    s1 = $data_system.words.attack
    s2 = $data_system.words.skill
    s3 = $data_system.words.guard
    s4 = $data_system.words.item
    @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
    @actor_command_window.y = 160
    @actor_command_window.back_opacity = 160
    @actor_command_window.active = false
    @actor_command_window.visible = false
    # 生成其它窗口
    @party_command_window = Window_PartyCommand.new
    @help_window = Window_Help.new
    @help_window.back_opacity = 160
    @help_window.visible = false
    @status_window = Window_BattleStatus.new
    @message_window = Window_Message.new
    # 生成活动块
    @spriteset = Spriteset_Battle.new
    # 初始化等待计数
    @wait_count = 0
    # 执行过渡
    if $data_system.battle_transition == ""
      Graphics.transition(20)
    else
      Graphics.transition(40, "Graphics/Transitions/" +
        $data_system.battle_transition)
    end
    # 开始自由战斗回合
    start_phase1
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 刷新地图
    $game_map.refresh
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @actor_command_window.dispose
    @actor2_command_window.dispose
    @party_command_window.dispose
    @help_window.dispose
    @status_window.dispose
    @message_window.dispose
    if @skill_window != nil
      @skill_window.dispose
    end
    if @item_window != nil
      @item_window.dispose
    end
    if @result_window != nil
      @result_window.dispose
    end
    # 释放活动块
    @spriteset.dispose
    # 标题画面切换中的情况
    if $scene.is_a?(Scene_Title)
      # 淡入淡出画面
      Graphics.transition
      Graphics.freeze
    end
    # 战斗测试或者游戏结束以外的画面切换中的情况
    if $BTEST and not $scene.is_a?(Scene_Gameover)
      $scene = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● 胜负判定
  #--------------------------------------------------------------------------
  def judge
    # 全灭判定是真、并且同伴人数为 0 的情况下
    if $game_party.all_dead? or $game_party.actors.size == 0
      # 允许失败的情况下
      if $game_temp.battle_can_lose
        # 还原为战斗开始前的 BGM
        $game_system.bgm_play($game_temp.map_bgm)
        # 战斗结束
        battle_end(2)
        # 返回 true
        return true
      end
      # 设置游戏结束标志
      $game_temp.gameover = true
      # 返回 true
      return true
    end
    # 如果存在任意 1 个敌人就返回 false
    for enemy in $game_troop.enemies
      if enemy.exist?
        return false
      end
    end
    # 开始结束战斗回合 (胜利)
    start_phase5
    # 返回 true
    return true
  end
  #--------------------------------------------------------------------------
  # ● 战斗结束
  #     result : 結果 (0:胜利 1:失败 2:逃跑)
  #--------------------------------------------------------------------------
  def battle_end(result)
    # 清除战斗中标志
    $game_temp.in_battle = false
    # 清除全体同伴的行动
    $game_temp.in_battle = false
    # 清除全体同伴的行动
    $game_party.clear_actions
    # 解除战斗用状态
    for actor in $game_party.actors
      actor.remove_states_battle
      actor.hp += (actor.maxhp-actor.hp)/4
       actor.sp += (actor.maxsp-actor.sp)/4
       $fanhui_dx = $game_party.actors
    #保护系统-保护效果显示-2

    end
    for i in 21..133
      $game_actors.recover_all
    end
   
   
   
    # 清除敌人
    $game_troop.enemies.clear
    # 调用战斗返回调用
    if $game_temp.battle_proc != nil
      $game_temp.battle_proc.call(result)
      $game_temp.battle_proc = nil
    end
    # 切换到地图画面
    for i in 0..$game_party.actors.size-1
      $game_party.actors.baohu.clear
    end
    kds_delete_baby
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  # ● 设置战斗事件
  #--------------------------------------------------------------------------
  def setup_battle_event
    # 正在执行战斗事件的情况下
    if $game_system.battle_interpreter.running?
      return
    end
    # 搜索全部页的战斗事件
    for index in 0...$data_troops[@troop_id].pages.size
      # 获取事件页
      page = $data_troops[@troop_id].pages[index]
      # 事件条件可以参考 c
      c = page.condition
      # 没有指定任何条件的情况下转到下一页
      unless c.turn_valid or c.enemy_valid or
             c.actor_valid or c.switch_valid
        next
      end
      # 执行完毕的情况下转到下一页
      if $game_temp.battle_event_flags[index]
        next
      end
      # 确认回合条件
      if c.turn_valid
        n = $game_temp.battle_turn
        a = c.turn_a
        b = c.turn_b
        if (b == 0 and n != a) or
           (b > 0 and (n < 1 or n < a or n % b != a % b))
          next
        end
      end
      # 确认敌人条件
      if c.enemy_valid
        enemy = $game_troop.enemies[c.enemy_index]
        if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
          next
        end
      end
      # 确认角色条件
      if c.actor_valid
        actor = $game_actors[c.actor_id]
        if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
          next
        end
      end
      # 确认开关条件
      if c.switch_valid
        if $game_switches[c.switch_id] == false
          next
        end
      end
      # 设置事件
      $game_system.battle_interpreter.setup(page.list, 0)
      # 本页的范围是 [战斗] 或 [回合] 的情况下
      if page.span <= 1
        # 设置执行结束标志
        $game_temp.battle_event_flags[index] = true
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 执行战斗事件中的情况下
    if $status_shu == 0
        @status_window.refresh
       $status_shu = 1
    end
    #保护系统-保护效果显示-2
    if $fanhui_dx != nil
     for i in 0..$fanhui_dx.size-1
      if $fanhui_dx.baohu_donghua2 == 0
         @p_1 = $fanhui_dx.baohu_dx
         
       if $fanhui_dx.bug != 1
        if @active_battler.is_a?(Game_Enemy)
         $fanhui_dx[@p_1].s_x += ($fanhui_dx[@p_1].baohu_x - $fanhui_dx[@p_1].s_x)/3 + 3
        else
         $fanhui_dx[@p_1].s_x += ($fanhui_dx[@p_1].baohu_x - $fanhui_dx[@p_1].s_x)/3 - 3
        end
         $fanhui_dx[@p_1].s_y += ($fanhui_dx[@p_1].baohu_y - $fanhui_dx[@p_1].s_y)/3
       end  
         
         $fanhui_dx.baohu_time2 += 1

         if $fanhui_dx.baohu_time2 == 3
          $fanhui_dx.baohu_donghua2 = nil
        if $fanhui_dx.bug != 1
          $fanhui_dx[@p_1].s_x =  $fanhui_dx[@p_1].baohu_x
          $fanhui_dx[@p_1].s_y =  $fanhui_dx[@p_1].baohu_y
          $fanhui_dx[@p_1].s_z =  $fanhui_dx[@p_1].baohu_z
        end
          if $fanhui_dx[@p_1].damage != nil
             $fanhui_dx[@p_1].damage_pop = true
          end
           @status_window.refresh
          $fanhui_dx.baohu_dx = nil
          @jiance = nil #检测第二保护对象存在与否 ★2
          for i in 0..$fanhui_dx.size-1
            if $fanhui_dx.baohu_donghua2b == 0
               @jiance = 1
               break
            end  
          end
          if @jiance == nil
           if $kongzhi == 0
             $duixiang = nil
           end
           $fanhui_dx = nil
           break
          end
          break
         end
      end
      if $fanhui_dx.baohu_donghua2b == 0
         @p_1b = $fanhui_dx.baohu_dxb
       if $fanhui_dx.bug != 1
        if @active_battler.is_a?(Game_Enemy)
         $fanhui_dx[@p_1b].s_x += ($fanhui_dx[@p_1b].baohu_x - $fanhui_dx[@p_1b].s_x)/3 + 3
        else
         $fanhui_dx[@p_1b].s_x += ($fanhui_dx[@p_1b].baohu_x - $fanhui_dx[@p_1b].s_x)/3 - 3
        end
         $fanhui_dx[@p_1b].s_y += ($fanhui_dx[@p_1b].baohu_y - $fanhui_dx[@p_1b].s_y)/3
       end
         $fanhui_dx.baohu_time2b += 1
         if $fanhui_dx.baohu_time2b == 3
          $fanhui_dx.baohu_donghua2b = nil
        if $fanhui_dx.bug != 1  
          $fanhui_dx[@p_1b].s_x =  $fanhui_dx[@p_1b].baohu_x
          $fanhui_dx[@p_1b].s_y =  $fanhui_dx[@p_1b].baohu_y
          $fanhui_dx[@p_1b].s_z =  $fanhui_dx[@p_1b].baohu_z
        end  
          if $fanhui_dx[@p_1b].damage != nil
             $fanhui_dx[@p_1b].damage_pop = true
          end
           @status_window.refresh
          $fanhui_dx.baohu_dxb = nil
          @jiance = nil
          for i in 0..$fanhui_dx.size-1
            if $fanhui_dx.baohu_donghua2 == 0
               @jiance = 1
               break
            end  
          end
          if @jiance == nil
           if $kongzhi == 0
             $duixiang = nil
           end
           $fanhui_dx = nil
           break
          end
         end
      end
     end
    end
   
   
   
   
   
  if @active_battler.is_a?(Game_Enemy)
    $duixiang = $game_party.actors
  else
    $duixiang = nil
  end
  
  
if $duixiang != nil
    for i in 0..$duixiang.size-1
      if $duixiang.baohu_donghua1 == 0
        
         p_1 = $duixiang.baohu_dx
         $duixiang[p_1].s_z = $duixiang.s_z + 10
        if @active_battler.is_a?(Game_Enemy)
         $duixiang[p_1].s_x += ($duixiang.s_x - $duixiang[p_1].s_x)/3 - 3
        else
         $duixiang[p_1].s_x += ($duixiang.s_x - $duixiang[p_1].s_x)/3 + 3
        end
         
         $duixiang[p_1].s_y += ($duixiang.s_y - $duixiang[p_1].s_y)/3
         $duixiang.baohu_time1 += 1
        if $duixiang.baohu_time1 == 3
           $duixiang.baohu_donghua1 = nil
           $duixiang[p_1].s_z = $duixiang.s_z + 10
        if @active_battler.is_a?(Game_Enemy)
           $duixiang[p_1].s_x = $duixiang.s_x - 10
        else
           $duixiang[p_1].s_x = $duixiang.s_x + 10
        end
           $duixiang[p_1].s_y = $duixiang.s_y
        end
      end

      if $duixiang.baohu_donghua1b == 0
         p_1 = $duixiang.baohu_dxb
         $duixiang[p_1].s_z = $duixiang.s_z + 10
        if @active_battler.is_a?(Game_Enemy)
         $duixiang[p_1].s_x += ($duixiang.s_x - $duixiang[p_1].s_x)/3 - 3
        else
         $duixiang[p_1].s_x += ($duixiang.s_x - $duixiang[p_1].s_x)/3 + 3
        end
         $duixiang[p_1].s_y += ($duixiang.s_y - $duixiang[p_1].s_y)/3
         $duixiang.baohu_time1b += 1
        if $duixiang.baohu_time1b == 3
           $duixiang.baohu_donghua1b = nil
           $duixiang[p_1].s_z = $duixiang.s_z + 10
        if @active_battler.is_a?(Game_Enemy)
           $duixiang[p_1].s_x = $duixiang.s_x - 10
        else
           $duixiang[p_1].s_x = $duixiang.s_x + 10
        end
           $duixiang[p_1].s_y = $duixiang.s_y
        end
      end
    end
end
   
   
   
   
   
   
    if $game_system.battle_interpreter.running?
      # 刷新解释器
      $game_system.battle_interpreter.update
      # 强制行动的战斗者不存在的情况下
      if $game_temp.forcing_battler == nil
        # 执行战斗事件结束的情况下
        unless $game_system.battle_interpreter.running?
          # 继续战斗的情况下、再执行战斗事件的设置
          unless judge
            setup_battle_event
          end
        end
        # 如果不是结束战斗回合的情况下
        #if @phase != 5
          # 刷新状态窗口
          #@status_window.refresh
        #end
      end
    end
    # 系统 (计时器)、刷新画面
    $game_system.update
    $game_screen.update
    # 计时器为 0 的情况下
    if $game_system.timer_working and $game_system.timer == 0
      # 中断战斗
      $game_temp.battle_abort = true
    end
    # 刷新窗口
    @help_window.update
    @party_command_window.update
    @actor_command_window.update
    @actor2_command_window.update
    @status_window.update
    @message_window.update
    # 刷新活动块
    @spriteset.update
    # 处理过渡中的情况下
    if $game_temp.transition_processing
      # 清除处理过渡中标志
      $game_temp.transition_processing = false
      # 执行过渡
      if $game_temp.transition_name == ""
        Graphics.transition(20)
      else
        Graphics.transition(40, "Graphics/Transitions/" +
          $game_temp.transition_name)
      end
    end
    # 显示信息窗口中的情况下
    if $game_temp.message_window_showing
      return
    end
    # 显示效果中的情况下
   if @spriteset.effect?
     if @phase == 4
       if ![4,3].include?(@phase4_step)
         return
        end
     else     
       return
      end
   end
   if @spriteset.damage_effect?
     if @phase == 4
       #if ![4,3,6].include?(@phase4_step)
         return
        #end
     else
       return
     end
   end
    # 游戏结束的情况下
    if $game_temp.gameover
      # 切换到游戏结束画面
      $scene = Scene_Gameover.new
      return
    end
    # 返回标题画面的情况下
    if $game_temp.to_title
      # 切换到标题画面
      $scene = Scene_Title.new
      return
    end
    # 中断战斗的情况下
    if $game_temp.battle_abort
      # 还原为战斗前的 BGM
      $game_system.bgm_play($game_temp.map_bgm)
      # 战斗结束
      battle_end(1)
      return
    end
    # 等待中的情况下
    if @wait_count > 0
      # 减少等待计数
      @wait_count -= 1
      return
    end
    # 强制行动的角色存在、
    # 并且战斗事件正在执行的情况下
    if $game_temp.forcing_battler == nil and
       $game_system.battle_interpreter.running?
      return
    end
    # 回合分支
    case @phase
    when 1  # 自由战斗回合
      update_phase1
    when 2  # 同伴命令回合
      update_phase2
    when 3  # 角色命令回合
      update_phase3
    when 4  # 主回合
      update_phase4
    when 5  # 战斗结束回合
      update_phase5
    end
  end
end

可运行时出现 求各位高手帮忙解决啊谢谢了
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-11-6
帖子
30
2
发表于 2009-12-8 17:53:26 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
14 小时
注册时间
2010-7-17
帖子
98
3
发表于 2010-7-19 13:37:26 | 只看该作者
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-27 23:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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