Project1

标题: 随机战斗音乐 [打印本页]

作者: 呆呆的新手    时间: 2007-3-31 05:03
标题: 随机战斗音乐
RMXP虽然有设置战斗音乐,不过只能设置一种。每次战斗都是用一个音乐,听不了几遍就会腻了。尤其是像我这样的新手做的游戏,本来就没什么好图片,要是音乐在太单调,做出来的游戏就没法玩了。所以,我利用随技数的功能,制作了这个小系统,在一般战斗中,有几种不同的音乐可以播放。

(当然,改脚本的话也许会有更好的效果,但对新手来说难了点……{/gg})

现在假设有3个战斗音乐,分别为音乐1、音乐2和音乐3。

首先,需要一个接受随机数的变量,取名为“随机数”。
然后在公共事件中设置一个公共事件,取名为“随机战斗音乐”,目标无。

变量操作:[随机数] = 随机数 (1..3)
条件分歧:变量 [随机数] == 1
  演奏BGM:'音乐1', 100, 100

  除此以外的场合
    条件分歧:变量 [随机数] == 2
      演奏BGM:'音乐2', 100, 100

      除此以外的场合
        演奏BGM:'音乐1', 100, 100

        分歧结束

     分歧结束

接下来,在队伍中设置需要随机战斗音乐的敌人队伍。
条件:回合0    距离:战斗
公共事件:随机战斗音乐

另外,在系统中,将战斗音乐设为“无”,否则在战斗开始前会先播放1秒钟左右的系统战斗音乐,才会开始随机战斗音乐。

这样,在遇敌时就可以随机播放某个战斗音乐。当然战斗音乐个数还可以增加。

(虽然每一个队伍都要设置一次显得麻烦了点,不过我个人觉得还是值得的)
作者: 呆呆的新手    时间: 2007-3-31 05:03
标题: 随机战斗音乐
RMXP虽然有设置战斗音乐,不过只能设置一种。每次战斗都是用一个音乐,听不了几遍就会腻了。尤其是像我这样的新手做的游戏,本来就没什么好图片,要是音乐在太单调,做出来的游戏就没法玩了。所以,我利用随技数的功能,制作了这个小系统,在一般战斗中,有几种不同的音乐可以播放。

(当然,改脚本的话也许会有更好的效果,但对新手来说难了点……{/gg})

现在假设有3个战斗音乐,分别为音乐1、音乐2和音乐3。

首先,需要一个接受随机数的变量,取名为“随机数”。
然后在公共事件中设置一个公共事件,取名为“随机战斗音乐”,目标无。

变量操作:[随机数] = 随机数 (1..3)
条件分歧:变量 [随机数] == 1
  演奏BGM:'音乐1', 100, 100

  除此以外的场合
    条件分歧:变量 [随机数] == 2
      演奏BGM:'音乐2', 100, 100

      除此以外的场合
        演奏BGM:'音乐1', 100, 100

        分歧结束

     分歧结束

接下来,在队伍中设置需要随机战斗音乐的敌人队伍。
条件:回合0    距离:战斗
公共事件:随机战斗音乐

另外,在系统中,将战斗音乐设为“无”,否则在战斗开始前会先播放1秒钟左右的系统战斗音乐,才会开始随机战斗音乐。

这样,在遇敌时就可以随机播放某个战斗音乐。当然战斗音乐个数还可以增加。

(虽然每一个队伍都要设置一次显得麻烦了点,不过我个人觉得还是值得的)
作者: 呆呆的新手    时间: 2007-3-31 05:19
发表感言:
这个思路,使我在学习VB的时候学到的。
VB中常用到的语句大概就是

VB中的语言              RMXP中的语言
Dim ... as ...         (变量操作:[...] =...)
If ... Then ...        (条件分歧:[...] =...)
Else                   (除此之外的场合)
   If...Then...          (条件分歧:[...] =...)
   End If                (分歧结束)
End If                 (分歧结束)


感觉上差不多,于是就拿来用了。
我知道改脚本一定能做得更好,但我对脚本还不太熟悉,就先凑合着用。

另外,这个随机系统不一定要应用到战斗音乐上,还可以用来制作随机战斗,随机事件,随机获得物品等,总之跟随机有关的都可以试一下。

