(游戏)打飞机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:\Android\Android Studio\plugins\android\lib\templates\gradle-projects\NewAndroidModule\root\res\mipmap-hdpi

Android_(游戏)打飞机06:后续的更多相关文章

  1. Android_(游戏)打飞机05:处理子弹,击中敌机,添加计分板

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  2. Android_(游戏)打飞机04:绘画敌机、添加子弹

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  3. Android_(游戏)打飞机03:控制玩家飞机

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  4. Android_(游戏)打飞机02:游戏背景滚动

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  5. Android_(游戏)打飞机01:前言

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  6. 微信小游戏 demo 飞机大战 代码分析 (二)(databus.js)

    微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  7. 微信小游戏 demo 飞机大战 代码分析 (一)(game.js, main.js)

    微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  8. Python小游戏之 - 飞机大战美女 !

    用Python写的"飞机大战美女"小游戏 源代码如下: # coding=utf-8 import os import random import pygame # 用一个常量来存 ...

  9. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

随机推荐

  1. MySQL的库、表的详细操作

    目录 MySQL的库.表的详细操作 一 库操作 二 表操作 MySQL的库.表的详细操作 本节目录 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset ...

  2. 协程+IO切换+小爬虫

    from gevent import monkeymonkey.patch_all() import geventimport requests def f1(url): print(f'GET:{u ...

  3. oa_mvc_easyui_详细页(5)

    1.表格详细列中添加a标签,给id参数 <a href="javascript:void(0)" class="details" ids="@n ...

  4. wpf GridSplitter左右托不了或者拖拽异常

    对于水平分割线,需要将verticalAlignment属性设置为Center 对于垂直分割线,需要将horizontalAlignment属性设置为center 切记切记,不然很苦逼....

  5. Vue实例:vue2.0+ElementUI框架开发pc项目

    开发前准备 vue.js2.0中文,项目所使用的js框架 vue-router,vue.js配套路由 vuex,状态管理 Element,UI框架 1,根据官方指引,构建项目框架 安装vue npm ...

  6. js中 base64 转二进制

    function base64toBlob(base64,type) { // 将base64转为Unicode规则编码 let bstr = atob(base64, type), n = bstr ...

  7. scala下划线的作用

    https://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-an-underscore-in-scala Existent ...

  8. centos 7 私有云盘 OwnCloud 安装搭建脚本

    #!/bin/bash #Build LAMP Server Conf mysql_secure_installation service mariadb restart systemctl enab ...

  9. Jmeter 常见逻辑控制器详解

    简介 Jmeter有很多逻辑控制器,可以控制请求的执行顺序和执行逻辑,本文就Jmeter常见的逻辑控制器做一个详细的描述,并通过示例让大家了解逻辑控制器的作用.   代码的逻辑分支通常有: 条件判断I ...

  10. 测试人员必备:linux文件清理不得不知道的技巧

    测试人员最常见和繁琐的任务之一就是清理系统,比如防止磁盘空间出现不足.下面是我收集的一些常用的 Linux 文件系统相关命令. 一 检查可用空间 要查找服务器上所有文件系统上的可用空间,请执行以下命令 ...