zoukankan      html  css  js  c++  java
  • Android_(游戏)打飞机06:后续

    (游戏)打飞机01:前言  传送门

    (游戏)打飞机02:游戏背景滚动  传送门

    (游戏)打飞机03:控制玩家飞机   传送门 

    (游戏)打飞机04:绘画敌机、添加子弹    传送门

    (游戏)打飞机05:处理子弹,击中敌机,添加计分板   传送门

    (游戏)打飞机06:后续  传送门

    添加游戏声音

        private SoundPool pool=null;
        private int sound_bomb=0;
        private int sound_gameover=0;
        private int sound_shot=0;
     1. SoundPool最大只能申请1M的内存空间,这就意味着我们只能用一些很短的声音片段,而不是用它来播放歌 曲或者做游戏背景音乐。
    
       2. SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。Android开发网建议使用这两个方法的时候尽可能多做测试工作,还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。
    
       3. SoundPool的效率问题。其实SoundPool的效率在这些播放类中算是很好的了,这可能会影响用户体验。也许这不能管SoundPool本身,因为到了性能比较好的Droid中这个延迟就可以让人接受了。
    SoundPool注意事项
            //加载声音
    
            pool= new SoundPool(3, AudioManager.STREAM_SYSTEM,5);
    
            sound_bomb=pool.load(getContext(),R.raw.bomb,1);
            sound_gameover=pool.load(getContext(),R.raw.gameover,1);
            sound_shot=pool.load(getContext(),R.raw.shot,1);

      Android的SoundPool  传送门

      play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)   播放声音

      其中leftVolume和rightVolume表示左右音量,

        priority表示优先级,

        loop表示循环次数,

      rate表示速率,如 //速率最低0.5最高为2,1代表正常速度
      sp.play(soundId, 1, 1, 0, 0, 1);
      而停止则可以使用 pause(int streamID) 方法,这里的streamID和soundID均在构造SoundPool类的  

      第一个参数中指明了总数量,而id从0开始

      添加子弹声音

             if(selectfeiji!=null){
                        if(zidan_num==5){
                            pool.play(sound_shot,1,1,1,0,1);
                            zidans.add(new Zidan(selectfeiji,zidan));
                            zidan_num=0;
                        }
                        zidan_num++;
                    }

      添加在子弹击中敌机的时候添加爆炸声音

        //受到攻击
            public void shoudaogongji(ArrayList<Zidan> zidans){
    
                if(!state){
                    for(GameImage zidan:(List<GameImage>)zidans.clone()){
    
                        if(zidan.getX()>x&&zidan.getY()>y
                                &&zidan.getX()<x+width
                                &&zidan.getY()<y+height){
                            //子弹击中敌机了
                            zidans.remove(zidan);
                            state=true;
                            bitmaps=baozhas;
                            fenshu+=10;
                            pool.play(sound_bomb,1,1,1,0,1);
                            break;
                        }
                    }
                }
            }

      声音不放在线程中会可能会由于内存的问题导致声音播放时间延迟0.5S,听起来会有点别扭

    线程中播放声音

      创建游戏声音播放线程

        private class SoundPlay extends Thread{
            int i=0;
            public SoundPlay(int i){
                this.i=1;
            }
    
            public void run(){
                pool.play(i,1,1,1,0,1);
            }
    
        }

      添加子弹声音

           if(selectfeiji!=null){
                        if(zidan_num==5){
                            new SoundPlay(sound_shot).start();
                        //    pool.play(sound_shot,1,1,1,0,1);
                            zidans.add(new Zidan(selectfeiji,zidan));
                            zidan_num=0;
                        }
                        zidan_num++;
                    }

      添加在子弹击中敌机的时候添加爆炸声音

        //判断敌机是否被击中
            private boolean state=false;
            //受到攻击
            public void shoudaogongji(ArrayList<Zidan> zidans){
    
                if(!state){
                    for(GameImage zidan:(List<GameImage>)zidans.clone()){
    
                        if(zidan.getX()>x&&zidan.getY()>y
                                &&zidan.getX()<x+width
                                &&zidan.getY()<y+height){
                            //子弹击中敌机了
                            zidans.remove(zidan);
                            state=true;
                            bitmaps=baozhas;
                            fenshu+=10;
                            new SoundPlay(sound_bomb).start();
                            // pool.play(sound_bomb,1,1,1,0,1);
                            break;
                        }
                    }
                }
            }

    App ICON

    Android Studio中设置App Icon   百度经验:传送门

    打开---文件----new----image asset

      设置图标保存文件到drawable时后有时会在Asset Studio里面Path找不到图片路径,这时可以找到mipmap-hdpi文件路径,把照片放到那下面

    D:AndroidAndroid Studiopluginsandroidlib	emplatesgradle-projectsNewAndroidModule
    oot
    esmipmap-hdpi

    (如需转载学习,请标明出处)
  • 相关阅读:
    0902-用GAN生成动漫头像
    0901-生成对抗网络GAN的原理简介
    AES加密
    排序问题
    js中0.1+0.2!=0.3的问题
    关于JavaScript中Number整数最大长度的一个疑问
    IEEE 754标准
    关于浏览器接口Preview中的数值和postman中获取到的不一致问题
    .Net Core 配置之long类型 前端精度丢失和时间格式设置
    .netcore GRPC根据协议生成代码,以及去掉非空判断
  • 原文地址:https://www.cnblogs.com/1138720556Gary/p/9459616.html
Copyright © 2011-2022 走看看