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

Project1

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

[已经解决] 怎么设置战斗时BGM不改变?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1308
在线时间
354 小时
注册时间
2009-9-14
帖子
328
跳转到指定楼层
1
发表于 2012-3-11 21:02:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
听着BGM时突然踩了个怪音乐断了多不爽啊。。
不知道大家是怎么设置的。

点评

hcm
不踩不就行了?  发表于 2012-3-12 12:18

评分

参与人数 1星屑 +2 收起 理由
R-零 + 2 此问题自行研究~

查看全部评分

Lv1.梦旅人

梦石
0
星屑
44
在线时间
317 小时
注册时间
2011-2-9
帖子
1129
2
发表于 2012-3-11 23:05:47 | 只看该作者
能不能把战斗Bgm改为无。
反正是坏人一个
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2127
在线时间
437 小时
注册时间
2010-11-22
帖子
413
3
发表于 2012-3-12 11:25:25 | 只看该作者
不知道这个教程有用吗?
这本是一个脚本,但如果单纯地放出来,冲突就太明显了。我们来看看怎样通过修改使得战斗的时候播放地图的背景音乐:

首先,在Game_System中添加如下内容:[...]表示原有内容不用动

class Game_System
# ----------------------------------------
[...]
attr_accessor :map_bgm_in_battle
[...]
@map_bgm_in_battle = false


然后是Scene_Map

class Scene_Map
  def call_battle
  [...]
    $game_player.make_encounter_count
    if $game_system.map_bgm_in_battle == false
      $game_temp.map_bgm = $game_system.playing_bgm
      $game_system.bgm_stop
    end
    $game_system.se_play($data_system.battle_start_se)
    if $game_system.map_bgm_in_battle == false
      $game_system.bgm_play($game_system.battle_bgm)
    end
    $game_player.straighten
  [...]
end


然后是Scene_Battle



class Scene_Battle
   def judge
   [...]
      if $game_temp.battle_can_lose
        if $game_system.map_bgm_in_battle == false
          $game_system.bgm_play($game_temp.map_bgm)
        end
        battle_end(2)
    [...]
end
# ----------------------------
   def update
   [...]
    if $game_temp.battle_abort
      if $game_system.map_bgm_in_battle == false
        $game_system.bgm_play($game_temp.map_bgm)
      end
      battle_end(1)
   [...]
end
# ----------------------------
   def update_phase2_escape
   [...]
   if success
      $game_system.se_play($data_system.escape_se)
      if $game_system.map_bgm_in_battle == false
        $game_system.bgm_play($game_temp.map_bgm)
      end
      battle_end(1)
   [...]
end
# ----------------------------
   def start_phase5
    @phase = 5
    if $game_system.map_bgm_in_battle == false
      $game_system.me_play($game_system.battle_end_me)
      $game_system.bgm_play($game_temp.map_bgm)
    end
    exp = 0
    gold = 0
    treasures = []
   [...]
end


这个脚本经过修改后是怎么运作的呢?相信对脚本稍有了解的人都能明白了:只是将原来切换音乐的地方添加了一个if条件,如果$game_system.map_bgm_in_battle == true,则就会保留地图的BGM。这种效果非常诡异,因为一般的游戏战斗的时候都会更换音乐的,没有更换的,我所知的就一个,就是我的《黑暗圣剑传说》……

这种方法可以用来控制游戏的节奏感,有兴趣的话可以尝试一下。

点评

我去,“我所知的就一个,就是我的《黑暗圣剑传说》”  发表于 2012-3-13 21:03
回复

使用道具 举报

Lv3.寻梦者

灌水局大小姐