尤其是随机战斗,RMXP的“踩地雷”式遇敌不是很方便,想躲也躲不掉,但单纯的在地图上设置敌人,毕竟没有随即遇到敌人感觉好。于是就可以稍微废点时间,设置一下,遇到同一个人可能会有几个不同的战斗队伍,才不会显得那么单调。
作者: 真·ZERO    时间: 2007-3-31 05:26
其实把调用战斗那一部分改成这样就可以了……
#--------------------------------------------------------------------------
# ● 调用战斗
#--------------------------------------------------------------------------
def call_battle
   # 清除战斗调用标志
   $game_temp.battle_calling = false
   # 清除菜单调用标志
   $game_temp.menu_calling = false
   $game_temp.menu_beep = false
   # 生成遇敌计数
   $game_player.make_encounter_count
   # 记忆地图 BGM 、停止 BGM
   $game_temp.map_bgm = $game_system.playing_bgm
   $game_system.bgm_stop
   # 演奏战斗开始 SE
   $game_system.se_play($data_system.battle_start_se)
   # 演奏战斗 BGM
   randbgm = rand(4)
   case randbgm
   when 0
      Audio.bgm_play("Audio/BGM/001-Battle01.mid")
   when 1
     Audio.bgm_play("Audio/BGM/002-Battle02.mid")
   when 2
     Audio.bgm_play("Audio/BGM/003-Battle03.mid")
   when 3
     Audio.bgm_play("Audio/BGM/004-Battle04.mid")
    end
   # 矫正主角姿势
   $game_player.straighten
   # 切换到战斗画面
   $scene = Scene_Battle.new
end
end

作者: Oo蝶儿oO    时间: 2007-3-31 05:30
提示: 作者被禁止或删除 内容自动屏蔽
作者: 真·ZERO    时间: 2007-3-31 05:38
以下引用Oo蝶儿oO于2007-3-30 21:30:49的发言:

  1. class Scene_Map
  2. #--------------------------------------------------------------------------
  3. # ● 调用战斗
  4. #--------------------------------------------------------------------------
  5. def call_battle
  6.   # 清除战斗调用标志
  7.   $game_temp.battle_calling = false
  8.   # 清除菜单调用标志
  9.   $game_temp.menu_calling = false
  10.   $game_temp.menu_beep = false
  11.   # 生成遇敌计数
  12.   $game_player.make_encounter_count
  13.   # 记忆地图 BGM 、停止 BGM
  14.   $game_temp.map_bgm = $game_system.playing_bgm
  15.   $game_system.bgm_stop
  16.   # 演奏战斗开始 SE
  17.   $game_system.se_play($data_system.battle_start_se)
  18.   # 演奏战斗 BGM
  19.   randbgm = rand(6)
  20.   case randbgm
  21. when 1
  22.     Audio.bgm_play("Audio/BGM/001-Battle01.mid")
  23. when 1
  24.    Audio.bgm_play("Audio/BGM/002-Battle02.mid")
  25. when 2
  26.    Audio.bgm_play("Audio/BGM/003-Battle03.mid")
  27. when 3
  28.    Audio.bgm_play("Audio/BGM/004-Battle04.mid")
  29.    end
  30.   # 矫正主角姿势
  31.   $game_player.straighten
  32.   # 切换到战斗画面
  33.   $scene = Scene_Battle.new
  34. end
  35. end
复制代码

应该还要加上class Scene_Map在第一行


加上之后就可以直接插入到MAIN前面调用了,我只是说一下在“Scene_Map”怎么修改而已……


你改的有几个错误……
randbgm = rand(6)


这个应该和随机播放音乐的总数相等……
when 0
     Audio.bgm_play("Audio/BGM/战斗-草原")
    when 0  

1、编号不能一样……
2、音乐文件名要包括扩展名,例如MP3、WAV什么的


作者: 永劫的咎人    时间: 2007-3-31 05:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: Oo蝶儿oO    时间: 2007-3-31 05:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: 真·ZERO    时间: 2007-3-31 05:52
以下引用永劫的咎人于2007-3-30 21:49:00的发言:

我已经放弃的修改……被弄出来了......
这样做大游戏容量会让人受不了的。


{/fd}
这句话什么意思?一个游戏战斗音乐不用放太多啊,4个就差不多了,容量也不会怎么大啊

