随笔 - 51,  文章 - 0,  评论 - 6,  阅读 - 32766

1.在主mainGame 里设置music信息

1
2
3
private Music music;
private int musicId;
private int lastMusicId;public int musicVoice;<br>public int soundVoice;

2.初始化加载

 musicVoice=gameConfig.playerConfig.getInteger("music",4);
         soundVoice=gameConfig.playerConfig.getInteger("sound",4);
        musicId=gameConfig.geRandomtMusicId(0,0);
        music = Gdx.audio.newMusic(gameConfig.getMusicFile(musicId));
        music.setLooping(true);
        music.setVolume(musicVoice*1f/7);
        music.play();

3.记录音乐信息并加载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public int geRandomtMusicId(int type,int lastId) {
       Array<XmlReader.Element> xmlEs=getCONFIG_MUSIC().e.getChildrenByName("music");
       int musicId=lastId;
       IntArray rs=game.tempUtil.getTempIntArray();
       for(int i=0;i<xmlEs.size;i++){
           XmlReader.Element e=xmlEs.get(i);
           int id=e.getInt("id");
           if(e.getInt("type",-1)==type&&id!=lastId){
               rs.add(id);
           }
       }
       if(rs.size>0){
           musicId=rs.random();
           game.tempUtil.disposeTempIntArray(rs);
       }
       Gdx.app.log("geRandomtMusicId",lastId+":"+musicId+":"+type);
       return musicId;
   }
 
   public FileHandle getMusicFile(int musicId){
       XmlReader.Element e=getCONFIG_MUSIC().getElementById(musicId);
       if(e!=null){
           return Gdx.files.internal(e.get("file"));
       }
       return Gdx.files.internal("audio/jokull.mp3");
   }

4.播放

复制代码
//ifForceLoop 是否强制设定音乐循环
    public void setMusicById(int id,boolean ifForceLoop){
        Gdx.app.log("playMusic",id+":"+musicVoice);
        if(musicId!=id||!music.isLooping()){
           lastMusicId=musicId;
            musicId=id;
            music.pause();
            music.dispose();
            music = Gdx.audio.newMusic(gameConfig.getMusicFile(musicId));
         //   music.setLooping(true);
            music.setVolume(musicVoice*1f/7);
            music.play();
           if(gameConfig.getCONFIG_MUSIC().getElementById(musicId).get("play","loop").equals("loop")||ifForceLoop){
               music.setLooping(true);
           }else{
               music.setLooping(false);
               music.setOnCompletionListener(new Music.OnCompletionListener() {
                   @Override
                   public void onCompletion(Music aMusic) {
                        int musicType=gameConfig.getCONFIG_MUSIC().getElementById(musicId).getInt("type",0);
                       int musicId=gameConfig.geRandomtMusicId(musicType,lastMusicId);
                       setMusicById(musicId,false);
                   }
               });
           }
        }
    }
    public void setMusicByType(int type){
        int musicType=gameConfig.getCONFIG_MUSIC().getElementById(musicId).getInt("type",0);
       if(type!=musicType){
        int musicId=gameConfig.geRandomtMusicId(type,this.musicId);
           setMusicById(musicId,false);
       }
    }
复制代码

 

  5.在转换场景中加入切歌

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void toScreen(int nextScreenId) {
 
if(nextScreenId==81){   //获取战斗场景中的详细音乐设定
            XmlReader.Element xmlE=gameConfig.getDEF_STAGE().getElementById(stageId);
           int musicId=xmlE.getInt("musicId",0);
            if(musicId==-1){//如果值是-1,则默认为通用战斗场景播放
                int bgmType=gameConfig.getCONFIG_LAYOUT().getElementById(screenId).getInt("bgmType");
                setMusicByType(bgmType);
            }else {
               setMusicById(musicId,true);
            }
        }else {//获取普通场景的音乐类型设定
            int bgmType=gameConfig.getCONFIG_LAYOUT().getElementById(screenId).getInt("bgmType");
            setMusicByType(bgmType);
        }
 
 
-----------------场景跳转--------------------
 
}

  

 

posted on   黑狱  阅读(72)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示