梦石
0
星屑
3965
在线时间
1690 小时
注册时间
2012-3-10
帖子
2469
4
发表于 2012-3-16 11:30:46 | 只看该作者
  1. #==============================================================================
  2. # ■ Scene_Map
  3. #------------------------------------------------------------------------------
  4. #  处理地图画面的类。
  5. #==============================================================================

  6. class Scene_Map
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 生成活动块
  12.     @spriteset = Spriteset_Map.new
  13.     # 生成信息窗口
  14.     @message_window = Window_Message.new
  15.     # 执行过渡
  16.     Graphics.transition
  17.     # 主循环
  18.     loop do
  19.       # 刷新游戏画面
  20.       Graphics.update
  21.       # 刷新输入信息
  22.       Input.update
  23.       # 刷新画面
  24.       update
  25.       # 如果画面切换的话就中断循环
  26.       if $scene != self
  27.         break
  28.       end
  29.     end
  30.     # 准备过渡
  31.     Graphics.freeze
  32.     # 释放活动块
  33.     @spriteset.dispose
  34.     # 释放信息窗口
  35.     @message_window.dispose
  36.     # 标题画面切换中的情况下
  37.     if $scene.is_a?(Scene_Title)
  38.       # 淡入淡出画面
  39.       Graphics.transition
  40.       Graphics.freeze
  41.     end
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 刷新画面
  45.   #--------------------------------------------------------------------------
  46.   def update
  47.     # 循环
  48.     loop do
  49.       # 按照地图、实例、主角的顺序刷新
  50.       # (本更新顺序不会在的满足事件的执行条件下成为给予角色瞬间移动
  51.       #  的机会的重要因素)
  52.       $game_map.update
  53.       $game_system.map_interpreter.update
  54.       $game_player.update
  55.       # 系统 (计时器)、画面刷新
  56.       $game_system.update
  57.       $game_screen.update
  58.       # 如果主角在场所移动中就中断循环
  59.       unless $game_temp.player_transferring
  60.         break
  61.       end
  62.       # 执行场所移动
  63.       transfer_player
  64.       # 处理过渡中的情况下、中断循环
  65.       if $game_temp.transition_processing
  66.         break
  67.       end
  68.     end
  69.     # 刷新活动块
  70.     @spriteset.update
  71.     # 刷新信息窗口
  72.     @message_window.update
  73.     # 游戏结束的情况下
  74.     if $game_temp.gameover
  75.       # 切换的游戏结束画面
  76.       $scene = Scene_Gameover.new
  77.       return
  78.     end
  79.     # 返回标题画面的情况下
  80.     if $game_temp.to_title
  81.       # 切换到标题画面
  82.       $scene = Scene_Title.new
  83.       return
  84.     end
  85.     # 处理过渡中的情况下
  86.     if $game_temp.transition_processing
  87.       # 清除过渡处理中标志
  88.       $game_temp.transition_processing = false
  89.       # 执行过渡
  90.       if $game_temp.transition_name == ""
  91.         Graphics.transition(20)
  92.       else
  93.         Graphics.transition(40, "Graphics/Transitions/" +
  94.           $game_temp.transition_name)
  95.       end
  96.     end
  97.     # 显示信息窗口中的情况下
  98.     if $game_temp.message_window_showing
  99.       return
  100.     end
  101.     # 遇敌计数为 0 且、且遇敌列表不为空的情况下
  102.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  103.       # 不是在事件执行中或者禁止遇敌中
  104.       unless $game_system.map_interpreter.running? or
  105.              $game_system.encounter_disabled
  106.         # 确定队伍
  107.         n = rand($game_map.encounter_list.size)
  108.         troop_id = $game_map.encounter_list[n]
  109.         # 队伍有效的话
  110.         if $data_troops[troop_id] != nil
  111.           # 设置调用战斗标志
  112.           $game_temp.battle_calling = true
  113.           $game_temp.battle_troop_id = troop_id
  114.           $game_temp.battle_can_escape = true
  115.           $game_temp.battle_can_lose = false
  116.           $game_temp.battle_proc = nil
  117.         end
  118.       end
  119.     end
  120.     # 按下 B 键的情况下
  121.     if Input.trigger?(Input::B)
  122.       # 不是在事件执行中或菜单禁止中
  123.       unless $game_system.map_interpreter.running? or
  124.              $game_system.menu_disabled
  125.         # 设置菜单调用标志以及 SE 演奏
  126.         $game_temp.menu_calling = true
  127.         $game_temp.menu_beep = true
  128.       end
  129.     end
  130.     # 调试模式为 ON 并且按下 F9 键的情况下
  131.     if $DEBUG and Input.press?(Input::F9)
  132.       # 设置调用调试标志
  133.       $game_temp.debug_calling = true
  134.     end
  135.     # 不在主角移动中的情况下
  136.     unless $game_player.moving?
  137.       # 执行各种画面的调用
  138.       if $game_temp.battle_calling
  139.         call_battle
  140.       elsif $game_temp.shop_calling
  141.         call_shop
  142.       elsif $game_temp.name_calling
  143.         call_name
  144.       elsif $game_temp.menu_calling
  145.         call_menu
  146.       elsif $game_temp.save_calling
  147.         call_save
  148.       elsif $game_temp.debug_calling
  149.         call_debug
  150.       end
  151.     end
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● 调用战斗
  155.   #--------------------------------------------------------------------------
  156.   def call_battle
  157.     # 清除战斗调用标志
  158.     $game_temp.battle_calling = false
  159.     # 清除菜单调用标志
  160.     $game_temp.menu_calling = false
  161.     $game_temp.menu_beep = false
  162.     # 生成遇敌计数
  163.     $game_player.make_encounter_count
  164.     # 记忆地图 BGM 、停止 BGM
  165.     $game_temp.map_bgm = $game_system.playing_bgm
  166.     # 演奏战斗开始 SE
  167.     $game_system.se_play($data_system.battle_start_se)
  168.     # 演奏战斗 BGM
  169.     # 矫正主角姿势
  170.     $game_player.straighten
  171.     # 切换到战斗画面
  172.     $scene = Scene_Battle.new
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 调用商店
  176.   #--------------------------------------------------------------------------
  177.   def call_shop
  178.     # 清除商店调用标志
  179.     $game_temp.shop_calling = false
  180.     # 矫正主角姿势
  181.     $game_player.straighten
  182.     # 切换到商店画面
  183.     $scene = Scene_Shop.new
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ● 调用名称输入
  187.   #--------------------------------------------------------------------------
  188.   def call_name
  189.     # 清除商店调用名称输入标志
  190.     $game_temp.name_calling = false
  191.     # 矫正主角姿势
  192.     $game_player.straighten
  193.     # 切换到名称输入画面
  194.     $scene = Scene_Name.new
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 调用菜单
  198.   #--------------------------------------------------------------------------
  199.   def call_menu
  200.     # 清除商店调用菜单标志
  201.     $game_temp.menu_calling = false
  202.     # 已经设置了菜单 SE 演奏标志的情况下
  203.     if $game_temp.menu_beep
  204.       # 演奏确定 SE
  205.       $game_system.se_play($data_system.decision_se)
  206.       # 清除菜单演奏 SE 标志
  207.       $game_temp.menu_beep = false
  208.     end
  209.     # 矫正主角姿势
  210.     $game_player.straighten
  211.     # 切换到菜单画面
  212.     $scene = Scene_Menu.new
  213.   end
  214.   #--------------------------------------------------------------------------
  215.   # ● 调用存档
  216.   #--------------------------------------------------------------------------
  217.   def call_save
  218.     # 矫正主角姿势
  219.     $game_player.straighten
  220.     # 切换到存档画面
  221.     $scene = Scene_Save.new
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ● 调用调试
  225.   #--------------------------------------------------------------------------
  226.   def call_debug
  227.     # 清除商店调用调试标志
  228.     $game_temp.debug_calling = false
  229.     # 演奏确定 SE
  230.     $game_system.se_play($data_system.decision_se)
  231.     # 矫正主角姿势
  232.     $game_player.straighten
  233.     # 切换到调试画面
  234.     $scene = Scene_Debug.new
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ● 主角的场所移动
  238.   #--------------------------------------------------------------------------
  239.   def transfer_player
  240.     # 清除主角场所移动调试标志
  241.     $game_temp.player_transferring = false
  242.     # 移动目标与现在的地图有差异的情况下
  243.     if $game_map.map_id != $game_temp.player_new_map_id
  244.       # 设置新地图
  245.       $game_map.setup($game_temp.player_new_map_id)
  246.     end
  247.     # 设置主角位置
  248.     $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
  249.     # 设置主角朝向
  250.     case $game_temp.player_new_direction
  251.     when 2  # 下
  252.       $game_player.turn_down
  253.     when 4  # 左
  254.       $game_player.turn_left
  255.     when 6  # 右
  256.       $game_player.turn_right
  257.     when 8  # 上
  258.       $game_player.turn_up
  259.     end
  260.     # 矫正主角姿势
  261.     $game_player.straighten
  262.     # 刷新地图 (执行并行事件)
  263.     $game_map.update
  264.     # 在生成活动块
  265.     @spriteset.dispose
  266.     @spriteset = Spriteset_Map.new
  267.     # 处理过渡中的情况下
  268.     if $game_temp.transition_processing
  269.       # 清除过渡处理中标志
  270.       $game_temp.transition_processing = false
  271.       # 执行过渡
  272.       Graphics.transition(20)
  273.     end
  274.     # 执行地图设置的 BGM、BGS 的自动切换
  275.     $game_map.autoplay
  276.     # 设置画面
  277.     Graphics.frame_reset
  278.     # 刷新输入信息
  279.     Input.update
  280.   end
  281. end
复制代码
战斗时不再有战斗音乐,会不停的播放地图音乐,如果遇到某某BOSS的话, 想改动音乐的话就直接播放另一首BGM就可以了,战斗结束再改回来即可。
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 15:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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