作者: 亿万星辰    时间: 2007-3-31 05:53
{/hx}{/hx}{/hx}{/hx}

  1.   # 演奏战斗 BGM
  2.   randbgm = rand(4)
  3.   case randbgm
  4.   when 0
  5.      Audio.bgm_play("Audio/BGM/001-Battle01.mid")
  6.   when 1
  7.     Audio.bgm_play("Audio/BGM/002-Battle02.mid")
  8.   when 2
  9.     Audio.bgm_play("Audio/BGM/003-Battle03.mid")
  10.   when 3
  11.     Audio.bgm_play("Audio/BGM/004-Battle04.mid")
  12.    end
复制代码


可以再邪恶一些~~~

  1.   # 演奏战斗 BGM
  2.   randbgm = rand(4) + 1
  3.   bgmname = sprintf("%03d-Battle%02d",randbgm,randbgm)
  4.   Audio.bgm_play("Audio/BGM/#{bgmname}")
复制代码


{/hx}{/hx}{/hx}{/hx}

另外,容量会很大么?金庸RM20首mid也才209K而已
作者: 永劫的咎人    时间: 2007-3-31 07:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: 迷惑众生    时间: 2007-3-31 09:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: 亿万星辰    时间: 2007-3-31 15:14
怎么把 if 和 sprintf 放一起比较.....○rz

以下引用迷惑众生于2007-3-31 1:31:22的发言:
一般在程序的编写过程中,sprintf之前应该也要有条件式:
# 演奏战斗 BGM
randbgm = rand(4) + 1
if randbgm >=4 OR randbgm <=1 then
....

你这句判断真是让人一头雾水
只在等于4和等于1的时候才去使用这个串么?那中间的部分呢?{/fd}
randbgm 的值取的就是1~4
如果说你想写的是在1和4之间,那么何必又去多这么一个判断呢,必然满足
如果你要写的是除了这些值以外,那岂不是更没必要??{/fd}

另外 关于case和if

1.case是比if要快
2.在判断的条件数可知的情况,可以一一列举出来,这时可以用case,判断条件数不可知时可用if
3.可知判断的条件数超过3个或3个以上可使用case,结构清晰.
作者: 迷惑众生    时间: 2007-3-31 22:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: 迷惑众生    时间: 2007-3-31 23:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: 亿万星辰    时间: 2007-3-31 23:31
rand(4) + 1 难道会得到一个比1小比4大的数字么??{/fd}

严谨是对的,但是最好还是先分析一下.........{/gg}
作者: Benavii    时间: 2007-4-1 02:10
以下引用迷惑众生于2007-3-31 15:20:50的发言:

很多时候都有例外的情形发生。

我举一个例子。

已知三角形ABC,以A、B、C为顶点,画三个圆,彼此相碰,但不相交,也不相离。

我说给许多人听,某些人认为可以画出来,另一些人想象不出,认为圆若不是相交便是相离,怎么可能相碰?

这世界上有个叫等边三角形的冬冬- -b
另外那些想不出来的可能是把相切算作相交- -

另外rand(4) + 1就是出现1到4的数值嗯= = 跟1+1=2一样
作者: 美兽    时间: 2007-4-1 04:02
以下引用Benavii于2007-3-31 18:10:37的发言:


以下引用迷惑众生于2007-3-31 15:20:50的发言:

很多时候都有例外的情形发生。

我举一个例子。

已知三角形ABC,以A、B、C为顶点,画三个圆,彼此相碰,但不相交,也不相离。

我说给许多人听,某些人认为可以画出来,另一些人想象不出,认为圆若不是相交便是相离,怎么可能相碰?


这世界上有个叫等边三角形的冬冬- -b
另外那些想不出来的可能是把相切算作相交- -

另外rand(4) + 1就是出现1到4的数值嗯= = 跟1+1=2一样


任何三角形都可做出三个顶点外切圆,记得初中做过她几何证明。

作者: 红世之徒    时间: 2007-4-1 06:06
问个问题...如果用了上述方法,那么如果我要指定一场战斗要播放一个指定音乐..那要怎么解决?
作者: 真马甲无双    时间: 2007-4-1 06:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: 亿万星辰    时间: 2007-4-1 15:15
以下引用红世之徒于2007-3-31 22:06:35的发言:

问个问题...如果用了上述方法,那么如果我要指定一场战斗要播放一个指定音乐..那要怎么解决?

可以判断如果地图是没有给定BGM,或者说给定某个BGM时,再让这个随机发作
作者: 迷惑众生    时间: 2007-4-11 03:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: Dark乾坤    时间: 2007-4-12 13:32
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1