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

Project1

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

[已经解决] 怎么样在战斗之后切换回地图BGM

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
31 小时
注册时间
2010-8-7
帖子
55
跳转到指定楼层
1
发表于 2010-10-16 17:50:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
是要接上次BGM播放的位置开始的。。
还有如何让战斗BGM和地图BGM一致,不会从头开始播放呢?就是地图BGM开始播放,战斗时不切换仍然是地图BGM

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2009-8-30
帖子
465
2
发表于 2010-10-16 18:01:13 | 只看该作者
用地图BGS替换地图BGM
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
31 小时
注册时间
2010-8-7
帖子
55
3
 楼主| 发表于 2010-10-16 18:05:39 | 只看该作者
LS帮大忙了。。可是第一个问题该怎么办
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
63 小时
注册时间
2008-11-20
帖子
45
4
发表于 2010-10-16 21:03:38 | 只看该作者
以前某大曾经写过一个脚本……我刚才搜索不到原文了……他名字我也忘记了= =|(被作者打飞)
这里……给你吧。向我忘记的的本脚本原作者致敬……
  1. unless defined? SNSER
  2.   
  3. module SNSER
  4.   
  5.   #--------------------------------------------------------------------------
  6.   # ● 设置路径
  7.   #--------------------------------------------------------------------------
  8.   PATH_BGM        = "Audio/BGM/"
  9.   
  10.   #--------------------------------------------------------------------------
  11.   # ● API函数声明
  12.   #--------------------------------------------------------------------------
  13.   Channel_Pause     = Win32API.new("RmSound","Channel_Pause","l","v")
  14.   Channel_Resume    = Win32API.new("RmSound","Channel_Resume","l","v")
  15.   Channel_Stop      = Win32API.new("RmSound","Channel_Stop","l","v")
  16.   Channel_StopAll   = Win32API.new("RmSound","Channel_StopAll","v","v")
  17.   Midi_Play         = Win32API.new("RmSound","Midi_Play","pi","l")
  18.   
  19.   @@pause = false
  20.   
  21.   #--------------------------------------------------------------------------
  22.   # ● 模块函数
  23.   #--------------------------------------------------------------------------
  24.   module_function

  25.   def is_pause(pause)
  26.     @@is_pause = pause
  27.   end  
  28.   
  29.   def bgm_pause?
  30.     return $game_system.battle_bgm_pause
  31.   end  
  32.   
  33.   #--------------------------------------------------------------------------
  34.   # ● 暂停Channel
  35.   #     hChannel      :要暂停的Channel句柄。
  36.   #--------------------------------------------------------------------------
  37.   def chn_pause(hChannel)
  38.     Channel_Pause.call(hChannel)
  39.   end
  40.   
  41.   #--------------------------------------------------------------------------
  42.   # ● 恢复Channel
  43.   #     hChannel      :要恢复的Channel句柄。
  44.   #--------------------------------------------------------------------------
  45.   def chn_resume(hChannel)
  46.     Channel_Resume.call(hChannel)
  47.   end
  48.   
  49.   #--------------------------------------------------------------------------
  50.   # ● 停止Channel
  51.   #     hChannel      :要停止的Channel句柄。
  52.   #--------------------------------------------------------------------------
  53.   def chn_stop(hChannel)
  54.     Channel_Stop.call(hChannel)
  55.   end
  56.   
  57.   #--------------------------------------------------------------------------
  58.   # ● 暂停所有Channel
  59.   #--------------------------------------------------------------------------
  60.   def chn_pause_all
  61.     Channel_PauseAll.call
  62.   end
  63.   
  64.   #--------------------------------------------------------------------------
  65.   # ● 恢复所有Channel
  66.   #--------------------------------------------------------------------------
  67.   def chn_resume_all
  68.     Channel_ResumeAll.call
  69.   end
  70.   
  71.   #--------------------------------------------------------------------------
  72.   # ● 停止所有Channel
  73.   #--------------------------------------------------------------------------
  74.   def chn_stop_all
  75.     Channel_StopAll.call
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ※ Midi
  79.   #--------------------------------------------------------------------------
  80.   
  81.   #--------------------------------------------------------------------------
  82.   # ● 播放Midi
  83.   #     filename      :要加载的midi文件名
  84.   #     loop          :如果参数为 0,那么midi播放一次,如果为 1,则一直循环直
  85.   #                     到播放的 Channel 停止。
  86.   #
  87.   #     return        :返回一个Channel的句柄 hChannel,可以用该句柄来控制 。
  88.   #                     失败返回 0。
  89.   #--------------------------------------------------------------------------
  90.   def midi_play(filename,loop=1)
  91.     if filename != ""
  92.       return Midi_Play.call(filename,loop)
  93.     end
  94.   end
  95.   
  96. end

  97. end


  98. class << Audio
  99.   @@battle_channel = nil
  100.   @@map_channel = nil
  101.   #--------------------------------------------------------------------------
  102.   # ※ BGM
  103.   #--------------------------------------------------------------------------
  104.   def bgm_play(filename, volume = 80, pitch = 100)
  105.     if $game_system.map_bgm_playing == true
  106.       if @@map_channel != nil
  107.         SNSER.chn_stop(@@map_channel)
  108.       end
  109.       @@map_channel = SNSER.midi_play(filename+ ".mid")
  110.     end
  111.     if $game_system.battle_bgm_playing == true
  112.       if @@battle_channel != nil
  113.         SNSER.chn_stop(@@battle_channel)
  114.       end
  115.       @@battle_channel = SNSER.midi_play(filename+ ".mid")
  116.     end
  117.   end
  118.   
  119.   def bgm_stop
  120.     if $game_system.map_bgm_playing == false
  121.       if @@map_channel.nil?
  122.   
  123.       else
  124.         if $game_system.battle_bgm_pause == false
  125.           SNSER.chn_stop(@@map_channel)
  126.           @@map_channel = nil
  127.         end
  128.       end
  129.     end
  130.     if $game_system.battle_bgm_playing == false
  131.       if @@battle_channel.nil?
  132.   
  133.       else
  134.         SNSER.chn_stop(@@battle_channel)
  135.         @@battle_channel = nil
  136.       end
  137.     end
  138.   end
  139.   
  140.   def bgm_pause
  141.    
  142.     if $game_system.battle_bgm_pause == true
  143.       if @@map_channel.nil?
  144.   
  145.       else
  146.         SNSER.chn_pause(@@map_channel)
  147.       end
  148.     end  
  149.       
  150.   end  
  151.   
  152.   def bgm_resume
  153.     if $game_system.battle_bgm_pause == false
  154.       if @@map_channel.nil?
  155.       
  156.       else
  157.         SNSER.chn_resume(@@map_channel)
  158.       end
  159.     end
  160.   end  
  161.   
  162. end



  163. class Game_System
  164.   attr_accessor    :map_bgm_playing
  165.   attr_accessor    :battle_bgm_playing
  166.   attr_accessor    :battle_bgm_pause
  167.   
  168.   alias ori_initialize initialize
  169.   def initialize
  170.     @battle_bgm_playing = false
  171.     @map_bgm_playing = false
  172.     @battle_bgm_pause = false
  173.     ori_initialize
  174.   end

  175.   #--------------------------------------------------------------------------
  176.   # ● 获取战斗 BGM
  177.   #--------------------------------------------------------------------------
  178.   def battle_bgm
  179.     if @battle_bgm == nil
  180.       return $data_system.battle_bgm
  181.     else
  182.       return @battle_bgm
  183.     end
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ● 设置战斗 BGM
  187.   #     battle_bgm : 新的战斗 BGM
  188.   #--------------------------------------------------------------------------
  189.   def battle_bgm=(battle_bgm)
  190.     @battle_bgm = battle_bgm
  191.   end
  192.   
  193.   #--------------------------------------------------------------------------
  194.   # ● 演奏 BGM
  195.   #     bgm : 演奏的 BGM
  196.   #--------------------------------------------------------------------------
  197.   def bgm_play(bgm)
  198.     @playing_bgm = bgm
  199.     if bgm != nil and bgm.name != ""
  200.       Audio.bgm_play("Audio/BGM/" + bgm.name, bgm.volume, bgm.pitch)
  201.     else
  202.       Audio.bgm_stop
  203.     end
  204.     Graphics.frame_reset
  205.   end

  206. end


  207. class Game_Map
  208.   #--------------------------------------------------------------------------
  209.   # ● BGM / BGS 自动切换
  210.   #--------------------------------------------------------------------------
  211.   def autoplay
  212.     if @map.autoplay_bgm
  213.       if SNSER.bgm_pause?
  214.         Audio.bgm_resume
  215.       else  
  216.         $game_system.map_bgm_playing = true
  217.         $game_system.bgm_play(@map.bgm)
  218.       end
  219.     end
  220.     if @map.autoplay_bgs
  221.       $game_system.bgs_play(@map.bgs)
  222.     end
  223.   end
  224. end



  225. class Scene_Map
  226.   #--------------------------------------------------------------------------
  227.   # ● 调用战斗
  228.   #--------------------------------------------------------------------------
  229.   def call_battle
  230.     # 清除战斗调用标志
  231.     $game_temp.battle_calling = false
  232.     # 清除菜单调用标志
  233.     $game_temp.menu_calling = false
  234.     $game_temp.menu_beep = false
  235.     # 生成遇敌计数
  236.     $game_player.make_encounter_count
  237.     # 记忆地图 BGM 、停止 BGM
  238.     #$game_temp.map_bgm = $game_system.playing_bgm
  239.     #$game_system.bgm_stop
  240.    
  241.    
  242.     # 记忆地图 BGM 停止 BGM
  243.     $game_system.map_bgm_playing = false
  244.    
  245.     $game_system.battle_bgm_pause = true
  246.     Audio.bgm_pause
  247.     $game_system.map_bgm_playing = false
  248.     $game_system.battle_bgm_playing = true
  249.     # 演奏战斗开始 SE
  250.     $game_system.se_play($data_system.battle_start_se)
  251.     # 演奏战斗 BGM
  252.     $game_system.bgm_play($game_system.battle_bgm)
  253.    
  254.    
  255.     # 矫正主角姿势
  256.     $game_player.straighten
  257.     # 切换到战斗画面
  258.     $scene = Scene_Battle.new
  259.   end

  260. end

  261. class Scene_Battle
  262.   #--------------------------------------------------------------------------
  263.   # ● 胜负判定
  264.   #--------------------------------------------------------------------------
  265.   def judge
  266.     # 全灭判定是真、并且同伴人数为 0 的情况下
  267.     if $game_party.all_dead? or $game_party.actors.size == 0
  268.       # 允许失败的情况下
  269.       if $game_temp.battle_can_lose
  270.         # 还原为战斗开始前的 BGM
  271.         #$game_system.bgm_play($game_temp.map_bgm)
  272.         $game_system.battle_bgm_playing = false
  273.         Audio.bgm_stop
  274.         $game_system.battle_bgm_pause = false
  275.         Audio.bgm_resume
  276.         # 战斗结束
  277.         battle_end(2)
  278.         # 返回 true
  279.         return true
  280.       end
  281.       # 设置游戏结束标志
  282.       $game_temp.gameover = true
  283.       # 返回 true
  284.       return true
  285.     end
  286.     # 如果存在任意 1 个敌人就返回 false
  287.     for enemy in $game_troop.enemies
  288.       if enemy.exist?
  289.         return false
  290.       end
  291.     end
  292.     # 开始结束战斗回合 (胜利)
  293.     start_phase5
  294.     # 返回 true
  295.     return true
  296.   end

  297.   #--------------------------------------------------------------------------
  298.   # ● 刷新画面
  299.   #--------------------------------------------------------------------------
  300.   def update
  301.     # 执行战斗事件中的情况下
  302.     if $game_system.battle_interpreter.running?
  303.       # 刷新解释器
  304.       $game_system.battle_interpreter.update
  305.       # 强制行动的战斗者不存在的情况下
  306.       if $game_temp.forcing_battler == nil
  307.         # 执行战斗事件结束的情况下
  308.         unless $game_system.battle_interpreter.running?
  309.           # 继续战斗的情况下、再执行战斗事件的设置
  310.           unless judge
  311.             setup_battle_event
  312.           end
  313.         end
  314.         # 如果不是结束战斗回合的情况下
  315.         if @phase != 5
  316.           # 刷新状态窗口
  317.           @status_window.refresh
  318.         end
  319.       end
  320.     end
  321.     # 系统 (计时器)、刷新画面
  322.     $game_system.update
  323.     $game_screen.update
  324.     # 计时器为 0 的情况下
  325.     if $game_system.timer_working and $game_system.timer == 0
  326.       # 中断战斗
  327.       $game_temp.battle_abort = true
  328.     end
  329.     # 刷新窗口
  330.     @help_window.update
  331.     @party_command_window.update
  332.     @actor_command_window.update
  333.     @status_window.update
  334.     @message_window.update
  335.     # 刷新活动块
  336.     @spriteset.update
  337.     # 处理过渡中的情况下
  338.     if $game_temp.transition_processing
  339.       # 清除处理过渡中标志
  340.       $game_temp.transition_processing = false
  341.       # 执行过渡
  342.       if $game_temp.transition_name == ""
  343.         Graphics.transition(20)
  344.       else
  345.         Graphics.transition(40, "Graphics/Transitions/" +
  346.           $game_temp.transition_name)
  347.       end
  348.     end
  349.     # 显示信息窗口中的情况下
  350.     if $game_temp.message_window_showing
  351.       return
  352.     end
  353.     # 显示效果中的情况下
  354.     if @spriteset.effect?
  355.       return
  356.     end
  357.     # 游戏结束的情况下
  358.     if $game_temp.gameover
  359.       # 切换到游戏结束画面
  360.       $scene = Scene_Gameover.new
  361.       return
  362.     end
  363.     # 返回标题画面的情况下
  364.     if $game_temp.to_title
  365.       # 切换到标题画面
  366.       $scene = Scene_Title.new
  367.       return
  368.     end
  369.     # 中断战斗的情况下
  370.     if $game_temp.battle_abort
  371.       # 还原为战斗前的 BGM
  372.       # $game_system.bgm_play($game_temp.map_bgm)
  373.       $game_system.battle_bgm_playing = false
  374.       Audio.bgm_stop
  375.       $game_system.battle_bgm_pause = false
  376.       Audio.bgm_resume
  377.       # 战斗结束
  378.       battle_end(1)
  379.       return
  380.     end
  381.     # 等待中的情况下
  382.     if @wait_count > 0
  383.       # 减少等待计数
  384.       @wait_count -= 1
  385.       return
  386.     end
  387.     # 强制行动的角色存在、
  388.     # 并且战斗事件正在执行的情况下
  389.     if $game_temp.forcing_battler == nil and
  390.        $game_system.battle_interpreter.running?
  391.       return
  392.     end
  393.     # 回合分支
  394.     case @phase
  395.     when 1  # 自由战斗回合
  396.       update_phase1
  397.     when 2  # 同伴命令回合
  398.       update_phase2
  399.     when 3  # 角色命令回合
  400.       update_phase3
  401.     when 4  # 主回合
  402.       update_phase4
  403.     when 5  # 战斗结束回合
  404.       update_phase5
  405.     end
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ● 画面更新 (同伴指令回合 : 逃跑)
  409.   #--------------------------------------------------------------------------
  410.   def update_phase2_escape
  411.     # 计算敌人速度的平均值
  412.     enemies_agi = 0
  413.     enemies_number = 0
  414.     for enemy in $game_troop.enemies
  415.       if enemy.exist?
  416.         enemies_agi += enemy.agi
  417.         enemies_number += 1
  418.       end
  419.     end
  420.     if enemies_number > 0
  421.       enemies_agi /= enemies_number
  422.     end
  423.     # 计算角色速度的平均值
  424.     actors_agi = 0
  425.     actors_number = 0
  426.     for actor in $game_party.actors
  427.       if actor.exist?
  428.         actors_agi += actor.agi
  429.         actors_number += 1
  430.       end
  431.     end
  432.     if actors_number > 0
  433.       actors_agi /= actors_number
  434.     end
  435.     # 逃跑成功判定
  436.     success = rand(100) < 50 * actors_agi / enemies_agi
  437.     # 成功逃跑的情况下
  438.     if success
  439.       # 演奏逃跑 SE
  440.       $game_system.se_play($data_system.escape_se)
  441.       # 还原为战斗开始前的 BGM
  442.       # $game_system.bgm_play($game_temp.map_bgm)
  443.       $game_system.battle_bgm_playing = false
  444.        Audio.bgm_stop
  445.        $game_system.battle_bgm_pause = false
  446.        Audio.bgm_resume
  447.       # 战斗结束
  448.       battle_end(1)
  449.     # 逃跑失败的情况下
  450.     else
  451.       # 清除全体同伴的行动
  452.       $game_party.clear_actions
  453.       # 开始主回合
  454.       start_phase4
  455.     end
  456.   end
  457.   
  458. #--------------------------------------------------------------------------
  459.   # ● 开始结束战斗回合
  460.   #--------------------------------------------------------------------------
  461.   def start_phase5
  462.     # 转移到回合 5
  463.     @phase = 5
  464.     # 演奏战斗结束 ME
  465.     $game_system.me_play($game_system.battle_end_me)
  466.     # 还原为战斗开始前的 BGM
  467.     # $game_system.bgm_play($game_temp.map_bgm)
  468.     $game_system.battle_bgm_playing = false
  469.     Audio.bgm_stop
  470.     $game_system.battle_bgm_pause = false
  471.     Audio.bgm_resume
  472.     # 初始化 EXP、金钱、宝物
  473.     exp = 0
  474.     gold = 0
  475.     treasures = []
  476.     # 循环
  477.     for enemy in $game_troop.enemies
  478.       # 敌人不是隐藏状态的情况下
  479.       unless enemy.hidden
  480.         # 获得 EXP、增加金钱
  481.         exp += enemy.exp
  482.         gold += enemy.gold
  483.         # 出现宝物判定
  484.         if rand(100) < enemy.treasure_prob
  485.           if enemy.item_id > 0
  486.             treasures.push($data_items[enemy.item_id])
  487.           end
  488.           if enemy.weapon_id > 0
  489.             treasures.push($data_weapons[enemy.weapon_id])
  490.           end
  491.           if enemy.armor_id > 0
  492.             treasures.push($data_armors[enemy.armor_id])
  493.           end
  494.         end
  495.       end
  496.     end
  497.     # 限制宝物数为 6 个
  498.     treasures = treasures[0..5]
  499.     # 获得 EXP
  500.     for i in 0...$game_party.actors.size
  501.       actor = $game_party.actors[i]
  502.       if actor.cant_get_exp? == false
  503.         last_level = actor.level
  504.         actor.exp += exp
  505.         if actor.level > last_level
  506.           @status_window.level_up(i)
  507.         end
  508.       end
  509.     end
  510.     # 获得金钱
  511.     $game_party.gain_gold(gold)
  512.     # 获得宝物
  513.     for item in treasures
  514.       case item
  515.       when RPG::Item
  516.         $game_party.gain_item(item.id, 1)
  517.       when RPG::Weapon
  518.         $game_party.gain_weapon(item.id, 1)
  519.       when RPG::Armor
  520.         $game_party.gain_armor(item.id, 1)
  521.       end
  522.     end
  523.     # 生成战斗结果窗口
  524.     @result_window = Window_BattleResult.new(exp, gold, treasures)
  525.     # 设置等待计数
  526.     @phase5_wait_count = 100
  527.   end
  528. end
复制代码

评分

参与人数 1星屑 +300 收起 理由
fux2 + 300 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 04:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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