概述

一个好的游戏,往往都有着丰富的声音系统,比如说在Minecraft这个游戏中,当你靠近一个洞穴的时候系统就会播放风声,当你的附近有着僵尸的时候就会传来僵尸的吼叫声,玩家可以通过声音来判断目前的状态,这无疑增加了游戏的趣味性和冒险性。

本部分内容将带领读者完成在Minecraft中导入声音、并在适当的时候播放声音的内容。我们假设读者已经拥有了想要应用在Minecraft中的OGG格式的音乐,也就是后缀名为ogg的音乐文件。这里我们采用的是本部分的作者使用计算机合成的一段非常短的,被用作音效的音乐。如有需要,可以通过这个链接获取音乐,并随意使用,作者不保留这段音乐的任何版权。

音乐索引文件

我们需要在assets.fmltutor包下创建一个文件:sounds.json

src/main/resources/assets/fmltutor/sounds.json:

{
    "fmltutor.test": {
        "category": "player", 
        "sounds": [ 
            "fmltutor" 
        ] 
    }
}

这个名为sounds.json的文件,就是这个Mod的音乐索引文件,其中贮存了各种各样音乐的索引。

这个文件的内容,是一段非常普通的JSON文件,这个文件通过储存JSON对象的方式提供键值对。这里的键值对中,标识符为这个声音的名称,在这里就是fmltutor.test,在程序中调用的时候要加上Mod id,也就是fmltutor:fmltutor.test,而值就是关于这个声音的信息。

  • category表示的是这个声音的类型,总共有ambient(环境)、weather(天气)、player(玩家)、neutral(中立)、hostile(敌对)、block(方块)、record(唱片)、music(音乐)、master(控制)这八种类型。
  • sounds表示的就是声音了,这里表示的声音存放在这个音乐索引文件所在目录下的sounds文件夹下,在这里就是assets.fmltutor.sounds包下,这里表示的声音是一个列表,在游戏中会随机选取其中一个所代表的声音播放。

sounds表示的声音列表还可以有volumepitch等选项,分别表示响度、音量等。不过这里我们不作讨论,感兴趣的读者可以自己查找相关信息。

然后我们在assets.fmltutor.sounds下放置一个名为fmltutor.oggOGG格式的音乐,就可以了。

播放这个音乐

net.minecraft.world.World类有数个用于播放音乐的方法,其中有两个方法比较常用,其中一个为playSoundAtEntity,用于在特定实体所在位置播放音乐,还有一个就是playSound方法,用于在特定位置播放特定的声音,还可以设定这个声音是否有声速延迟。

我们先来看一下playSound方法:

  • 前三个参数表示这个声音所在位置的坐标,分别为xyz
  • 第四个参数表示这个声音的名称,在上面的声音索引文件中有所提及。
  • 第五个参数表示这个声音的响度,默认响度为1.0F。
  • 第六个参数表示这个声音的音调,默认音调为1.0F。
  • 最后一个参数表示这个声音是否有延迟,比如雷声就存在着延迟。

我们再来看一下playSoundAtEntity方法:

  • 第一个参数表示该实体,没有什么过多的解释。
  • 第二个参数表示声音的名称,和上面一样。
  • 最后两个参数分别表示声音的响度和音调,和上面的同样没有差别。

有了这些,我们就可以试一试了:

src/main/java/com/github/ustc_zzzz/fmltutor/common/EventLoader.java(部分):

    @SubscribeEvent
    public void onPlayerItemCrafted(PlayerEvent.ItemCraftedEvent event)
    {
        event.player.worldObj.playSoundAtEntity(event.player, "fmltutor:fmltutor.test", 1.0F, 1.0F);
        if (event.crafting.getItem() == Item.getItemFromBlock(BlockLoader.grassBlock))
        {
            event.player.triggerAchievement(AchievementLoader.buildGrassBlock);
        }
    }

当玩家在工作台合成物品之后便会在玩家所在处播放一个叫作fmltutor的Mod下的一个名为fmltutor.test的声音,也就是这里的示例声音。

打开游戏试试吧~

results matching ""

    No results matching ""